@wolfx/oh-my-openagent 4.2.0-patch.1 → 4.2.0-patch.3

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 (97) hide show
  1. package/package.json +4 -3
  2. package/packages/lsp-tools-mcp/dist/cli.d.ts +3 -0
  3. package/packages/lsp-tools-mcp/dist/cli.d.ts.map +1 -0
  4. package/packages/lsp-tools-mcp/dist/cli.js +24 -0
  5. package/packages/lsp-tools-mcp/dist/cli.js.map +1 -0
  6. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +2 -0
  7. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts.map +1 -0
  8. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.js +7 -0
  9. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.js.map +1 -0
  10. package/packages/lsp-tools-mcp/dist/lsp/client-wrapper.d.ts +14 -0
  11. package/packages/lsp-tools-mcp/dist/lsp/client-wrapper.d.ts.map +1 -0
  12. package/packages/lsp-tools-mcp/dist/lsp/client-wrapper.js +110 -0
  13. package/packages/lsp-tools-mcp/dist/lsp/client-wrapper.js.map +1 -0
  14. package/packages/lsp-tools-mcp/dist/lsp/client.d.ts +21 -0
  15. package/packages/lsp-tools-mcp/dist/lsp/client.d.ts.map +1 -0
  16. package/packages/lsp-tools-mcp/dist/lsp/client.js +130 -0
  17. package/packages/lsp-tools-mcp/dist/lsp/client.js.map +1 -0
  18. package/packages/lsp-tools-mcp/dist/lsp/config-loader.d.ts +25 -0
  19. package/packages/lsp-tools-mcp/dist/lsp/config-loader.d.ts.map +1 -0
  20. package/packages/lsp-tools-mcp/dist/lsp/config-loader.js +110 -0
  21. package/packages/lsp-tools-mcp/dist/lsp/config-loader.js.map +1 -0
  22. package/packages/lsp-tools-mcp/dist/lsp/connection.d.ts +5 -0
  23. package/packages/lsp-tools-mcp/dist/lsp/connection.d.ts.map +1 -0
  24. package/packages/lsp-tools-mcp/dist/lsp/connection.js +67 -0
  25. package/packages/lsp-tools-mcp/dist/lsp/connection.js.map +1 -0
  26. package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +11 -0
  27. package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts.map +1 -0
  28. package/packages/lsp-tools-mcp/dist/lsp/constants.js +11 -0
  29. package/packages/lsp-tools-mcp/dist/lsp/constants.js.map +1 -0
  30. package/packages/lsp-tools-mcp/dist/lsp/directory-diagnostics.d.ts +4 -0
  31. package/packages/lsp-tools-mcp/dist/lsp/directory-diagnostics.d.ts.map +1 -0
  32. package/packages/lsp-tools-mcp/dist/lsp/directory-diagnostics.js +124 -0
  33. package/packages/lsp-tools-mcp/dist/lsp/directory-diagnostics.js.map +1 -0
  34. package/packages/lsp-tools-mcp/dist/lsp/errors.d.ts +36 -0
  35. package/packages/lsp-tools-mcp/dist/lsp/errors.d.ts.map +1 -0
  36. package/packages/lsp-tools-mcp/dist/lsp/errors.js +57 -0
  37. package/packages/lsp-tools-mcp/dist/lsp/errors.js.map +1 -0
  38. package/packages/lsp-tools-mcp/dist/lsp/formatters.d.ts +13 -0
  39. package/packages/lsp-tools-mcp/dist/lsp/formatters.d.ts.map +1 -0
  40. package/packages/lsp-tools-mcp/dist/lsp/formatters.js +109 -0
  41. package/packages/lsp-tools-mcp/dist/lsp/formatters.js.map +1 -0
  42. package/packages/lsp-tools-mcp/dist/lsp/infer-extension.d.ts +2 -0
  43. package/packages/lsp-tools-mcp/dist/lsp/infer-extension.d.ts.map +1 -0
  44. package/packages/lsp-tools-mcp/dist/lsp/infer-extension.js +59 -0
  45. package/packages/lsp-tools-mcp/dist/lsp/infer-extension.js.map +1 -0
  46. package/packages/lsp-tools-mcp/dist/lsp/json-rpc-connection.d.ts +37 -0
  47. package/packages/lsp-tools-mcp/dist/lsp/json-rpc-connection.d.ts.map +1 -0
  48. package/packages/lsp-tools-mcp/dist/lsp/json-rpc-connection.js +248 -0
  49. package/packages/lsp-tools-mcp/dist/lsp/json-rpc-connection.js.map +1 -0
  50. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +5 -0
  51. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts.map +1 -0
  52. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.js +170 -0
  53. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.js.map +1 -0
  54. package/packages/lsp-tools-mcp/dist/lsp/manager.d.ts +48 -0
  55. package/packages/lsp-tools-mcp/dist/lsp/manager.d.ts.map +1 -0
  56. package/packages/lsp-tools-mcp/dist/lsp/manager.js +308 -0
  57. package/packages/lsp-tools-mcp/dist/lsp/manager.js.map +1 -0
  58. package/packages/lsp-tools-mcp/dist/lsp/process.d.ts +26 -0
  59. package/packages/lsp-tools-mcp/dist/lsp/process.d.ts.map +1 -0
  60. package/packages/lsp-tools-mcp/dist/lsp/process.js +124 -0
  61. package/packages/lsp-tools-mcp/dist/lsp/process.js.map +1 -0
  62. package/packages/lsp-tools-mcp/dist/lsp/server-definitions.d.ts +5 -0
  63. package/packages/lsp-tools-mcp/dist/lsp/server-definitions.d.ts.map +1 -0
  64. package/packages/lsp-tools-mcp/dist/lsp/server-definitions.js +159 -0
  65. package/packages/lsp-tools-mcp/dist/lsp/server-definitions.js.map +1 -0
  66. package/packages/lsp-tools-mcp/dist/lsp/server-installation.d.ts +3 -0
  67. package/packages/lsp-tools-mcp/dist/lsp/server-installation.d.ts.map +1 -0
  68. package/packages/lsp-tools-mcp/dist/lsp/server-installation.js +51 -0
  69. package/packages/lsp-tools-mcp/dist/lsp/server-installation.js.map +1 -0
  70. package/packages/lsp-tools-mcp/dist/lsp/server-resolution.d.ts +12 -0
  71. package/packages/lsp-tools-mcp/dist/lsp/server-resolution.d.ts.map +1 -0
  72. package/packages/lsp-tools-mcp/dist/lsp/server-resolution.js +75 -0
  73. package/packages/lsp-tools-mcp/dist/lsp/server-resolution.js.map +1 -0
  74. package/packages/lsp-tools-mcp/dist/lsp/transport.d.ts +26 -0
  75. package/packages/lsp-tools-mcp/dist/lsp/transport.d.ts.map +1 -0
  76. package/packages/lsp-tools-mcp/dist/lsp/transport.js +234 -0
  77. package/packages/lsp-tools-mcp/dist/lsp/transport.js.map +1 -0
  78. package/packages/lsp-tools-mcp/dist/lsp/types.d.ts +125 -0
  79. package/packages/lsp-tools-mcp/dist/lsp/types.d.ts.map +1 -0
  80. package/packages/lsp-tools-mcp/dist/lsp/types.js +2 -0
  81. package/packages/lsp-tools-mcp/dist/lsp/types.js.map +1 -0
  82. package/packages/lsp-tools-mcp/dist/lsp/utils.d.ts +5 -0
  83. package/packages/lsp-tools-mcp/dist/lsp/utils.d.ts.map +1 -0
  84. package/packages/lsp-tools-mcp/dist/lsp/utils.js +43 -0
  85. package/packages/lsp-tools-mcp/dist/lsp/utils.js.map +1 -0
  86. package/packages/lsp-tools-mcp/dist/lsp/workspace-edit.d.ts +9 -0
  87. package/packages/lsp-tools-mcp/dist/lsp/workspace-edit.d.ts.map +1 -0
  88. package/packages/lsp-tools-mcp/dist/lsp/workspace-edit.js +114 -0
  89. package/packages/lsp-tools-mcp/dist/lsp/workspace-edit.js.map +1 -0
  90. package/packages/lsp-tools-mcp/dist/mcp.d.ts +31 -0
  91. package/packages/lsp-tools-mcp/dist/mcp.d.ts.map +1 -0
  92. package/packages/lsp-tools-mcp/dist/mcp.js +95 -0
  93. package/packages/lsp-tools-mcp/dist/mcp.js.map +1 -0
  94. package/packages/lsp-tools-mcp/dist/tools.d.ts +91 -0
  95. package/packages/lsp-tools-mcp/dist/tools.d.ts.map +1 -0
  96. package/packages/lsp-tools-mcp/dist/tools.js +453 -0
  97. package/packages/lsp-tools-mcp/dist/tools.js.map +1 -0
@@ -0,0 +1,308 @@
1
+ import { reportBestEffortCleanupError } from "./cleanup-errors.js";
2
+ import { LspClient } from "./client.js";
3
+ import { IDLE_TIMEOUT_MS, INIT_TIMEOUT_MS, REAPER_INTERVAL_MS } from "./constants.js";
4
+ async function stopClientBestEffort(client) {
5
+ try {
6
+ await client.stop();
7
+ }
8
+ catch (error) {
9
+ reportBestEffortCleanupError("client stop", error);
10
+ }
11
+ }
12
+ function awaitWithSignal(promise, signal) {
13
+ if (!signal)
14
+ return promise;
15
+ return new Promise((resolve, reject) => {
16
+ let settled = false;
17
+ const onAbort = () => {
18
+ if (settled)
19
+ return;
20
+ settled = true;
21
+ reject(new DOMException("Aborted", "AbortError"));
22
+ };
23
+ if (signal.aborted) {
24
+ onAbort();
25
+ return;
26
+ }
27
+ signal.addEventListener("abort", onAbort, { once: true });
28
+ promise.then((value) => {
29
+ if (settled)
30
+ return;
31
+ settled = true;
32
+ signal.removeEventListener("abort", onAbort);
33
+ resolve(value);
34
+ }, (err) => {
35
+ if (settled)
36
+ return;
37
+ settled = true;
38
+ signal.removeEventListener("abort", onAbort);
39
+ reject(err);
40
+ });
41
+ });
42
+ }
43
+ export class LspManager {
44
+ constructor(options = {}) {
45
+ this.clients = new Map();
46
+ this.reaperHandle = null;
47
+ this.exitDisposer = null;
48
+ this.disposed = false;
49
+ this.idleTimeoutMs = options.idleTimeoutMs ?? IDLE_TIMEOUT_MS;
50
+ this.initTimeoutMs = options.initTimeoutMs ?? INIT_TIMEOUT_MS;
51
+ this.reaperIntervalMs = options.reaperIntervalMs ?? REAPER_INTERVAL_MS;
52
+ this.clientFactory = options.clientFactory ?? ((root, server) => new LspClient(root, server));
53
+ this.now = options.now ?? (() => Date.now());
54
+ this.startReaper();
55
+ this.installProcessExitHandler();
56
+ }
57
+ startReaper() {
58
+ if (this.reaperHandle)
59
+ return;
60
+ this.reaperHandle = setInterval(() => {
61
+ this.reapStale();
62
+ }, this.reaperIntervalMs);
63
+ if (typeof this.reaperHandle.unref === "function") {
64
+ this.reaperHandle.unref();
65
+ }
66
+ }
67
+ installProcessExitHandler() {
68
+ const handler = () => {
69
+ for (const managed of this.clients.values()) {
70
+ try {
71
+ void stopClientBestEffort(managed.client);
72
+ }
73
+ catch (error) {
74
+ reportBestEffortCleanupError("exit handler client stop", error);
75
+ }
76
+ }
77
+ this.clients.clear();
78
+ };
79
+ process.on("exit", handler);
80
+ this.exitDisposer = () => {
81
+ process.removeListener("exit", handler);
82
+ };
83
+ }
84
+ getKey(root, serverId) {
85
+ return `${root}::${serverId}`;
86
+ }
87
+ reapStale() {
88
+ const t = this.now();
89
+ for (const [key, managed] of this.clients) {
90
+ if (managed.isInitializing &&
91
+ managed.initializingSince !== null &&
92
+ t - managed.initializingSince > this.initTimeoutMs) {
93
+ void stopClientBestEffort(managed.client);
94
+ this.clients.delete(key);
95
+ continue;
96
+ }
97
+ if (!managed.isInitializing &&
98
+ managed.refCount === 0 &&
99
+ managed.pendingWaiters === 0 &&
100
+ t - managed.lastUsedAt > this.idleTimeoutMs) {
101
+ void stopClientBestEffort(managed.client);
102
+ this.clients.delete(key);
103
+ }
104
+ }
105
+ }
106
+ async tryDeleteIfOrphaned(key, managed) {
107
+ if (managed.refCount === 0 &&
108
+ managed.pendingWaiters === 0 &&
109
+ !managed.isInitializing &&
110
+ this.clients.get(key) === managed) {
111
+ this.clients.delete(key);
112
+ await stopClientBestEffort(managed.client);
113
+ }
114
+ }
115
+ async getClient(root, server, signal) {
116
+ if (this.disposed) {
117
+ throw new Error("LspManager has been disposed");
118
+ }
119
+ signal?.throwIfAborted();
120
+ const key = this.getKey(root, server.id);
121
+ let managed = this.clients.get(key);
122
+ if (managed) {
123
+ const t = this.now();
124
+ if (managed.isInitializing &&
125
+ managed.initializingSince !== null &&
126
+ t - managed.initializingSince > this.initTimeoutMs) {
127
+ await stopClientBestEffort(managed.client);
128
+ this.clients.delete(key);
129
+ managed = undefined;
130
+ }
131
+ }
132
+ if (managed) {
133
+ if (managed.initPromise) {
134
+ managed.pendingWaiters++;
135
+ try {
136
+ await awaitWithSignal(managed.initPromise, signal);
137
+ }
138
+ catch (err) {
139
+ managed.pendingWaiters--;
140
+ await this.tryDeleteIfOrphaned(key, managed);
141
+ throw err;
142
+ }
143
+ managed.pendingWaiters--;
144
+ }
145
+ if (signal?.aborted) {
146
+ await this.tryDeleteIfOrphaned(key, managed);
147
+ signal.throwIfAborted();
148
+ }
149
+ if (!managed.client.isAlive()) {
150
+ await stopClientBestEffort(managed.client);
151
+ this.clients.delete(key);
152
+ return this.getClient(root, server, signal);
153
+ }
154
+ managed.refCount++;
155
+ managed.lastUsedAt = this.now();
156
+ return managed.client;
157
+ }
158
+ const client = this.clientFactory(root, server);
159
+ const initStartedAt = this.now();
160
+ const initPromise = (async () => {
161
+ await client.start();
162
+ await client.initialize();
163
+ })();
164
+ const newManaged = {
165
+ client,
166
+ refCount: 0,
167
+ pendingWaiters: 1,
168
+ lastUsedAt: initStartedAt,
169
+ initPromise,
170
+ isInitializing: true,
171
+ initializingSince: initStartedAt,
172
+ };
173
+ this.clients.set(key, newManaged);
174
+ try {
175
+ await awaitWithSignal(initPromise, signal);
176
+ }
177
+ catch (err) {
178
+ newManaged.pendingWaiters--;
179
+ if (this.clients.get(key) === newManaged) {
180
+ this.clients.delete(key);
181
+ }
182
+ await stopClientBestEffort(client);
183
+ throw err;
184
+ }
185
+ newManaged.pendingWaiters--;
186
+ newManaged.isInitializing = false;
187
+ newManaged.initializingSince = null;
188
+ newManaged.initPromise = null;
189
+ if (signal?.aborted) {
190
+ await this.tryDeleteIfOrphaned(key, newManaged);
191
+ signal.throwIfAborted();
192
+ }
193
+ newManaged.refCount++;
194
+ newManaged.lastUsedAt = this.now();
195
+ return client;
196
+ }
197
+ releaseClient(root, serverId) {
198
+ const key = this.getKey(root, serverId);
199
+ const managed = this.clients.get(key);
200
+ if (managed && managed.refCount > 0) {
201
+ managed.refCount--;
202
+ managed.lastUsedAt = this.now();
203
+ }
204
+ }
205
+ invalidateClient(root, serverId, client) {
206
+ const key = this.getKey(root, serverId);
207
+ const managed = this.clients.get(key);
208
+ if (!managed)
209
+ return;
210
+ if (client && managed.client !== client)
211
+ return;
212
+ this.clients.delete(key);
213
+ void stopClientBestEffort(managed.client);
214
+ }
215
+ warmupClient(root, server) {
216
+ if (this.disposed)
217
+ return;
218
+ const key = this.getKey(root, server.id);
219
+ if (this.clients.has(key))
220
+ return;
221
+ const client = this.clientFactory(root, server);
222
+ const initStartedAt = this.now();
223
+ const initPromise = (async () => {
224
+ await client.start();
225
+ await client.initialize();
226
+ })();
227
+ const managed = {
228
+ client,
229
+ refCount: 0,
230
+ pendingWaiters: 0,
231
+ lastUsedAt: initStartedAt,
232
+ initPromise,
233
+ isInitializing: true,
234
+ initializingSince: initStartedAt,
235
+ };
236
+ this.clients.set(key, managed);
237
+ initPromise.then(() => {
238
+ managed.isInitializing = false;
239
+ managed.initializingSince = null;
240
+ managed.initPromise = null;
241
+ managed.lastUsedAt = this.now();
242
+ }, () => {
243
+ if (this.clients.get(key) === managed) {
244
+ this.clients.delete(key);
245
+ }
246
+ void stopClientBestEffort(client);
247
+ });
248
+ }
249
+ isServerInitializing(root, serverId) {
250
+ const managed = this.clients.get(this.getKey(root, serverId));
251
+ return managed?.isInitializing ?? false;
252
+ }
253
+ getSnapshot() {
254
+ const snapshots = [];
255
+ for (const [key, managed] of this.clients) {
256
+ const [root, serverId] = key.split("::");
257
+ snapshots.push({
258
+ root,
259
+ serverId,
260
+ refCount: managed.refCount,
261
+ pendingWaiters: managed.pendingWaiters,
262
+ lastUsedAt: managed.lastUsedAt,
263
+ isInitializing: managed.isInitializing,
264
+ alive: managed.client.isAlive(),
265
+ command: managed.client.command(),
266
+ });
267
+ }
268
+ return snapshots;
269
+ }
270
+ hasClient(root, serverId) {
271
+ return this.clients.has(this.getKey(root, serverId));
272
+ }
273
+ clientCount() {
274
+ return this.clients.size;
275
+ }
276
+ async stopAll() {
277
+ this.disposed = true;
278
+ if (this.reaperHandle) {
279
+ clearInterval(this.reaperHandle);
280
+ this.reaperHandle = null;
281
+ }
282
+ if (this.exitDisposer) {
283
+ this.exitDisposer();
284
+ this.exitDisposer = null;
285
+ }
286
+ const stopPromises = [];
287
+ for (const managed of this.clients.values()) {
288
+ stopPromises.push(stopClientBestEffort(managed.client));
289
+ }
290
+ this.clients.clear();
291
+ await Promise.allSettled(stopPromises);
292
+ }
293
+ }
294
+ let _defaultInstance = null;
295
+ export function getLspManager() {
296
+ if (!_defaultInstance) {
297
+ _defaultInstance = new LspManager();
298
+ }
299
+ return _defaultInstance;
300
+ }
301
+ export async function disposeDefaultLspManager() {
302
+ if (_defaultInstance) {
303
+ const m = _defaultInstance;
304
+ _defaultInstance = null;
305
+ await m.stopAll();
306
+ }
307
+ }
308
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/lsp/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface SpawnedProcess {
2
+ stdin: NodeJS.WritableStream;
3
+ stdout: NodeJS.ReadableStream;
4
+ stderr: NodeJS.ReadableStream;
5
+ pid: number | undefined;
6
+ exitCode: number | null;
7
+ exited: Promise<number>;
8
+ kill(signal?: NodeJS.Signals): void;
9
+ killed: boolean;
10
+ }
11
+ export interface SpawnOptions {
12
+ cwd: string;
13
+ env: Record<string, string | undefined>;
14
+ }
15
+ export interface PreparedSpawnCommand {
16
+ command: string;
17
+ args: string[];
18
+ shell: false;
19
+ }
20
+ export declare function validateCwd(cwd: string): {
21
+ valid: boolean;
22
+ error?: string;
23
+ };
24
+ export declare function createSpawnCommand(command: string[], platform?: NodeJS.Platform, commandProcessor?: string, env?: Record<string, string | undefined>): PreparedSpawnCommand;
25
+ export declare function spawnProcess(command: string[], options: SpawnOptions): SpawnedProcess;
26
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/lsp/process.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;CACb;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgB3E;AAwED,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,gBAAgB,GAAE,MAAyC,EAC3D,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACnD,oBAAoB,CAoBtB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc,CAqBrF"}
@@ -0,0 +1,124 @@
1
+ import { spawn } from "node:child_process";
2
+ import { existsSync, statSync } from "node:fs";
3
+ import { delimiter, join } from "node:path";
4
+ import { reportBestEffortCleanupError } from "./cleanup-errors.js";
5
+ import { LspInvalidPathError, LspProcessSpawnError } from "./errors.js";
6
+ export function validateCwd(cwd) {
7
+ try {
8
+ if (!existsSync(cwd)) {
9
+ return { valid: false, error: `Working directory does not exist: ${cwd}` };
10
+ }
11
+ const stats = statSync(cwd);
12
+ if (!stats.isDirectory()) {
13
+ return { valid: false, error: `Path is not a directory: ${cwd}` };
14
+ }
15
+ return { valid: true };
16
+ }
17
+ catch (err) {
18
+ return {
19
+ valid: false,
20
+ error: `Cannot access working directory: ${cwd} (${err instanceof Error ? err.message : String(err)})`,
21
+ };
22
+ }
23
+ }
24
+ function wrap(proc) {
25
+ const exitedPromise = new Promise((resolve) => {
26
+ proc.once("close", (code) => resolve(code ?? 0));
27
+ proc.once("error", () => resolve(1));
28
+ });
29
+ if (!proc.stdin || !proc.stdout || !proc.stderr) {
30
+ throw new LspProcessSpawnError("Spawned process is missing one of stdin/stdout/stderr pipes");
31
+ }
32
+ return {
33
+ stdin: proc.stdin,
34
+ stdout: proc.stdout,
35
+ stderr: proc.stderr,
36
+ get pid() {
37
+ return proc.pid ?? undefined;
38
+ },
39
+ get exitCode() {
40
+ return proc.exitCode;
41
+ },
42
+ get killed() {
43
+ return proc.killed;
44
+ },
45
+ exited: exitedPromise,
46
+ kill(signal) {
47
+ try {
48
+ proc.kill(signal ?? "SIGTERM");
49
+ }
50
+ catch (error) {
51
+ reportBestEffortCleanupError("process kill", error);
52
+ }
53
+ },
54
+ };
55
+ }
56
+ function isWindowsShellShim(command) {
57
+ const lowerCommand = command.toLowerCase();
58
+ return lowerCommand.endsWith(".cmd") || lowerCommand.endsWith(".bat");
59
+ }
60
+ function splitPath(pathValue, platform) {
61
+ const separator = platform === "win32" ? ";" : delimiter;
62
+ return pathValue.split(separator).filter(Boolean);
63
+ }
64
+ function getWindowsPathExtensions(env) {
65
+ const rawExtensions = env.PATHEXT ?? ".COM;.EXE;.BAT;.CMD";
66
+ const extensions = rawExtensions
67
+ .split(";")
68
+ .map((extension) => extension.trim())
69
+ .filter(Boolean)
70
+ .map((extension) => (extension.startsWith(".") ? extension : `.${extension}`));
71
+ return [...new Set(["", ...extensions, ".exe", ".cmd", ".bat"])];
72
+ }
73
+ function resolveWindowsCommand(command, env) {
74
+ const hasPathSeparator = command.includes("/") || command.includes("\\");
75
+ const pathValue = env.PATH ?? env.Path ?? "";
76
+ const baseDirectories = hasPathSeparator ? [""] : splitPath(pathValue, "win32");
77
+ const extensions = getWindowsPathExtensions(env);
78
+ for (const baseDirectory of baseDirectories) {
79
+ for (const extension of extensions) {
80
+ const candidate = baseDirectory ? join(baseDirectory, `${command}${extension}`) : `${command}${extension}`;
81
+ if (existsSync(candidate))
82
+ return candidate;
83
+ }
84
+ }
85
+ return command;
86
+ }
87
+ export function createSpawnCommand(command, platform = process.platform, commandProcessor = process.env.ComSpec ?? "cmd.exe", env = process.env) {
88
+ const [cmd, ...args] = command;
89
+ if (!cmd) {
90
+ throw new LspProcessSpawnError("[lsp] empty command");
91
+ }
92
+ if (platform !== "win32") {
93
+ return { command: cmd, args, shell: false };
94
+ }
95
+ const resolvedCommand = resolveWindowsCommand(cmd, env);
96
+ if (!isWindowsShellShim(resolvedCommand)) {
97
+ return { command: resolvedCommand, args, shell: false };
98
+ }
99
+ return {
100
+ command: commandProcessor,
101
+ args: ["/d", "/s", "/c", resolvedCommand, ...args],
102
+ shell: false,
103
+ };
104
+ }
105
+ export function spawnProcess(command, options) {
106
+ const cwdValidation = validateCwd(options.cwd);
107
+ if (!cwdValidation.valid) {
108
+ throw new LspInvalidPathError(`[lsp] ${cwdValidation.error}`);
109
+ }
110
+ const [cmd] = command;
111
+ if (!cmd) {
112
+ throw new LspProcessSpawnError("[lsp] empty command");
113
+ }
114
+ const preparedCommand = createSpawnCommand(command, process.platform, process.env.ComSpec ?? "cmd.exe", options.env);
115
+ const proc = spawn(preparedCommand.command, preparedCommand.args, {
116
+ cwd: options.cwd,
117
+ env: options.env,
118
+ stdio: ["pipe", "pipe", "pipe"],
119
+ windowsHide: true,
120
+ shell: preparedCommand.shell,
121
+ });
122
+ return wrap(proc);
123
+ }
124
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/lsp/process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { LspServerConfig } from "./types.js";
2
+ export declare const LSP_INSTALL_HINTS: Record<string, string>;
3
+ export declare const BUILTIN_SERVERS: Record<string, Omit<LspServerConfig, "id">>;
4
+ export declare const AUTO_INSTALLABLE_SERVERS: Record<string, string[]>;
5
+ //# sourceMappingURL=server-definitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-definitions.d.ts","sourceRoot":"","sources":["../../src/lsp/server-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2CpD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CA4FvE,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAqB7D,CAAC"}
@@ -0,0 +1,159 @@
1
+ export const LSP_INSTALL_HINTS = {
2
+ typescript: "npm install -g typescript-language-server typescript",
3
+ deno: "Install Deno from https://deno.land",
4
+ vue: "npm install -g @vue/language-server",
5
+ eslint: "npm install -g vscode-langservers-extracted",
6
+ oxlint: "npm install -g oxlint",
7
+ biome: "npm install -g @biomejs/biome",
8
+ gopls: "go install golang.org/x/tools/gopls@latest",
9
+ "ruby-lsp": "gem install ruby-lsp",
10
+ basedpyright: "pip install basedpyright",
11
+ pyright: "pip install pyright",
12
+ ty: "pip install ty",
13
+ ruff: "pip install ruff",
14
+ "elixir-ls": "See https://github.com/elixir-lsp/elixir-ls",
15
+ zls: "See https://github.com/zigtools/zls",
16
+ csharp: "dotnet tool install -g csharp-ls",
17
+ fsharp: "dotnet tool install -g fsautocomplete",
18
+ "sourcekit-lsp": "Included with Xcode or Swift toolchain",
19
+ rust: "Install rust-analyzer and ensure it is in PATH. If using rustup: rustup component add rust-analyzer. " +
20
+ "If rust-analyzer exits while loading rust-src: rustup component remove rust-src && rustup component add rust-src.",
21
+ clangd: "See https://clangd.llvm.org/installation",
22
+ svelte: "npm install -g svelte-language-server",
23
+ astro: "npm install -g @astrojs/language-server",
24
+ "bash-ls": "npm install -g bash-language-server",
25
+ jdtls: "See https://github.com/eclipse-jdtls/eclipse.jdt.ls",
26
+ "yaml-ls": "npm install -g yaml-language-server",
27
+ "lua-ls": "See https://github.com/LuaLS/lua-language-server",
28
+ php: "npm install -g intelephense",
29
+ dart: "Included with Dart SDK",
30
+ "terraform-ls": "See https://github.com/hashicorp/terraform-ls",
31
+ terraform: "See https://github.com/hashicorp/terraform-ls",
32
+ prisma: "npm install -g prisma",
33
+ "ocaml-lsp": "opam install ocaml-lsp-server",
34
+ texlab: "See https://github.com/latex-lsp/texlab",
35
+ dockerfile: "npm install -g dockerfile-language-server-nodejs",
36
+ gleam: "See https://gleam.run/getting-started/installing/",
37
+ "clojure-lsp": "See https://clojure-lsp.io/installation/",
38
+ nixd: "nix profile install nixpkgs#nixd",
39
+ tinymist: "See https://github.com/Myriad-Dreamin/tinymist",
40
+ "haskell-language-server": "ghcup install hls",
41
+ bash: "npm install -g bash-language-server",
42
+ "kotlin-ls": "See https://github.com/Kotlin/kotlin-lsp",
43
+ };
44
+ export const BUILTIN_SERVERS = {
45
+ typescript: {
46
+ command: ["typescript-language-server", "--stdio"],
47
+ extensions: [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mts", ".cts"],
48
+ },
49
+ deno: { command: ["deno", "lsp"], extensions: [".ts", ".tsx", ".js", ".jsx", ".mjs"] },
50
+ vue: { command: ["vue-language-server", "--stdio"], extensions: [".vue"] },
51
+ eslint: {
52
+ command: ["vscode-eslint-language-server", "--stdio"],
53
+ extensions: [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mts", ".cts", ".vue"],
54
+ },
55
+ oxlint: {
56
+ command: ["oxlint", "--lsp"],
57
+ extensions: [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mts", ".cts", ".vue", ".astro", ".svelte"],
58
+ },
59
+ biome: {
60
+ command: ["biome", "lsp-proxy", "--stdio"],
61
+ extensions: [
62
+ ".ts",
63
+ ".tsx",
64
+ ".js",
65
+ ".jsx",
66
+ ".mjs",
67
+ ".cjs",
68
+ ".mts",
69
+ ".cts",
70
+ ".json",
71
+ ".jsonc",
72
+ ".vue",
73
+ ".astro",
74
+ ".svelte",
75
+ ".css",
76
+ ".graphql",
77
+ ".gql",
78
+ ".html",
79
+ ],
80
+ },
81
+ gopls: { command: ["gopls"], extensions: [".go"] },
82
+ "ruby-lsp": {
83
+ command: ["rubocop", "--lsp"],
84
+ extensions: [".rb", ".rake", ".gemspec", ".ru"],
85
+ },
86
+ basedpyright: {
87
+ command: ["basedpyright-langserver", "--stdio"],
88
+ extensions: [".py", ".pyi"],
89
+ },
90
+ pyright: { command: ["pyright-langserver", "--stdio"], extensions: [".py", ".pyi"] },
91
+ ty: { command: ["ty", "server"], extensions: [".py", ".pyi"] },
92
+ ruff: { command: ["ruff", "server"], extensions: [".py", ".pyi"] },
93
+ "elixir-ls": { command: ["elixir-ls"], extensions: [".ex", ".exs"] },
94
+ zls: { command: ["zls"], extensions: [".zig", ".zon"] },
95
+ csharp: { command: ["csharp-ls"], extensions: [".cs"] },
96
+ fsharp: { command: ["fsautocomplete"], extensions: [".fs", ".fsi", ".fsx", ".fsscript"] },
97
+ "sourcekit-lsp": { command: ["sourcekit-lsp"], extensions: [".swift", ".objc", ".objcpp"] },
98
+ rust: { command: ["rust-analyzer"], extensions: [".rs"] },
99
+ clangd: {
100
+ command: ["clangd", "--background-index", "--clang-tidy"],
101
+ extensions: [".c", ".cpp", ".cc", ".cxx", ".c++", ".h", ".hpp", ".hh", ".hxx", ".h++"],
102
+ },
103
+ svelte: { command: ["svelteserver", "--stdio"], extensions: [".svelte"] },
104
+ astro: { command: ["astro-ls", "--stdio"], extensions: [".astro"] },
105
+ bash: {
106
+ command: ["bash-language-server", "start"],
107
+ extensions: [".sh", ".bash", ".zsh", ".ksh"],
108
+ },
109
+ "bash-ls": {
110
+ command: ["bash-language-server", "start"],
111
+ extensions: [".sh", ".bash", ".zsh", ".ksh"],
112
+ },
113
+ jdtls: { command: ["jdtls"], extensions: [".java"] },
114
+ "yaml-ls": { command: ["yaml-language-server", "--stdio"], extensions: [".yaml", ".yml"] },
115
+ "lua-ls": { command: ["lua-language-server"], extensions: [".lua"] },
116
+ php: { command: ["intelephense", "--stdio"], extensions: [".php"] },
117
+ dart: { command: ["dart", "language-server", "--lsp"], extensions: [".dart"] },
118
+ terraform: { command: ["terraform-ls", "serve"], extensions: [".tf", ".tfvars"] },
119
+ "terraform-ls": { command: ["terraform-ls", "serve"], extensions: [".tf", ".tfvars"] },
120
+ prisma: { command: ["prisma", "language-server"], extensions: [".prisma"] },
121
+ "ocaml-lsp": { command: ["ocamllsp"], extensions: [".ml", ".mli"] },
122
+ texlab: { command: ["texlab"], extensions: [".tex", ".bib"] },
123
+ dockerfile: { command: ["docker-langserver", "--stdio"], extensions: [".dockerfile"] },
124
+ gleam: { command: ["gleam", "lsp"], extensions: [".gleam"] },
125
+ "clojure-lsp": {
126
+ command: ["clojure-lsp", "listen"],
127
+ extensions: [".clj", ".cljs", ".cljc", ".edn"],
128
+ },
129
+ nixd: { command: ["nixd"], extensions: [".nix"] },
130
+ tinymist: { command: ["tinymist"], extensions: [".typ", ".typc"] },
131
+ "haskell-language-server": {
132
+ command: ["haskell-language-server-wrapper", "--lsp"],
133
+ extensions: [".hs", ".lhs"],
134
+ },
135
+ "kotlin-ls": { command: ["kotlin-lsp"], extensions: [".kt", ".kts"] },
136
+ };
137
+ export const AUTO_INSTALLABLE_SERVERS = {
138
+ typescript: ["npm", "install", "-g", "typescript-language-server", "typescript"],
139
+ vue: ["npm", "install", "-g", "@vue/language-server"],
140
+ eslint: ["npm", "install", "-g", "vscode-langservers-extracted"],
141
+ oxlint: ["npm", "install", "-g", "oxlint"],
142
+ biome: ["npm", "install", "-g", "@biomejs/biome"],
143
+ svelte: ["npm", "install", "-g", "svelte-language-server"],
144
+ astro: ["npm", "install", "-g", "@astrojs/language-server"],
145
+ "bash-ls": ["npm", "install", "-g", "bash-language-server"],
146
+ bash: ["npm", "install", "-g", "bash-language-server"],
147
+ "yaml-ls": ["npm", "install", "-g", "yaml-language-server"],
148
+ php: ["npm", "install", "-g", "intelephense"],
149
+ prisma: ["npm", "install", "-g", "prisma"],
150
+ dockerfile: ["npm", "install", "-g", "dockerfile-language-server-nodejs"],
151
+ gopls: ["go", "install", "golang.org/x/tools/gopls@latest"],
152
+ pyright: ["pip", "install", "pyright"],
153
+ basedpyright: ["pip", "install", "basedpyright"],
154
+ ruff: ["pip", "install", "ruff"],
155
+ ty: ["pip", "install", "ty"],
156
+ "ruby-lsp": ["gem", "install", "ruby-lsp"],
157
+ "ocaml-lsp": ["opam", "install", "ocaml-lsp-server"],
158
+ };
159
+ //# sourceMappingURL=server-definitions.js.map