@aria-cli/tools 1.0.12 → 1.0.14
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/dist/index.js +378 -70
- package/dist/network-runtime/index.js +8 -12
- package/dist-cjs/index.js +400 -435
- package/dist-cjs/network-runtime/index.js +8 -172
- package/package.json +8 -6
- package/dist/.tsbuildinfo +0 -1
- package/dist/ask-user-interaction.js +0 -22
- package/dist/cache/web-cache.js +0 -66
- package/dist/definitions/arion.js +0 -104
- package/dist/definitions/browser/browser.js +0 -418
- package/dist/definitions/browser/index.js +0 -4
- package/dist/definitions/browser/pw-downloads.js +0 -114
- package/dist/definitions/browser/pw-interactions.js +0 -199
- package/dist/definitions/browser/pw-responses.js +0 -76
- package/dist/definitions/browser/pw-session.js +0 -310
- package/dist/definitions/browser/pw-shared.js +0 -66
- package/dist/definitions/browser/pw-snapshot.js +0 -301
- package/dist/definitions/browser/pw-state.js +0 -62
- package/dist/definitions/browser/types.js +0 -4
- package/dist/definitions/code-intelligence.js +0 -470
- package/dist/definitions/core.js +0 -109
- package/dist/definitions/delegation.js +0 -512
- package/dist/definitions/deploy.js +0 -65
- package/dist/definitions/filesystem.js +0 -196
- package/dist/definitions/frg.js +0 -63
- package/dist/definitions/index.js +0 -20
- package/dist/definitions/memory.js +0 -123
- package/dist/definitions/messaging.js +0 -625
- package/dist/definitions/meta.js +0 -349
- package/dist/definitions/network.js +0 -159
- package/dist/definitions/outlook.js +0 -277
- package/dist/definitions/patch/apply-patch.js +0 -184
- package/dist/definitions/patch/fuzzy-match.js +0 -166
- package/dist/definitions/patch/index.js +0 -1
- package/dist/definitions/patch/patch-parser.js +0 -207
- package/dist/definitions/patch/sandbox-paths.js +0 -105
- package/dist/definitions/process/index.js +0 -4
- package/dist/definitions/process/process-registry.js +0 -213
- package/dist/definitions/process/process.js +0 -386
- package/dist/definitions/process/pty-keys.js +0 -254
- package/dist/definitions/process/session-slug.js +0 -142
- package/dist/definitions/quip.js +0 -195
- package/dist/definitions/search.js +0 -60
- package/dist/definitions/session-history.js +0 -69
- package/dist/definitions/shell.js +0 -181
- package/dist/definitions/slack.js +0 -180
- package/dist/definitions/web.js +0 -109
- package/dist/executors/apply-patch.js +0 -901
- package/dist/executors/arion.js +0 -119
- package/dist/executors/code-intelligence.js +0 -882
- package/dist/executors/deploy.js +0 -848
- package/dist/executors/filesystem.js +0 -1122
- package/dist/executors/frg-freshness.js +0 -576
- package/dist/executors/frg.js +0 -298
- package/dist/executors/index.js +0 -46
- package/dist/executors/learning-meta.js +0 -1146
- package/dist/executors/lsp-client.js +0 -296
- package/dist/executors/memory.js +0 -750
- package/dist/executors/meta.js +0 -220
- package/dist/executors/process-registry.js +0 -465
- package/dist/executors/pty-session-store.js +0 -30
- package/dist/executors/pty.js +0 -271
- package/dist/executors/restart.js +0 -119
- package/dist/executors/search-freshness.js +0 -195
- package/dist/executors/search-types.js +0 -52
- package/dist/executors/search.js +0 -66
- package/dist/executors/self-diagnose.js +0 -398
- package/dist/executors/session-history.js +0 -283
- package/dist/executors/shell-safety.js +0 -473
- package/dist/executors/shell.js +0 -954
- package/dist/executors/utils.js +0 -33
- package/dist/executors/web.js +0 -542
- package/dist/extraction/content-extraction.js +0 -235
- package/dist/extraction/index.js +0 -4
- package/dist/headless-control-contract.js +0 -967
- package/dist/local-control-http-auth.js +0 -2
- package/dist/mcp/client.js +0 -181
- package/dist/mcp/connection.js +0 -480
- package/dist/mcp/index.js +0 -10
- package/dist/mcp/jsonrpc.js +0 -144
- package/dist/mcp/types.js +0 -7
- package/dist/network-control-adapter.js +0 -72
- package/dist/network-runtime/address-types.js +0 -165
- package/dist/network-runtime/db-owner-fencing.js +0 -69
- package/dist/network-runtime/delivery-receipts.js +0 -267
- package/dist/network-runtime/direct-endpoint-authority.js +0 -25
- package/dist/network-runtime/local-control-contract.js +0 -627
- package/dist/network-runtime/node-store-contract.js +0 -34
- package/dist/network-runtime/pair-route-contract.js +0 -77
- package/dist/network-runtime/peer-capabilities.js +0 -28
- package/dist/network-runtime/peer-principal-ref.js +0 -12
- package/dist/network-runtime/peer-state-machine.js +0 -121
- package/dist/network-runtime/protocol-schemas.js +0 -205
- package/dist/network-runtime/runtime-bootstrap-contract.js +0 -60
- package/dist/outlook/desktop-session.js +0 -279
- package/dist/policy.js +0 -149
- package/dist/providers/brave.js +0 -62
- package/dist/providers/duckduckgo.js +0 -176
- package/dist/providers/exa.js +0 -63
- package/dist/providers/firecrawl.js +0 -55
- package/dist/providers/index.js +0 -7
- package/dist/providers/jina.js +0 -49
- package/dist/providers/router.js +0 -96
- package/dist/providers/search-provider.js +0 -32
- package/dist/providers/tavily.js +0 -54
- package/dist/quip/desktop-session.js +0 -317
- package/dist/registry/index.js +0 -1
- package/dist/registry/registry.js +0 -756
- package/dist/runtime-socket-local-control-client.js +0 -330
- package/dist/security/dns-normalization.js +0 -19
- package/dist/security/dns-pinning.js +0 -123
- package/dist/security/external-content.js +0 -91
- package/dist/security/ssrf.js +0 -181
- package/dist/slack/desktop-session.js +0 -324
- package/dist/tool-factory.js +0 -47
- package/dist/types.js +0 -7
- package/dist/utils/retry.js +0 -132
- package/dist/utils/safe-parse-json.js +0 -160
- package/dist/utils/url.js +0 -19
- package/dist-cjs/.tsbuildinfo +0 -1
- package/dist-cjs/ask-user-interaction.js +0 -27
- package/dist-cjs/cache/web-cache.js +0 -70
- package/dist-cjs/definitions/arion.js +0 -107
- package/dist-cjs/definitions/browser/browser.js +0 -421
- package/dist-cjs/definitions/browser/index.js +0 -8
- package/dist-cjs/definitions/browser/pw-downloads.js +0 -117
- package/dist-cjs/definitions/browser/pw-interactions.js +0 -213
- package/dist-cjs/definitions/browser/pw-responses.js +0 -84
- package/dist-cjs/definitions/browser/pw-session.js +0 -326
- package/dist-cjs/definitions/browser/pw-shared.js +0 -72
- package/dist-cjs/definitions/browser/pw-snapshot.js +0 -307
- package/dist-cjs/definitions/browser/pw-state.js +0 -70
- package/dist-cjs/definitions/browser/types.js +0 -5
- package/dist-cjs/definitions/code-intelligence.js +0 -473
- package/dist-cjs/definitions/core.js +0 -133
- package/dist-cjs/definitions/delegation.js +0 -515
- package/dist-cjs/definitions/deploy.js +0 -68
- package/dist-cjs/definitions/filesystem.js +0 -199
- package/dist-cjs/definitions/frg.js +0 -66
- package/dist-cjs/definitions/index.js +0 -43
- package/dist-cjs/definitions/memory.js +0 -126
- package/dist-cjs/definitions/messaging.js +0 -631
- package/dist-cjs/definitions/meta.js +0 -352
- package/dist-cjs/definitions/network.js +0 -162
- package/dist-cjs/definitions/outlook.js +0 -280
- package/dist-cjs/definitions/patch/apply-patch.js +0 -191
- package/dist-cjs/definitions/patch/fuzzy-match.js +0 -172
- package/dist-cjs/definitions/patch/index.js +0 -5
- package/dist-cjs/definitions/patch/patch-parser.js +0 -215
- package/dist-cjs/definitions/patch/sandbox-paths.js +0 -113
- package/dist-cjs/definitions/process/index.js +0 -8
- package/dist-cjs/definitions/process/process-registry.js +0 -231
- package/dist-cjs/definitions/process/process.js +0 -389
- package/dist-cjs/definitions/process/pty-keys.js +0 -259
- package/dist-cjs/definitions/process/session-slug.js +0 -145
- package/dist-cjs/definitions/quip.js +0 -198
- package/dist-cjs/definitions/search.js +0 -63
- package/dist-cjs/definitions/session-history.js +0 -72
- package/dist-cjs/definitions/shell.js +0 -184
- package/dist-cjs/definitions/slack.js +0 -183
- package/dist-cjs/definitions/web.js +0 -112
- package/dist-cjs/executors/apply-patch.js +0 -938
- package/dist-cjs/executors/arion.js +0 -125
- package/dist-cjs/executors/code-intelligence.js +0 -925
- package/dist-cjs/executors/deploy.js +0 -869
- package/dist-cjs/executors/filesystem.js +0 -1167
- package/dist-cjs/executors/frg-freshness.js +0 -627
- package/dist-cjs/executors/frg.js +0 -334
- package/dist-cjs/executors/index.js +0 -143
- package/dist-cjs/executors/learning-meta.js +0 -1165
- package/dist-cjs/executors/lsp-client.js +0 -310
- package/dist-cjs/executors/memory.js +0 -796
- package/dist-cjs/executors/meta.js +0 -226
- package/dist-cjs/executors/process-registry.js +0 -469
- package/dist-cjs/executors/pty-session-store.js +0 -34
- package/dist-cjs/executors/pty.js +0 -312
- package/dist-cjs/executors/restart.js +0 -155
- package/dist-cjs/executors/search-freshness.js +0 -234
- package/dist-cjs/executors/search-types.js +0 -56
- package/dist-cjs/executors/search.js +0 -102
- package/dist-cjs/executors/self-diagnose.js +0 -434
- package/dist-cjs/executors/session-history.js +0 -320
- package/dist-cjs/executors/shell-safety.js +0 -478
- package/dist-cjs/executors/shell.js +0 -1001
- package/dist-cjs/executors/utils.js +0 -73
- package/dist-cjs/executors/web.js +0 -547
- package/dist-cjs/extraction/content-extraction.js +0 -243
- package/dist-cjs/extraction/index.js +0 -8
- package/dist-cjs/headless-control-contract.js +0 -972
- package/dist-cjs/local-control-http-auth.js +0 -5
- package/dist-cjs/mcp/client.js +0 -185
- package/dist-cjs/mcp/connection.js +0 -484
- package/dist-cjs/mcp/index.js +0 -30
- package/dist-cjs/mcp/jsonrpc.js +0 -148
- package/dist-cjs/mcp/types.js +0 -8
- package/dist-cjs/network-control-adapter.js +0 -77
- package/dist-cjs/network-runtime/address-types.js +0 -168
- package/dist-cjs/network-runtime/db-owner-fencing.js +0 -76
- package/dist-cjs/network-runtime/delivery-receipts.js +0 -276
- package/dist-cjs/network-runtime/direct-endpoint-authority.js +0 -29
- package/dist-cjs/network-runtime/local-control-contract.js +0 -633
- package/dist-cjs/network-runtime/node-store-contract.js +0 -38
- package/dist-cjs/network-runtime/pair-route-contract.js +0 -80
- package/dist-cjs/network-runtime/peer-capabilities.js +0 -37
- package/dist-cjs/network-runtime/peer-principal-ref.js +0 -15
- package/dist-cjs/network-runtime/peer-state-machine.js +0 -129
- package/dist-cjs/network-runtime/protocol-schemas.js +0 -212
- package/dist-cjs/network-runtime/runtime-bootstrap-contract.js +0 -63
- package/dist-cjs/outlook/desktop-session.js +0 -318
- package/dist-cjs/policy.js +0 -155
- package/dist-cjs/providers/brave.js +0 -66
- package/dist-cjs/providers/duckduckgo.js +0 -180
- package/dist-cjs/providers/exa.js +0 -67
- package/dist-cjs/providers/firecrawl.js +0 -59
- package/dist-cjs/providers/index.js +0 -17
- package/dist-cjs/providers/jina.js +0 -53
- package/dist-cjs/providers/router.js +0 -100
- package/dist-cjs/providers/search-provider.js +0 -36
- package/dist-cjs/providers/tavily.js +0 -58
- package/dist-cjs/quip/desktop-session.js +0 -353
- package/dist-cjs/registry/index.js +0 -6
- package/dist-cjs/registry/registry.js +0 -761
- package/dist-cjs/runtime-socket-local-control-client.js +0 -367
- package/dist-cjs/security/dns-normalization.js +0 -22
- package/dist-cjs/security/dns-pinning.js +0 -160
- package/dist-cjs/security/external-content.js +0 -95
- package/dist-cjs/security/ssrf.js +0 -221
- package/dist-cjs/slack/desktop-session.js +0 -366
- package/dist-cjs/tool-factory.js +0 -50
- package/dist-cjs/types.js +0 -8
- package/dist-cjs/utils/retry.js +0 -169
- package/dist-cjs/utils/safe-parse-json.js +0 -164
- package/dist-cjs/utils/url.js +0 -23
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Native LSP Client — uses vscode-jsonrpc for proper message framing.
|
|
3
|
-
*
|
|
4
|
-
* Same approach as Claude Code: createMessageConnection over stdio.
|
|
5
|
-
* Same configuration as Claude Code's LSP plugins.
|
|
6
|
-
* Supports: TypeScript, Python, Go, Rust, C/C++, Swift, Java, Kotlin, Lua, PHP, Ruby, C#.
|
|
7
|
-
*/
|
|
8
|
-
import { spawn } from "node:child_process";
|
|
9
|
-
import { readFileSync } from "node:fs";
|
|
10
|
-
import { resolve } from "node:path";
|
|
11
|
-
import { fileURLToPath } from "node:url";
|
|
12
|
-
import { createRequire } from "node:module";
|
|
13
|
-
// vscode-jsonrpc: same library Claude Code uses for LSP message framing.
|
|
14
|
-
// Direct import via createRequire (package lacks ESM exports field).
|
|
15
|
-
const require_ = createRequire(fileURLToPath(import.meta.url));
|
|
16
|
-
const { createMessageConnection, StreamMessageReader, StreamMessageWriter } = require_("vscode-jsonrpc/node");
|
|
17
|
-
export const LSP_SERVERS = {
|
|
18
|
-
typescript: {
|
|
19
|
-
command: "typescript-language-server",
|
|
20
|
-
args: ["--stdio"],
|
|
21
|
-
extensionToLanguage: {
|
|
22
|
-
".ts": "typescript",
|
|
23
|
-
".tsx": "typescriptreact",
|
|
24
|
-
".js": "javascript",
|
|
25
|
-
".jsx": "javascriptreact",
|
|
26
|
-
".mts": "typescript",
|
|
27
|
-
".cts": "typescript",
|
|
28
|
-
".mjs": "javascript",
|
|
29
|
-
".cjs": "javascript",
|
|
30
|
-
},
|
|
31
|
-
startupTimeout: 30_000,
|
|
32
|
-
},
|
|
33
|
-
python: {
|
|
34
|
-
command: "pyright-langserver",
|
|
35
|
-
args: ["--stdio"],
|
|
36
|
-
extensionToLanguage: { ".py": "python", ".pyi": "python" },
|
|
37
|
-
startupTimeout: 60_000,
|
|
38
|
-
},
|
|
39
|
-
go: {
|
|
40
|
-
command: "gopls",
|
|
41
|
-
args: [],
|
|
42
|
-
extensionToLanguage: { ".go": "go" },
|
|
43
|
-
startupTimeout: 30_000,
|
|
44
|
-
},
|
|
45
|
-
rust: {
|
|
46
|
-
command: "rust-analyzer",
|
|
47
|
-
args: [],
|
|
48
|
-
extensionToLanguage: { ".rs": "rust" },
|
|
49
|
-
startupTimeout: 60_000,
|
|
50
|
-
},
|
|
51
|
-
"c/cpp": {
|
|
52
|
-
command: "clangd",
|
|
53
|
-
args: ["--background-index"],
|
|
54
|
-
extensionToLanguage: {
|
|
55
|
-
".c": "c",
|
|
56
|
-
".h": "c",
|
|
57
|
-
".cpp": "cpp",
|
|
58
|
-
".cc": "cpp",
|
|
59
|
-
".cxx": "cpp",
|
|
60
|
-
".hpp": "cpp",
|
|
61
|
-
".hxx": "cpp",
|
|
62
|
-
},
|
|
63
|
-
startupTimeout: 30_000,
|
|
64
|
-
},
|
|
65
|
-
swift: {
|
|
66
|
-
command: "sourcekit-lsp",
|
|
67
|
-
args: [],
|
|
68
|
-
extensionToLanguage: { ".swift": "swift" },
|
|
69
|
-
startupTimeout: 30_000,
|
|
70
|
-
},
|
|
71
|
-
java: {
|
|
72
|
-
command: "jdtls",
|
|
73
|
-
args: [],
|
|
74
|
-
extensionToLanguage: { ".java": "java" },
|
|
75
|
-
startupTimeout: 120_000,
|
|
76
|
-
},
|
|
77
|
-
kotlin: {
|
|
78
|
-
command: "kotlin-language-server",
|
|
79
|
-
args: ["--stdio"],
|
|
80
|
-
extensionToLanguage: { ".kt": "kotlin", ".kts": "kotlin" },
|
|
81
|
-
startupTimeout: 120_000,
|
|
82
|
-
},
|
|
83
|
-
lua: {
|
|
84
|
-
command: "lua-language-server",
|
|
85
|
-
args: [],
|
|
86
|
-
extensionToLanguage: { ".lua": "lua" },
|
|
87
|
-
startupTimeout: 30_000,
|
|
88
|
-
},
|
|
89
|
-
php: {
|
|
90
|
-
command: "intelephense",
|
|
91
|
-
args: ["--stdio"],
|
|
92
|
-
extensionToLanguage: { ".php": "php" },
|
|
93
|
-
startupTimeout: 30_000,
|
|
94
|
-
},
|
|
95
|
-
ruby: {
|
|
96
|
-
command: "ruby-lsp",
|
|
97
|
-
args: [],
|
|
98
|
-
extensionToLanguage: { ".rb": "ruby", ".rake": "ruby", ".gemspec": "ruby" },
|
|
99
|
-
startupTimeout: 30_000,
|
|
100
|
-
},
|
|
101
|
-
csharp: {
|
|
102
|
-
command: "csharp-ls",
|
|
103
|
-
args: [],
|
|
104
|
-
extensionToLanguage: { ".cs": "csharp" },
|
|
105
|
-
startupTimeout: 30_000,
|
|
106
|
-
},
|
|
107
|
-
};
|
|
108
|
-
// Build reverse lookup: file extension → server name
|
|
109
|
-
const EXT_TO_SERVER = new Map();
|
|
110
|
-
for (const [serverName, config] of Object.entries(LSP_SERVERS)) {
|
|
111
|
-
for (const ext of Object.keys(config.extensionToLanguage)) {
|
|
112
|
-
EXT_TO_SERVER.set(ext, serverName);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
export function getServerForFile(filePath) {
|
|
116
|
-
const ext = filePath.slice(filePath.lastIndexOf("."));
|
|
117
|
-
return EXT_TO_SERVER.get(ext);
|
|
118
|
-
}
|
|
119
|
-
export function getLanguageId(filePath) {
|
|
120
|
-
const ext = filePath.slice(filePath.lastIndexOf("."));
|
|
121
|
-
const serverName = EXT_TO_SERVER.get(ext);
|
|
122
|
-
if (!serverName)
|
|
123
|
-
return undefined;
|
|
124
|
-
return LSP_SERVERS[serverName]?.extensionToLanguage[ext];
|
|
125
|
-
}
|
|
126
|
-
// ---------------------------------------------------------------------------
|
|
127
|
-
// LSP Server Instance — uses vscode-jsonrpc createMessageConnection
|
|
128
|
-
// ---------------------------------------------------------------------------
|
|
129
|
-
export class LspServer {
|
|
130
|
-
process = null;
|
|
131
|
-
connection = null;
|
|
132
|
-
initialized = false;
|
|
133
|
-
openFiles = new Set();
|
|
134
|
-
diagnosticsReceived = new Set();
|
|
135
|
-
serverName;
|
|
136
|
-
config;
|
|
137
|
-
rootUri;
|
|
138
|
-
constructor(serverName, rootPath) {
|
|
139
|
-
this.serverName = serverName;
|
|
140
|
-
const cfg = LSP_SERVERS[serverName];
|
|
141
|
-
if (!cfg)
|
|
142
|
-
throw new Error(`Unknown LSP server: ${serverName}`);
|
|
143
|
-
this.config = cfg;
|
|
144
|
-
this.rootUri = `file://${resolve(rootPath)}`;
|
|
145
|
-
}
|
|
146
|
-
async start() {
|
|
147
|
-
if (this.connection)
|
|
148
|
-
return;
|
|
149
|
-
this.process = spawn(this.config.command, this.config.args, {
|
|
150
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
151
|
-
});
|
|
152
|
-
this.process.stderr?.on("data", () => {
|
|
153
|
-
// Swallow stderr — language servers are noisy
|
|
154
|
-
});
|
|
155
|
-
this.process.on("exit", () => {
|
|
156
|
-
this.connection?.dispose();
|
|
157
|
-
this.connection = null;
|
|
158
|
-
this.process = null;
|
|
159
|
-
this.initialized = false;
|
|
160
|
-
this.openFiles.clear();
|
|
161
|
-
this.diagnosticsReceived.clear();
|
|
162
|
-
});
|
|
163
|
-
// Create vscode-jsonrpc connection — handles Content-Length framing,
|
|
164
|
-
// request/response matching, notification routing. Same as Claude Code.
|
|
165
|
-
this.connection = createMessageConnection(new StreamMessageReader(this.process.stdout), new StreamMessageWriter(this.process.stdin));
|
|
166
|
-
// Listen for diagnostics notifications (signals file analysis complete)
|
|
167
|
-
this.connection.onNotification("textDocument/publishDiagnostics", (params) => {
|
|
168
|
-
const p = params;
|
|
169
|
-
if (p.uri)
|
|
170
|
-
this.diagnosticsReceived.add(p.uri);
|
|
171
|
-
});
|
|
172
|
-
this.connection.listen();
|
|
173
|
-
// Initialize handshake
|
|
174
|
-
await this.connection.sendRequest("initialize", {
|
|
175
|
-
processId: globalThis.process.pid,
|
|
176
|
-
rootUri: this.rootUri,
|
|
177
|
-
capabilities: {
|
|
178
|
-
textDocument: {
|
|
179
|
-
definition: { dynamicRegistration: false },
|
|
180
|
-
references: { dynamicRegistration: false },
|
|
181
|
-
hover: { dynamicRegistration: false, contentFormat: ["plaintext", "markdown"] },
|
|
182
|
-
documentSymbol: { dynamicRegistration: false },
|
|
183
|
-
rename: { dynamicRegistration: false, prepareSupport: false },
|
|
184
|
-
publishDiagnostics: { relatedInformation: true },
|
|
185
|
-
},
|
|
186
|
-
workspace: {
|
|
187
|
-
workspaceFolders: true,
|
|
188
|
-
},
|
|
189
|
-
},
|
|
190
|
-
workspaceFolders: [{ uri: this.rootUri, name: "root" }],
|
|
191
|
-
});
|
|
192
|
-
this.connection.sendNotification("initialized", {});
|
|
193
|
-
this.initialized = true;
|
|
194
|
-
}
|
|
195
|
-
async stop() {
|
|
196
|
-
if (!this.connection)
|
|
197
|
-
return;
|
|
198
|
-
try {
|
|
199
|
-
await this.connection.sendRequest("shutdown");
|
|
200
|
-
this.connection.sendNotification("exit");
|
|
201
|
-
}
|
|
202
|
-
catch {
|
|
203
|
-
// Force kill if graceful shutdown fails
|
|
204
|
-
}
|
|
205
|
-
this.connection.dispose();
|
|
206
|
-
this.connection = null;
|
|
207
|
-
this.process?.kill("SIGTERM");
|
|
208
|
-
this.process = null;
|
|
209
|
-
this.initialized = false;
|
|
210
|
-
}
|
|
211
|
-
// Ensure a file is opened in the language server
|
|
212
|
-
async openFile(filePath) {
|
|
213
|
-
const uri = `file://${resolve(filePath)}`;
|
|
214
|
-
if (this.openFiles.has(uri))
|
|
215
|
-
return;
|
|
216
|
-
const languageId = getLanguageId(filePath);
|
|
217
|
-
if (!languageId)
|
|
218
|
-
return;
|
|
219
|
-
let text;
|
|
220
|
-
try {
|
|
221
|
-
text = readFileSync(resolve(filePath), "utf-8");
|
|
222
|
-
}
|
|
223
|
-
catch {
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
this.connection?.sendNotification("textDocument/didOpen", {
|
|
227
|
-
textDocument: { uri, languageId, version: 1, text },
|
|
228
|
-
});
|
|
229
|
-
this.openFiles.add(uri);
|
|
230
|
-
// No wait needed. LSP servers queue requests after didOpen and respond
|
|
231
|
-
// when ready. Tested: TypeScript responds to hover in 239ms with zero
|
|
232
|
-
// wait (before diagnostics arrive). Pyright responds after its analysis.
|
|
233
|
-
// The sendRequest in the caller will block until the server responds.
|
|
234
|
-
}
|
|
235
|
-
// --- LSP Operations ---
|
|
236
|
-
async definition(filePath, line, character) {
|
|
237
|
-
await this.ensureReady(filePath);
|
|
238
|
-
return this.connection.sendRequest("textDocument/definition", {
|
|
239
|
-
textDocument: { uri: `file://${resolve(filePath)}` },
|
|
240
|
-
position: { line, character },
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
async references(filePath, line, character) {
|
|
244
|
-
await this.ensureReady(filePath);
|
|
245
|
-
return this.connection.sendRequest("textDocument/references", {
|
|
246
|
-
textDocument: { uri: `file://${resolve(filePath)}` },
|
|
247
|
-
position: { line, character },
|
|
248
|
-
context: { includeDeclaration: true },
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
async hover(filePath, line, character) {
|
|
252
|
-
await this.ensureReady(filePath);
|
|
253
|
-
return this.connection.sendRequest("textDocument/hover", {
|
|
254
|
-
textDocument: { uri: `file://${resolve(filePath)}` },
|
|
255
|
-
position: { line, character },
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
async documentSymbols(filePath) {
|
|
259
|
-
await this.ensureReady(filePath);
|
|
260
|
-
return this.connection.sendRequest("textDocument/documentSymbol", {
|
|
261
|
-
textDocument: { uri: `file://${resolve(filePath)}` },
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
async rename(filePath, line, character, newName) {
|
|
265
|
-
await this.ensureReady(filePath);
|
|
266
|
-
return this.connection.sendRequest("textDocument/rename", {
|
|
267
|
-
textDocument: { uri: `file://${resolve(filePath)}` },
|
|
268
|
-
position: { line, character },
|
|
269
|
-
newName,
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
// --- Internals ---
|
|
273
|
-
async ensureReady(filePath) {
|
|
274
|
-
if (!this.initialized)
|
|
275
|
-
await this.start();
|
|
276
|
-
await this.openFile(filePath);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
// ---------------------------------------------------------------------------
|
|
280
|
-
// Server Pool — one server per language, shared across queries
|
|
281
|
-
// ---------------------------------------------------------------------------
|
|
282
|
-
const serverPool = new Map();
|
|
283
|
-
export function getOrCreateServer(serverName, rootPath) {
|
|
284
|
-
const key = `${serverName}:${rootPath}`;
|
|
285
|
-
let server = serverPool.get(key);
|
|
286
|
-
if (!server) {
|
|
287
|
-
server = new LspServer(serverName, rootPath);
|
|
288
|
-
serverPool.set(key, server);
|
|
289
|
-
}
|
|
290
|
-
return server;
|
|
291
|
-
}
|
|
292
|
-
export async function shutdownAll() {
|
|
293
|
-
const stops = [...serverPool.values()].map((s) => s.stop());
|
|
294
|
-
await Promise.allSettled(stops);
|
|
295
|
-
serverPool.clear();
|
|
296
|
-
}
|