@vybestack/llxprt-code-ide-integration 0.10.0-nightly.260613.1adad3b34

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 (41) hide show
  1. package/dist/.last_build +0 -0
  2. package/dist/index.d.ts +6 -0
  3. package/dist/index.js +7 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/src/ide/constants.d.ts +6 -0
  6. package/dist/src/ide/constants.js +7 -0
  7. package/dist/src/ide/constants.js.map +1 -0
  8. package/dist/src/ide/detect-ide.d.ts +64 -0
  9. package/dist/src/ide/detect-ide.js +78 -0
  10. package/dist/src/ide/detect-ide.js.map +1 -0
  11. package/dist/src/ide/ide-client.d.ts +77 -0
  12. package/dist/src/ide/ide-client.js +440 -0
  13. package/dist/src/ide/ide-client.js.map +1 -0
  14. package/dist/src/ide/ide-installer.d.ts +14 -0
  15. package/dist/src/ide/ide-installer.js +116 -0
  16. package/dist/src/ide/ide-installer.js.map +1 -0
  17. package/dist/src/ide/ideContext.d.ts +415 -0
  18. package/dist/src/ide/ideContext.js +162 -0
  19. package/dist/src/ide/ideContext.js.map +1 -0
  20. package/dist/src/ide/index.d.ts +11 -0
  21. package/dist/src/ide/index.js +12 -0
  22. package/dist/src/ide/index.js.map +1 -0
  23. package/dist/src/ide/process-utils.d.ts +21 -0
  24. package/dist/src/ide/process-utils.js +198 -0
  25. package/dist/src/ide/process-utils.js.map +1 -0
  26. package/dist/src/index.d.ts +8 -0
  27. package/dist/src/index.js +9 -0
  28. package/dist/src/index.js.map +1 -0
  29. package/dist/src/lsp/index.d.ts +7 -0
  30. package/dist/src/lsp/index.js +7 -0
  31. package/dist/src/lsp/index.js.map +1 -0
  32. package/dist/src/lsp/lsp-service-client.d.ts +37 -0
  33. package/dist/src/lsp/lsp-service-client.js +415 -0
  34. package/dist/src/lsp/lsp-service-client.js.map +1 -0
  35. package/dist/src/lsp/types.d.ts +45 -0
  36. package/dist/src/lsp/types.js +3 -0
  37. package/dist/src/lsp/types.js.map +1 -0
  38. package/dist/src/utils/paths.d.ts +13 -0
  39. package/dist/src/utils/paths.js +24 -0
  40. package/dist/src/utils/paths.js.map +1 -0
  41. package/package.json +46 -0
@@ -0,0 +1,415 @@
1
+ /* @plan:PLAN-20250212-LSP.P30 */
2
+ /* @requirement:REQ-ARCH-060, REQ-GRACE-020, REQ-GRACE-040 */
3
+ /* pseudocode: project-plans/issue438/pseudocode/P30-lsp-service-client-functional.md */
4
+ /* eslint-disable complexity, sonarjs/cognitive-complexity -- Phase 5: legacy core boundary retained while larger decomposition continues. */
5
+ import { spawn } from 'node:child_process';
6
+ import { once } from 'node:events';
7
+ import { constants as fsConstants } from 'node:fs';
8
+ import { access } from 'node:fs/promises';
9
+ import { createRequire } from 'node:module';
10
+ import { basename, dirname, join } from 'node:path';
11
+ import { fileURLToPath } from 'node:url';
12
+ import { createMessageConnection, StreamMessageReader, StreamMessageWriter, } from 'vscode-jsonrpc/node.js';
13
+ const READY_TIMEOUT_MS = 10_000;
14
+ const SHUTDOWN_TIMEOUT_MS = 3_000;
15
+ const SIGKILL_GRACE_MS = 2_000;
16
+ export function normalizeServerStatus(raw) {
17
+ const obj = raw;
18
+ const serverId = String(obj.serverId ?? '');
19
+ const state = typeof obj.state === 'string' ? obj.state : undefined;
20
+ const status = typeof obj.status === 'string' ? obj.status : undefined;
21
+ const healthy =
22
+ // eslint-disable-next-line sonarjs/expression-complexity -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
23
+ state === 'ok'
24
+ ? true
25
+ : // eslint-disable-next-line sonarjs/no-nested-conditional -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
26
+ state === 'broken' || state === 'starting'
27
+ ? false
28
+ : // eslint-disable-next-line sonarjs/no-nested-conditional -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
29
+ typeof obj.healthy === 'boolean'
30
+ ? obj.healthy
31
+ : false;
32
+ return {
33
+ serverId,
34
+ healthy,
35
+ detail: typeof obj.detail === 'string' ? obj.detail : (state ?? status),
36
+ state: state,
37
+ status,
38
+ };
39
+ }
40
+ export class LspServiceClient {
41
+ config;
42
+ workspaceRoot;
43
+ alive = false;
44
+ disabledPermanently = false;
45
+ unavailableReason;
46
+ process = null;
47
+ connection = null;
48
+ constructor(config, workspaceRoot) {
49
+ this.config = config;
50
+ this.workspaceRoot = workspaceRoot;
51
+ }
52
+ async start() {
53
+ if (this.alive || this.disabledPermanently) {
54
+ return;
55
+ }
56
+ if (!(await this.validateFirstServerCommand())) {
57
+ return;
58
+ }
59
+ const bunPath = await this.resolveBunPath();
60
+ if (bunPath === null) {
61
+ this.disable('Bun not found in PATH');
62
+ return;
63
+ }
64
+ const lspEntry = await this.resolveLspEntry();
65
+ if (lspEntry === null) {
66
+ this.disable('LSP service entry not found. Install @vybestack/llxprt-code-lsp: npm install -g @vybestack/llxprt-code-lsp');
67
+ return;
68
+ }
69
+ const { child, connection } = this.launchLspProcess(bunPath, lspEntry);
70
+ connection.listen();
71
+ try {
72
+ await this.waitForReady(connection, child);
73
+ this.alive = true;
74
+ this.unavailableReason = undefined;
75
+ }
76
+ catch (error) {
77
+ this.disable(error instanceof Error ? error.message : 'LSP service startup failed');
78
+ await this.shutdown();
79
+ }
80
+ }
81
+ async checkFile(filePath, signal) {
82
+ if (!this.alive || this.connection === null) {
83
+ return [];
84
+ }
85
+ if (signal?.aborted === true) {
86
+ return [];
87
+ }
88
+ try {
89
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
90
+ const request = this.connection.sendRequest('lsp/checkFile', {
91
+ filePath,
92
+ });
93
+ if (signal === undefined) {
94
+ return await request;
95
+ }
96
+ return await this.withAbortGuard(request, signal, []);
97
+ }
98
+ catch {
99
+ return [];
100
+ }
101
+ }
102
+ async getAllDiagnostics() {
103
+ if (!this.alive || this.connection === null) {
104
+ return {};
105
+ }
106
+ try {
107
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
108
+ return (await this.connection.sendRequest('lsp/diagnostics'));
109
+ }
110
+ catch {
111
+ return {};
112
+ }
113
+ }
114
+ async status() {
115
+ if (!this.alive || this.connection === null) {
116
+ if (this.config.servers.length === 0) {
117
+ return [];
118
+ }
119
+ return this.config.servers.map((server) => ({
120
+ serverId: server.id,
121
+ healthy: false,
122
+ detail: this.unavailableReason ?? 'LSP service unavailable',
123
+ }));
124
+ }
125
+ try {
126
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
127
+ const rawStatuses = (await this.connection.sendRequest('lsp/status'));
128
+ return rawStatuses.map(normalizeServerStatus);
129
+ }
130
+ catch {
131
+ return [];
132
+ }
133
+ }
134
+ isAlive() {
135
+ return this.alive;
136
+ }
137
+ getUnavailableReason() {
138
+ if (this.alive) {
139
+ return undefined;
140
+ }
141
+ return this.unavailableReason;
142
+ }
143
+ async shutdown() {
144
+ const child = this.process;
145
+ const connection = this.connection;
146
+ if (child === null || connection === null) {
147
+ this.cleanupProcessState();
148
+ this.alive = false;
149
+ return;
150
+ }
151
+ try {
152
+ await this.withTimeout(connection.sendRequest('lsp/shutdown'), SHUTDOWN_TIMEOUT_MS, 'LSP shutdown request timed out');
153
+ }
154
+ catch {
155
+ // best-effort shutdown
156
+ }
157
+ try {
158
+ let exited = false;
159
+ const onExit = once(child, 'exit').then(() => {
160
+ exited = true;
161
+ });
162
+ if (!child.killed) {
163
+ child.kill('SIGTERM');
164
+ }
165
+ await Promise.race([
166
+ onExit,
167
+ new Promise((resolve) => {
168
+ setTimeout(() => {
169
+ if (!exited) {
170
+ try {
171
+ child.kill('SIGKILL');
172
+ }
173
+ catch {
174
+ // already dead
175
+ }
176
+ }
177
+ resolve();
178
+ }, SIGKILL_GRACE_MS);
179
+ }),
180
+ ]);
181
+ }
182
+ catch {
183
+ // best-effort process termination
184
+ }
185
+ connection.dispose();
186
+ this.cleanupProcessState();
187
+ this.alive = false;
188
+ }
189
+ getMcpTransportStreams() {
190
+ if (!this.alive || this.process === null) {
191
+ return null;
192
+ }
193
+ const readable = this.process.stdio[3];
194
+ const writable = this.process.stdio[4];
195
+ if (readable === null || writable === null) {
196
+ return null;
197
+ }
198
+ return {
199
+ readable: readable,
200
+ writable: writable,
201
+ };
202
+ }
203
+ async validateFirstServerCommand() {
204
+ if (this.config.servers.length > 0) {
205
+ const firstServerCommand = this.config.servers[0]?.command;
206
+ if (typeof firstServerCommand === 'string' &&
207
+ firstServerCommand.length > 0 &&
208
+ firstServerCommand.startsWith('/')) {
209
+ const executable = await this.pathIsExecutable(firstServerCommand);
210
+ if (!executable) {
211
+ this.disable(`Server command not executable: ${firstServerCommand}`);
212
+ return false;
213
+ }
214
+ }
215
+ }
216
+ return true;
217
+ }
218
+ async resolveLspEntry() {
219
+ let lspEntry = null;
220
+ // Walks up from a resolved package path to find package.json, then probes
221
+ // src/main.ts (source tree) and dist/main.js (npm-published).
222
+ const resolveEntryFromPackagePath = async (packagePath) => {
223
+ let pkgRoot = dirname(packagePath);
224
+ while (pkgRoot !== dirname(pkgRoot)) {
225
+ if (await this.pathIsReadable(join(pkgRoot, 'package.json'))) {
226
+ break;
227
+ }
228
+ pkgRoot = dirname(pkgRoot);
229
+ }
230
+ const srcEntry = join(pkgRoot, 'src', 'main.ts');
231
+ if (await this.pathIsReadable(srcEntry))
232
+ return srcEntry;
233
+ const distEntry = join(pkgRoot, 'dist', 'main.js');
234
+ return (await this.pathIsReadable(distEntry)) ? distEntry : null;
235
+ };
236
+ const resolveImportMeta = import.meta.resolve;
237
+ if (typeof resolveImportMeta === 'function') {
238
+ try {
239
+ const packageUrl = resolveImportMeta('@vybestack/llxprt-code-lsp');
240
+ lspEntry = await resolveEntryFromPackagePath(fileURLToPath(packageUrl));
241
+ }
242
+ catch (error) {
243
+ const err = error;
244
+ if (err.code !== 'MODULE_NOT_FOUND' &&
245
+ err.code !== 'ERR_MODULE_NOT_FOUND') {
246
+ throw error;
247
+ }
248
+ }
249
+ }
250
+ // Fallback for Node <20.6 where import.meta.resolve is unavailable
251
+ lspEntry ??= await this.resolveLspEntryViaCreateRequire(resolveEntryFromPackagePath);
252
+ // Source-tree monorepo fallback (walks up to find packages/ directory)
253
+ lspEntry ??= await this.resolveLspEntryMonorepoFallback();
254
+ return lspEntry;
255
+ }
256
+ async resolveLspEntryViaCreateRequire(resolveEntryFromPackagePath) {
257
+ try {
258
+ const require = createRequire(import.meta.url);
259
+ const packagePath = require.resolve('@vybestack/llxprt-code-lsp');
260
+ return await resolveEntryFromPackagePath(packagePath);
261
+ }
262
+ catch (error) {
263
+ const err = error;
264
+ if (err.code !== 'MODULE_NOT_FOUND' &&
265
+ err.code !== 'ERR_MODULE_NOT_FOUND') {
266
+ throw error;
267
+ }
268
+ }
269
+ return null;
270
+ }
271
+ async resolveLspEntryMonorepoFallback() {
272
+ let dir = dirname(fileURLToPath(import.meta.url));
273
+ let foundPackagesDir = false;
274
+ while (dir !== dirname(dir)) {
275
+ if (basename(dir) === 'packages') {
276
+ foundPackagesDir = true;
277
+ break;
278
+ }
279
+ dir = dirname(dir);
280
+ }
281
+ if (foundPackagesDir) {
282
+ const fallbackEntry = join(dir, 'lsp', 'src', 'main.ts');
283
+ if (await this.pathIsReadable(fallbackEntry)) {
284
+ return fallbackEntry;
285
+ }
286
+ }
287
+ return null;
288
+ }
289
+ launchLspProcess(bunPath, lspEntry) {
290
+ const child = spawn(bunPath, [lspEntry], {
291
+ cwd: this.workspaceRoot,
292
+ stdio: ['pipe', 'pipe', 'pipe', 'pipe', 'pipe'],
293
+ env: {
294
+ ...process.env,
295
+ LSP_BOOTSTRAP: JSON.stringify({
296
+ workspaceRoot: this.workspaceRoot,
297
+ config: {
298
+ servers: this.config.servers,
299
+ diagnosticsTimeoutMs: this.config.diagnosticTimeout,
300
+ firstTouchTimeoutMs: this.config.firstTouchTimeout,
301
+ navigationTimeoutMs: this.config.navigationTimeout,
302
+ navigationTools: this.config.navigationTools,
303
+ requestTimeoutMs: this.config.requestTimeout,
304
+ },
305
+ }),
306
+ },
307
+ });
308
+ this.process = child;
309
+ const connection = createMessageConnection(new StreamMessageReader(child.stdout), new StreamMessageWriter(child.stdin));
310
+ this.connection = connection;
311
+ child.once('error', (error) => {
312
+ this.alive = false;
313
+ this.unavailableReason = error.message;
314
+ this.cleanupProcessState();
315
+ });
316
+ child.once('exit', (code, signal) => {
317
+ this.alive = false;
318
+ this.unavailableReason ??= `LSP service exited (code=${code ?? 'null'}, signal=${signal ?? 'null'})`;
319
+ this.cleanupProcessState();
320
+ });
321
+ return { child, connection };
322
+ }
323
+ async resolveBunPath() {
324
+ const locator = process.platform === 'win32' ? 'where' : 'which';
325
+ const which = spawn(locator, ['bun'], {
326
+ stdio: ['ignore', 'pipe', 'ignore'],
327
+ });
328
+ const chunks = [];
329
+ which.stdout.on('data', (chunk) => {
330
+ chunks.push(chunk);
331
+ });
332
+ let code;
333
+ try {
334
+ [code] = (await once(which, 'exit'));
335
+ }
336
+ catch {
337
+ return null;
338
+ }
339
+ if (code !== 0) {
340
+ return null;
341
+ }
342
+ const path = Buffer.concat(chunks).toString('utf8').trim();
343
+ return path.length > 0 ? path : null;
344
+ }
345
+ async pathIsExecutable(targetPath) {
346
+ try {
347
+ await access(targetPath, fsConstants.X_OK);
348
+ return true;
349
+ }
350
+ catch {
351
+ return false;
352
+ }
353
+ }
354
+ async pathIsReadable(targetPath) {
355
+ try {
356
+ await access(targetPath, fsConstants.R_OK);
357
+ return true;
358
+ }
359
+ catch {
360
+ return false;
361
+ }
362
+ }
363
+ waitForReady(connection, child) {
364
+ return this.withTimeout(new Promise((resolve, reject) => {
365
+ const disposer = connection.onNotification('lsp/ready', () => {
366
+ disposer.dispose();
367
+ resolve();
368
+ });
369
+ child.once('exit', () => {
370
+ disposer.dispose();
371
+ reject(new Error('LSP service exited before ready'));
372
+ });
373
+ child.once('error', (error) => {
374
+ disposer.dispose();
375
+ reject(error);
376
+ });
377
+ }), READY_TIMEOUT_MS, 'Timed out waiting for lsp/ready');
378
+ }
379
+ async withAbortGuard(promise, signal, fallback) {
380
+ if (signal.aborted) {
381
+ return fallback;
382
+ }
383
+ return Promise.race([
384
+ promise,
385
+ new Promise((resolve) => {
386
+ signal.addEventListener('abort', () => {
387
+ resolve(fallback);
388
+ }, { once: true });
389
+ }),
390
+ ]);
391
+ }
392
+ async withTimeout(promise, timeoutMs, message) {
393
+ return Promise.race([
394
+ promise,
395
+ new Promise((_, reject) => {
396
+ setTimeout(() => {
397
+ reject(new Error(message));
398
+ }, timeoutMs);
399
+ }),
400
+ ]);
401
+ }
402
+ disable(reason) {
403
+ this.disabledPermanently = true;
404
+ this.alive = false;
405
+ this.unavailableReason = reason;
406
+ }
407
+ cleanupProcessState() {
408
+ if (this.connection !== null) {
409
+ this.connection.dispose();
410
+ }
411
+ this.connection = null;
412
+ this.process = null;
413
+ }
414
+ }
415
+ //# sourceMappingURL=lsp-service-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-service-client.js","sourceRoot":"","sources":["../../../src/lsp/lsp-service-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export type LspServerId = string;
2
+ export interface LspServerConfig {
3
+ id: LspServerId;
4
+ command: string;
5
+ args?: string[];
6
+ rootUri?: string;
7
+ }
8
+ export interface LspRequestEnvelope {
9
+ serverId: LspServerId;
10
+ method: string;
11
+ params?: unknown;
12
+ }
13
+ export interface LspResponseEnvelope {
14
+ result?: unknown;
15
+ error?: {
16
+ code: number;
17
+ message: string;
18
+ };
19
+ }
20
+ export interface LspConfig {
21
+ servers: LspServerConfig[];
22
+ includeSeverities?: Array<'error' | 'warning' | 'info' | 'hint'>;
23
+ maxDiagnosticsPerFile?: number;
24
+ maxProjectDiagnosticsFiles?: number;
25
+ diagnosticTimeout?: number;
26
+ firstTouchTimeout?: number;
27
+ navigationTimeout?: number;
28
+ navigationTools?: boolean;
29
+ requestTimeout?: number;
30
+ }
31
+ export interface Diagnostic {
32
+ message: string;
33
+ severity: 'error' | 'warning' | 'info' | 'hint';
34
+ source?: string;
35
+ code?: string | number;
36
+ line?: number;
37
+ column?: number;
38
+ }
39
+ export interface ServerStatus {
40
+ serverId: LspServerId;
41
+ healthy: boolean;
42
+ detail?: string;
43
+ state?: 'ok' | 'broken' | 'starting' | 'idle';
44
+ status?: string;
45
+ }
@@ -0,0 +1,3 @@
1
+ /* @plan PLAN-20250212-LSP.P03 */
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lsp/types.ts"],"names":[],"mappings":"AAAA,iCAAiC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Determines whether `childPath` is contained within `parentPath`.
8
+ *
9
+ * Copied (pure, dependency-free) from
10
+ * `@vybestack/llxprt-code-core` `utils/paths.ts` so that the
11
+ * `ide-integration` package has no dependency on `core`.
12
+ */
13
+ export declare function isSubpath(parentPath: string, childPath: string): boolean;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import path from 'node:path';
7
+ import os from 'node:os';
8
+ /**
9
+ * Determines whether `childPath` is contained within `parentPath`.
10
+ *
11
+ * Copied (pure, dependency-free) from
12
+ * `@vybestack/llxprt-code-core` `utils/paths.ts` so that the
13
+ * `ide-integration` package has no dependency on `core`.
14
+ */
15
+ export function isSubpath(parentPath, childPath) {
16
+ const isWindows = os.platform() === 'win32';
17
+ const pathModule = isWindows ? path.win32 : path;
18
+ // On Windows, path.relative is case-insensitive. On POSIX, it's case-sensitive.
19
+ const relative = pathModule.relative(parentPath, childPath);
20
+ return (!relative.startsWith(`..${pathModule.sep}`) &&
21
+ relative !== '..' &&
22
+ !pathModule.isAbsolute(relative));
23
+ }
24
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,UAAkB,EAAE,SAAiB;IAC7D,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC;IAC5C,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAEjD,gFAAgF;IAChF,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE5D,OAAO,CACL,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,UAAU,CAAC,GAAG,EAAE,CAAC;QAC3C,QAAQ,KAAK,IAAI;QACjB,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CACjC,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@vybestack/llxprt-code-ide-integration",
3
+ "version": "0.10.0-nightly.260613.1adad3b34",
4
+ "description": "LLxprt Code IDE Integration — IDE detection, IDE companion client, and LSP service client",
5
+ "license": "Apache-2.0",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/vybestack/llxprt-code.git"
9
+ },
10
+ "type": "module",
11
+ "main": "dist/index.js",
12
+ "types": "dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js"
17
+ }
18
+ },
19
+ "scripts": {
20
+ "build": "node ../../scripts/build_package.js",
21
+ "lint": "eslint . --ext .ts,.tsx",
22
+ "format": "prettier --write .",
23
+ "test": "vitest run",
24
+ "test:ci": "vitest run",
25
+ "typecheck": "tsc --noEmit"
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "dependencies": {
31
+ "@modelcontextprotocol/sdk": "^1.25.2",
32
+ "@vybestack/llxprt-code-telemetry": "0.10.0-nightly.260613.1adad3b34",
33
+ "undici": "^7.18.2",
34
+ "vscode-jsonrpc": "^8.2.1",
35
+ "zod": "^3.25.76"
36
+ },
37
+ "devDependencies": {
38
+ "@types/node": "^24.2.1",
39
+ "fast-check": "^4.2.0",
40
+ "typescript": "^5.3.3",
41
+ "vitest": "^3.2.4"
42
+ },
43
+ "engines": {
44
+ "node": ">=20"
45
+ }
46
+ }