gsd-pi 2.8.3 → 2.9.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.
- package/README.md +2 -1
- package/dist/cli.js +5 -0
- package/dist/loader.js +1 -1
- package/dist/update-check.d.ts +24 -0
- package/dist/update-check.js +93 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/client.d.ts +46 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/client.js +758 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/client.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/config.d.ts +23 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/config.js +267 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/config.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/edits.d.ts +17 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/edits.js +101 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/edits.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/helpers.d.ts +15 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/helpers.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/helpers.js +46 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/helpers.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/index.d.ts +35 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/index.js +709 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/index.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp-integration.test.d.ts +2 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp-integration.test.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +308 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lspmux.d.ts +34 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lspmux.js +136 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/types.d.ts +262 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/types.js +64 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/types.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/utils.d.ts +50 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/utils.js +574 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/utils.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/core/slash-commands.js +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/index.d.ts +13 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/index.js +4 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/index.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +10 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +2 -2
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -0
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/interactive-mode.js +46 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/client.ts +880 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/config.ts +325 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/defaults.json +456 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/edits.ts +109 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/helpers.ts +54 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/index.ts +943 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +407 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/lsp.md +33 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/lspmux.ts +199 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/types.ts +421 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/utils.ts +682 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/slash-commands.ts +1 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/tools/index.ts +10 -0
- package/node_modules/@gsd/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +2 -2
- package/node_modules/@gsd/pi-coding-agent/src/modes/interactive/interactive-mode.ts +59 -2
- package/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +46 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.js +758 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +23 -0
- package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/config.js +267 -0
- package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +17 -0
- package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/edits.js +101 -0
- package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/helpers.d.ts +15 -0
- package/packages/pi-coding-agent/dist/core/lsp/helpers.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/helpers.js +46 -0
- package/packages/pi-coding-agent/dist/core/lsp/helpers.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts +35 -0
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/index.js +709 -0
- package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +308 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +34 -0
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +136 -0
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.d.ts +262 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.js +64 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +50 -0
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/utils.js +574 -0
- package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
- package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts +13 -0
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.js +4 -0
- package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +10 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +46 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/src/core/lsp/client.ts +880 -0
- package/packages/pi-coding-agent/src/core/lsp/config.ts +325 -0
- package/packages/pi-coding-agent/src/core/lsp/defaults.json +456 -0
- package/packages/pi-coding-agent/src/core/lsp/edits.ts +109 -0
- package/packages/pi-coding-agent/src/core/lsp/helpers.ts +54 -0
- package/packages/pi-coding-agent/src/core/lsp/index.ts +943 -0
- package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +407 -0
- package/packages/pi-coding-agent/src/core/lsp/lsp.md +33 -0
- package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +199 -0
- package/packages/pi-coding-agent/src/core/lsp/types.ts +421 -0
- package/packages/pi-coding-agent/src/core/lsp/utils.ts +682 -0
- package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
- package/packages/pi-coding-agent/src/core/tools/index.ts +10 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +59 -2
- package/src/resources/extensions/ask-user-questions.ts +2 -2
- package/src/resources/extensions/bg-shell/index.ts +34 -37
- package/src/resources/extensions/browser-tools/core.d.ts +205 -0
- package/src/resources/extensions/browser-tools/index.ts +2 -2
- package/src/resources/extensions/browser-tools/refs.ts +1 -1
- package/src/resources/extensions/browser-tools/tools/session.ts +1 -1
- package/src/resources/extensions/context7/index.ts +2 -2
- package/src/resources/extensions/get-secrets-from-user.ts +3 -2
- package/src/resources/extensions/google-search/index.ts +1 -1
- package/src/resources/extensions/gsd/auto.ts +41 -4
- package/src/resources/extensions/gsd/commands.ts +218 -3
- package/src/resources/extensions/gsd/doctor.ts +1 -1
- package/src/resources/extensions/gsd/git-service.ts +116 -4
- package/src/resources/extensions/gsd/guided-flow.ts +19 -9
- package/src/resources/extensions/gsd/index.ts +17 -7
- package/src/resources/extensions/gsd/preferences.ts +1 -1
- package/src/resources/extensions/gsd/tests/git-service.test.ts +226 -0
- package/src/resources/extensions/gsd/tests/migrate-command.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +10 -10
- package/src/resources/extensions/gsd/tests/next-milestone-id.test.ts +87 -0
- package/src/resources/extensions/gsd/tests/worktree.test.ts +352 -0
- package/src/resources/extensions/gsd/types.ts +1 -0
- package/src/resources/extensions/gsd/worktree.ts +20 -1
- package/src/resources/extensions/mac-tools/index.ts +1 -1
- package/src/resources/extensions/search-the-web/format.ts +1 -1
- package/src/resources/extensions/search-the-web/index.ts +5 -5
- package/src/resources/extensions/search-the-web/tool-fetch-page.ts +7 -7
- package/src/resources/extensions/search-the-web/tool-llm-context.ts +11 -11
- package/src/resources/extensions/search-the-web/tool-search.ts +10 -10
- package/src/resources/extensions/shared/interview-ui.ts +2 -2
package/README.md
CHANGED
|
@@ -330,7 +330,7 @@ budget_ceiling: 50.00
|
|
|
330
330
|
|
|
331
331
|
### Bundled Tools
|
|
332
332
|
|
|
333
|
-
GSD ships with
|
|
333
|
+
GSD ships with 14 extensions, all loaded automatically:
|
|
334
334
|
|
|
335
335
|
| Extension | What it provides |
|
|
336
336
|
|-----------|-----------------|
|
|
@@ -345,6 +345,7 @@ GSD ships with 13 extensions, all loaded automatically:
|
|
|
345
345
|
| **MCPorter** | Lazy on-demand MCP server integration |
|
|
346
346
|
| **Voice** | Real-time speech-to-text transcription (macOS) |
|
|
347
347
|
| **Slash Commands** | Custom command creation |
|
|
348
|
+
| **LSP** | Language Server Protocol integration — diagnostics, go-to-definition, references, hover, symbols, rename, code actions |
|
|
348
349
|
| **Ask User Questions** | Structured user input with single/multi-select |
|
|
349
350
|
| **Secure Env Collect** | Masked secret collection without manual .env editing |
|
|
350
351
|
|
package/dist/cli.js
CHANGED
|
@@ -7,6 +7,7 @@ import { ensureManagedTools } from './tool-bootstrap.js';
|
|
|
7
7
|
import { loadStoredEnvKeys } from './wizard.js';
|
|
8
8
|
import { getPiDefaultModelAndProvider, migratePiCredentials } from './pi-migration.js';
|
|
9
9
|
import { shouldRunOnboarding, runOnboarding } from './onboarding.js';
|
|
10
|
+
import { checkForUpdates } from './update-check.js';
|
|
10
11
|
function parseCliArgs(argv) {
|
|
11
12
|
const flags = { extensions: [], messages: [] };
|
|
12
13
|
const args = argv.slice(2); // skip node + script
|
|
@@ -84,6 +85,10 @@ migratePiCredentials(authStorage);
|
|
|
84
85
|
if (!isPrintMode && shouldRunOnboarding(authStorage)) {
|
|
85
86
|
await runOnboarding(authStorage);
|
|
86
87
|
}
|
|
88
|
+
// Non-blocking update check — runs at most once per 24h, fire-and-forget
|
|
89
|
+
if (!isPrintMode) {
|
|
90
|
+
checkForUpdates().catch(() => { });
|
|
91
|
+
}
|
|
87
92
|
const modelRegistry = new ModelRegistry(authStorage);
|
|
88
93
|
const settingsManager = SettingsManager.create(agentDir);
|
|
89
94
|
// Validate configured model on startup — catches stale settings from prior installs
|
package/dist/loader.js
CHANGED
|
@@ -13,7 +13,7 @@ const pkgDir = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'pkg');
|
|
|
13
13
|
// MUST be set before any dynamic import of pi SDK fires — this is what config.js
|
|
14
14
|
// reads to determine APP_NAME and CONFIG_DIR_NAME
|
|
15
15
|
process.env.PI_PACKAGE_DIR = pkgDir;
|
|
16
|
-
process.env.PI_SKIP_VERSION_CHECK = '1'; // GSD
|
|
16
|
+
process.env.PI_SKIP_VERSION_CHECK = '1'; // GSD runs its own update check in cli.ts — suppress pi's
|
|
17
17
|
process.title = 'gsd';
|
|
18
18
|
// Print branded banner on first launch (before ~/.gsd/ exists)
|
|
19
19
|
if (!existsSync(appRoot)) {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface UpdateCheckCache {
|
|
2
|
+
lastCheck: number;
|
|
3
|
+
latestVersion: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Compares two semver strings. Returns 1 if a > b, -1 if a < b, 0 if equal.
|
|
7
|
+
*/
|
|
8
|
+
export declare function compareSemver(a: string, b: string): number;
|
|
9
|
+
export declare function readUpdateCache(cachePath?: string): UpdateCheckCache | null;
|
|
10
|
+
export declare function writeUpdateCache(cache: UpdateCheckCache, cachePath?: string): void;
|
|
11
|
+
export interface UpdateCheckOptions {
|
|
12
|
+
currentVersion?: string;
|
|
13
|
+
cachePath?: string;
|
|
14
|
+
registryUrl?: string;
|
|
15
|
+
checkIntervalMs?: number;
|
|
16
|
+
fetchTimeoutMs?: number;
|
|
17
|
+
onUpdate?: (current: string, latest: string) => void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Non-blocking update check. Queries npm registry at most once per 24h,
|
|
21
|
+
* caches the result, and prints a banner if a newer version is available.
|
|
22
|
+
*/
|
|
23
|
+
export declare function checkForUpdates(options?: UpdateCheckOptions): Promise<void>;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { appRoot } from './app-paths.js';
|
|
4
|
+
const CACHE_FILE = join(appRoot, '.update-check');
|
|
5
|
+
const NPM_PACKAGE_NAME = 'gsd-pi';
|
|
6
|
+
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
7
|
+
const FETCH_TIMEOUT_MS = 5000;
|
|
8
|
+
/**
|
|
9
|
+
* Compares two semver strings. Returns 1 if a > b, -1 if a < b, 0 if equal.
|
|
10
|
+
*/
|
|
11
|
+
export function compareSemver(a, b) {
|
|
12
|
+
const pa = a.split('.').map(Number);
|
|
13
|
+
const pb = b.split('.').map(Number);
|
|
14
|
+
for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
|
|
15
|
+
const va = pa[i] || 0;
|
|
16
|
+
const vb = pb[i] || 0;
|
|
17
|
+
if (va > vb)
|
|
18
|
+
return 1;
|
|
19
|
+
if (va < vb)
|
|
20
|
+
return -1;
|
|
21
|
+
}
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
export function readUpdateCache(cachePath = CACHE_FILE) {
|
|
25
|
+
try {
|
|
26
|
+
if (!existsSync(cachePath))
|
|
27
|
+
return null;
|
|
28
|
+
return JSON.parse(readFileSync(cachePath, 'utf-8'));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function writeUpdateCache(cache, cachePath = CACHE_FILE) {
|
|
35
|
+
try {
|
|
36
|
+
mkdirSync(dirname(cachePath), { recursive: true });
|
|
37
|
+
writeFileSync(cachePath, JSON.stringify(cache));
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Non-fatal — don't block startup if cache write fails
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function printUpdateBanner(current, latest) {
|
|
44
|
+
const yellow = '\x1b[33m';
|
|
45
|
+
const dim = '\x1b[2m';
|
|
46
|
+
const reset = '\x1b[0m';
|
|
47
|
+
const bold = '\x1b[1m';
|
|
48
|
+
process.stderr.write(` ${yellow}Update available:${reset} ${dim}v${current}${reset} → ${bold}v${latest}${reset}\n` +
|
|
49
|
+
` ${dim}Run${reset} npm update -g gsd-pi ${dim}or${reset} /gsd:update ${dim}to upgrade${reset}\n\n`);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Non-blocking update check. Queries npm registry at most once per 24h,
|
|
53
|
+
* caches the result, and prints a banner if a newer version is available.
|
|
54
|
+
*/
|
|
55
|
+
export async function checkForUpdates(options = {}) {
|
|
56
|
+
const currentVersion = options.currentVersion || process.env.GSD_VERSION || '0.0.0';
|
|
57
|
+
const cachePath = options.cachePath || CACHE_FILE;
|
|
58
|
+
const registryUrl = options.registryUrl || `https://registry.npmjs.org/${NPM_PACKAGE_NAME}/latest`;
|
|
59
|
+
const checkIntervalMs = options.checkIntervalMs ?? CHECK_INTERVAL_MS;
|
|
60
|
+
const fetchTimeoutMs = options.fetchTimeoutMs ?? FETCH_TIMEOUT_MS;
|
|
61
|
+
const onUpdate = options.onUpdate || printUpdateBanner;
|
|
62
|
+
// Check cache — skip network if checked recently
|
|
63
|
+
const cache = readUpdateCache(cachePath);
|
|
64
|
+
if (cache && Date.now() - cache.lastCheck < checkIntervalMs) {
|
|
65
|
+
if (compareSemver(cache.latestVersion, currentVersion) > 0) {
|
|
66
|
+
onUpdate(currentVersion, cache.latestVersion);
|
|
67
|
+
}
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// Fetch latest version from npm registry
|
|
71
|
+
const controller = new AbortController();
|
|
72
|
+
const timeout = setTimeout(() => controller.abort(), fetchTimeoutMs);
|
|
73
|
+
try {
|
|
74
|
+
const res = await fetch(registryUrl, { signal: controller.signal });
|
|
75
|
+
clearTimeout(timeout);
|
|
76
|
+
if (!res.ok)
|
|
77
|
+
return;
|
|
78
|
+
const data = (await res.json());
|
|
79
|
+
const latestVersion = data.version;
|
|
80
|
+
if (!latestVersion)
|
|
81
|
+
return;
|
|
82
|
+
writeUpdateCache({ lastCheck: Date.now(), latestVersion }, cachePath);
|
|
83
|
+
if (compareSemver(latestVersion, currentVersion) > 0) {
|
|
84
|
+
onUpdate(currentVersion, latestVersion);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Network error or timeout — silently ignore, don't block startup
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
clearTimeout(timeout);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { LspClient, ServerConfig } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Configure the idle timeout for LSP clients.
|
|
4
|
+
*/
|
|
5
|
+
export declare function setIdleTimeout(ms: number | null | undefined): void;
|
|
6
|
+
/** Timeout for warmup initialize requests (5 seconds) */
|
|
7
|
+
export declare const WARMUP_TIMEOUT_MS = 5000;
|
|
8
|
+
/**
|
|
9
|
+
* Get or create an LSP client for the given server configuration and working directory.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getOrCreateClient(config: ServerConfig, cwd: string, initTimeoutMs?: number): Promise<LspClient>;
|
|
12
|
+
/**
|
|
13
|
+
* Ensure a file is opened in the LSP client.
|
|
14
|
+
*/
|
|
15
|
+
export declare function ensureFileOpen(client: LspClient, filePath: string, signal?: AbortSignal): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Sync in-memory content to the LSP client without reading from disk.
|
|
18
|
+
*/
|
|
19
|
+
export declare function syncContent(client: LspClient, filePath: string, content: string, signal?: AbortSignal): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Notify LSP that a file was saved.
|
|
22
|
+
*/
|
|
23
|
+
export declare function notifySaved(client: LspClient, filePath: string, signal?: AbortSignal): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Refresh a file in the LSP client.
|
|
26
|
+
*/
|
|
27
|
+
export declare function refreshFile(client: LspClient, filePath: string, signal?: AbortSignal): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Shutdown a specific client by key.
|
|
30
|
+
*/
|
|
31
|
+
export declare function shutdownClient(key: string): void;
|
|
32
|
+
export declare function sendRequest(client: LspClient, method: string, params: unknown, signal?: AbortSignal, timeoutMs?: number): Promise<unknown>;
|
|
33
|
+
export declare function sendNotification(client: LspClient, method: string, params: unknown): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Shutdown all LSP clients.
|
|
36
|
+
*/
|
|
37
|
+
export declare function shutdownAll(): void;
|
|
38
|
+
/** Status of an LSP server */
|
|
39
|
+
export interface LspServerStatus {
|
|
40
|
+
name: string;
|
|
41
|
+
status: "connecting" | "ready" | "error";
|
|
42
|
+
fileTypes: string[];
|
|
43
|
+
error?: string;
|
|
44
|
+
}
|
|
45
|
+
export declare function getActiveClients(): LspServerStatus[];
|
|
46
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/client.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEX,SAAS,EAIT,YAAY,EAEZ,MAAM,YAAY,CAAC;AAgBpB;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAQlE;AA8VD,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAyHrH;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD7G;AAED;;GAEG;AACH,wBAAsB,WAAW,CAChC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1G;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkD1G;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAiBhD;AAQD,wBAAsB,WAAW,CAChC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,EACf,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,GAAE,MAAmC,GAC5C,OAAO,CAAC,OAAO,CAAC,CAuElB;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CASxG;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAuBlC;AAED,8BAA8B;AAC9B,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,IAAI,eAAe,EAAE,CAMpD"}
|