@mrclrchtr/supi-code-intelligence 6.0.1 → 6.1.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 +1 -1
- package/node_modules/@mrclrchtr/supi-code-runtime/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +5 -0
- package/node_modules/@mrclrchtr/supi-core/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-lsp/README.md +5 -1
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +5 -0
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-jsonrpc/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts +1 -1
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts +2 -2
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts +9 -9
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-protocol/package.json +3 -3
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-types/lib/esm/main.d.ts +2 -2
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-types/lib/esm/main.js +1 -1
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-types/lib/umd/main.d.ts +2 -2
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-types/lib/umd/main.js +1 -1
- package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-types/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-lsp/package.json +3 -3
- package/node_modules/@mrclrchtr/supi-lsp/src/api.ts +2 -0
- package/node_modules/@mrclrchtr/supi-lsp/src/client/client.ts +6 -0
- package/node_modules/@mrclrchtr/supi-lsp/src/config/server-config.ts +8 -0
- package/node_modules/@mrclrchtr/supi-lsp/src/config/types.ts +1 -0
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-project-info.ts +6 -3
- package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager.ts +582 -26
- package/node_modules/@mrclrchtr/supi-lsp/src/provider/lsp-semantic-provider.ts +2 -3
- package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-diagnostic-surface.ts +10 -0
- package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-registry.ts +36 -9
- package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-transition-debug.ts +2 -0
- package/node_modules/@mrclrchtr/supi-lsp/src/session/workspace-lsp-runtime.ts +4 -2
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +5 -0
- package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/package.json +1 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/package.json +3 -3
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/kotlin/tree-sitter-kotlin.wasm.json +1 -1
- package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/sql/tree-sitter-sql.wasm.json +1 -1
- package/package.json +5 -5
- package/src/analysis/health/recovery.ts +4 -0
- package/src/analysis/health/server-status.ts +64 -0
- package/src/analysis/health/signals.ts +1 -0
- package/src/analysis/provider.ts +2 -1
- package/src/analysis/target/symbol.ts +28 -16
- package/src/analysis/target/types.ts +1 -0
- package/src/session/find-workflow.ts +5 -12
- package/src/session/health-refresh.ts +6 -2
- package/src/session/health-types.ts +8 -2
- package/src/session/health-workflow.ts +5 -1
- package/src/session/semantic-demand.ts +36 -0
- package/src/session/target-workflow.ts +9 -12
- package/src/tool/code_health/guidance.ts +2 -2
- package/src/tool/code_health/markdown.ts +15 -3
- package/src/tool/code_health/result.ts +14 -5
- package/src/tool/code_health/spec.ts +2 -1
- package/src/tool/code_health/tui.ts +24 -3
- package/src/tool/result/errors.ts +1 -0
- package/src/tool/result/types.ts +6 -0
- package/src/ui/footer.ts +7 -5
- package/src/ui/status-command.ts +31 -0
- package/src/ui/status-overlay.ts +69 -23
package/README.md
CHANGED
|
@@ -123,7 +123,7 @@ If a server is missing, the agent can still use available workspace and structur
|
|
|
123
123
|
|
|
124
124
|
## Status and settings
|
|
125
125
|
|
|
126
|
-
Open the status view to see
|
|
126
|
+
Open the status view to see each LSP route with its workspace-relative root, running or missing servers, typed route issue counts, and capability warnings:
|
|
127
127
|
|
|
128
128
|
```text
|
|
129
129
|
/supi-ci-status
|
|
@@ -75,9 +75,14 @@ export interface SemanticProvider {
|
|
|
75
75
|
filePath: string,
|
|
76
76
|
control?: CodeRequestControl,
|
|
77
77
|
): Promise<CodeQueryResult<DocumentCodeSymbol[]>>;
|
|
78
|
+
/**
|
|
79
|
+
* Collect workspace symbols from routes that can contribute within the
|
|
80
|
+
* optional canonical path scopes.
|
|
81
|
+
*/
|
|
78
82
|
workspaceSymbols(
|
|
79
83
|
query: string,
|
|
80
84
|
control?: CodeRequestControl,
|
|
85
|
+
scopes?: readonly string[],
|
|
81
86
|
): Promise<CodeQueryResult<CodeSymbol[]>>;
|
|
82
87
|
|
|
83
88
|
/** Optional definition capability with explicit completed-empty semantics. */
|
|
@@ -146,7 +146,11 @@ Retained and persisted LSP debug events may identify local workspaces, servers,
|
|
|
146
146
|
- `method` — exact LSP method, e.g. `textDocument/hover`
|
|
147
147
|
- `root` — server root, absolute where present
|
|
148
148
|
|
|
149
|
-
`runtime.transition` events carry `cwd` and a bounded `servers` array (name, status, ready; at most 16 entries) alongside the aggregate counts. `readiness.*` events carry `cwd`, `server`, and `root`; their messages and data never embed raw progress-token values. `request.timing` events carry the exact `method`, `server`, and `cwd`, plus the JSON-RPC error code: the server-reported code for failed requests, and the defined constant `-32095` (`LSP_REQUEST_TIMEOUT_ERROR_CODE`) for local timeouts; cancellations carry no code. `diagnostics.timing` events carry `cwd`, `server`, and a workspace-relative `file` for `sync-file` operations; `refresh-open` stays aggregate. `runtime.recovery` events carry `cwd
|
|
149
|
+
`runtime.transition` events carry `cwd` and a bounded `servers` array (name, status, ready, and an optional process-crash status reason; at most 16 entries) alongside the aggregate counts. `readiness.*` events carry `cwd`, `server`, and `root`; their messages and data never embed raw progress-token values. `request.timing` events carry the exact `method`, `server`, and `cwd`, plus the JSON-RPC error code: the server-reported code for failed requests, and the defined constant `-32095` (`LSP_REQUEST_TIMEOUT_ERROR_CODE`) for local timeouts; cancellations carry no code. `diagnostics.timing` events carry `cwd`, `server`, and a workspace-relative `file` for `sync-file` operations; `refresh-open` stays aggregate. `runtime.recovery` events carry `cwd`, bounded server and route-root identity, an outcome, and elapsed time for process-crash recovery. Diagnostic recovery events keep their existing bounded attempted/restarted server names. `capability.transition` events fire only on semantic ready↔pending transitions and carry `cwd` and the ready state — never for initialize, registration, or unregistration traffic. Code-intelligence events (`code-operation.*`, `workflow.timing`, `ast-scan.timing`) carry `cwd` only.
|
|
150
|
+
|
|
151
|
+
`ProjectServerInfo.statusReason` is present only for process-crash recovery states: `process-crashed`, `process-crash-recovery-pending`, or `process-crash-recovery-exhausted`. An LSP route is one configured server and workspace root. A route stays in `error` status for all three states.
|
|
152
|
+
|
|
153
|
+
Semantic evidence operations recover each required, previously running crashed route and wait for the shared replacement. Scoped workspace-symbol operations select routes by operation support and root intersection; unscoped operations select every known supporting route. Required routes start in parallel. File diagnostics can also recover their route. An explicit broad diagnostic refresh can recover crashed routes that retain tracked files in its scope. Server inventory, workspace readiness, and passive diagnostic snapshots do not start recovery. Recovery never cold-starts a route that did not initialize successfully.
|
|
150
154
|
|
|
151
155
|
Identity strings — `cwd`, `server`, `file`, `method`, and `root` — are bounded to 512 UTF-16 code units (marker included; truncation appends `…`) and server lists to 16 entries. No raw protocol dumps, request/response params, diagnostic text, progress tokens, or unbounded file lists are recorded; `openFiles` stays a count. Identity fields are intentionally **not** secret-redacted — the debug registry still redacts secret keys and values, but server names, workspace-relative files, and method names pass through unredacted so local protocol failures stay diagnosable. The supi-debug package documents this disclosure for retained and persisted events.
|
|
152
156
|
|
|
@@ -75,9 +75,14 @@ export interface SemanticProvider {
|
|
|
75
75
|
filePath: string,
|
|
76
76
|
control?: CodeRequestControl,
|
|
77
77
|
): Promise<CodeQueryResult<DocumentCodeSymbol[]>>;
|
|
78
|
+
/**
|
|
79
|
+
* Collect workspace symbols from routes that can contribute within the
|
|
80
|
+
* optional canonical path scopes.
|
|
81
|
+
*/
|
|
78
82
|
workspaceSymbols(
|
|
79
83
|
query: string,
|
|
80
84
|
control?: CodeRequestControl,
|
|
85
|
+
scopes?: readonly string[],
|
|
81
86
|
): Promise<CodeQueryResult<CodeSymbol[]>>;
|
|
82
87
|
|
|
83
88
|
/** Optional definition capability with explicit completed-empty semantics. */
|
|
@@ -62,7 +62,7 @@ export interface ColorPresentationParams extends WorkDoneProgressParams, Partial
|
|
|
62
62
|
export declare namespace ColorPresentationRequest {
|
|
63
63
|
const method: 'textDocument/colorPresentation';
|
|
64
64
|
const messageDirection: MessageDirection;
|
|
65
|
-
const type: ProtocolRequestType<ColorPresentationParams, ColorPresentation[], ColorPresentation[], void,
|
|
65
|
+
const type: ProtocolRequestType<ColorPresentationParams, ColorPresentation[], ColorPresentation[], void, DocumentColorRegistrationOptions>;
|
|
66
66
|
type HandlerSignature = RequestHandler<ColorPresentationParams, ColorPresentation[], void>;
|
|
67
67
|
const capabilities: CM<"textDocument.colorProvider", "colorProvider">;
|
|
68
68
|
}
|
|
@@ -2778,12 +2778,12 @@ export interface CodeActionClientCapabilities {
|
|
|
2778
2778
|
* Client supports the tag property on a code action. Clients
|
|
2779
2779
|
* supporting tags have to handle unknown tags gracefully.
|
|
2780
2780
|
*
|
|
2781
|
-
* @since 3.18.0
|
|
2781
|
+
* @since 3.18.0
|
|
2782
2782
|
*/
|
|
2783
2783
|
tagSupport?: CodeActionTagOptions;
|
|
2784
2784
|
}
|
|
2785
2785
|
/**
|
|
2786
|
-
* @since 3.18.0
|
|
2786
|
+
* @since 3.18.0
|
|
2787
2787
|
*/
|
|
2788
2788
|
export type CodeActionTagOptions = {
|
|
2789
2789
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NotificationHandler, RequestHandler } from 'vscode-jsonrpc';
|
|
2
|
-
import { WorkspaceEdit } from 'vscode-languageserver-types';
|
|
2
|
+
import { WorkspaceEdit, type DocumentUri } from 'vscode-languageserver-types';
|
|
3
3
|
import { CM, MessageDirection, ProtocolNotificationType, ProtocolRequestType } from './messages';
|
|
4
4
|
/**
|
|
5
5
|
* Options for notifications/requests for user operations on files.
|
|
@@ -172,9 +172,9 @@ export interface CreateFilesParams {
|
|
|
172
172
|
*/
|
|
173
173
|
export interface FileCreate {
|
|
174
174
|
/**
|
|
175
|
-
* A
|
|
175
|
+
* A URI for the location of the file/folder being created.
|
|
176
176
|
*/
|
|
177
|
-
uri:
|
|
177
|
+
uri: DocumentUri;
|
|
178
178
|
}
|
|
179
179
|
/**
|
|
180
180
|
* The parameters sent in notifications/requests for user-initiated renames of
|
|
@@ -196,13 +196,13 @@ export interface RenameFilesParams {
|
|
|
196
196
|
*/
|
|
197
197
|
export interface FileRename {
|
|
198
198
|
/**
|
|
199
|
-
* A
|
|
199
|
+
* A URI for the original location of the file/folder being renamed.
|
|
200
200
|
*/
|
|
201
|
-
oldUri:
|
|
201
|
+
oldUri: DocumentUri;
|
|
202
202
|
/**
|
|
203
|
-
* A
|
|
203
|
+
* A URI for the new location of the file/folder being renamed.
|
|
204
204
|
*/
|
|
205
|
-
newUri:
|
|
205
|
+
newUri: DocumentUri;
|
|
206
206
|
}
|
|
207
207
|
/**
|
|
208
208
|
* The parameters sent in notifications/requests for user-initiated deletes of
|
|
@@ -223,9 +223,9 @@ export interface DeleteFilesParams {
|
|
|
223
223
|
*/
|
|
224
224
|
export interface FileDelete {
|
|
225
225
|
/**
|
|
226
|
-
* A
|
|
226
|
+
* A URI for the location of the file/folder being deleted.
|
|
227
227
|
*/
|
|
228
|
-
uri:
|
|
228
|
+
uri: DocumentUri;
|
|
229
229
|
}
|
|
230
230
|
/**
|
|
231
231
|
* The will create files request is sent from the client to the server before files are actually
|
package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-protocol/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vscode-languageserver-protocol",
|
|
3
3
|
"description": "VSCode Language Server Protocol implementation",
|
|
4
|
-
"version": "3.18.
|
|
4
|
+
"version": "3.18.3",
|
|
5
5
|
"author": "Microsoft Corporation",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"vscode-jsonrpc": "9.0.
|
|
31
|
-
"vscode-languageserver-types": "3.18.
|
|
30
|
+
"vscode-jsonrpc": "9.0.2",
|
|
31
|
+
"vscode-languageserver-types": "3.18.3"
|
|
32
32
|
},
|
|
33
33
|
"scripts": {
|
|
34
34
|
"prepublishOnly": "echo \"⛔ Can only publish from a secure pipeline ⛔\" && node ../build/npm/fail",
|
package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-types/lib/esm/main.d.ts
CHANGED
|
@@ -2517,7 +2517,7 @@ export type CodeActionDisabled = {
|
|
|
2517
2517
|
/**
|
|
2518
2518
|
* Code action tags are extra annotations that tweak the behavior of a code action.
|
|
2519
2519
|
*
|
|
2520
|
-
* @since 3.18.0
|
|
2520
|
+
* @since 3.18.0
|
|
2521
2521
|
*/
|
|
2522
2522
|
export declare namespace CodeActionTag {
|
|
2523
2523
|
/**
|
|
@@ -2599,7 +2599,7 @@ export interface CodeAction {
|
|
|
2599
2599
|
/**
|
|
2600
2600
|
* Tags for this code action.
|
|
2601
2601
|
*
|
|
2602
|
-
* @since 3.18.0
|
|
2602
|
+
* @since 3.18.0
|
|
2603
2603
|
*/
|
|
2604
2604
|
tags?: CodeActionTag[];
|
|
2605
2605
|
}
|
package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-types/lib/esm/main.js
CHANGED
|
@@ -1758,7 +1758,7 @@ export var CodeActionContext;
|
|
|
1758
1758
|
/**
|
|
1759
1759
|
* Code action tags are extra annotations that tweak the behavior of a code action.
|
|
1760
1760
|
*
|
|
1761
|
-
* @since 3.18.0
|
|
1761
|
+
* @since 3.18.0
|
|
1762
1762
|
*/
|
|
1763
1763
|
export var CodeActionTag;
|
|
1764
1764
|
(function (CodeActionTag) {
|
package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-types/lib/umd/main.d.ts
CHANGED
|
@@ -2517,7 +2517,7 @@ export type CodeActionDisabled = {
|
|
|
2517
2517
|
/**
|
|
2518
2518
|
* Code action tags are extra annotations that tweak the behavior of a code action.
|
|
2519
2519
|
*
|
|
2520
|
-
* @since 3.18.0
|
|
2520
|
+
* @since 3.18.0
|
|
2521
2521
|
*/
|
|
2522
2522
|
export declare namespace CodeActionTag {
|
|
2523
2523
|
/**
|
|
@@ -2599,7 +2599,7 @@ export interface CodeAction {
|
|
|
2599
2599
|
/**
|
|
2600
2600
|
* Tags for this code action.
|
|
2601
2601
|
*
|
|
2602
|
-
* @since 3.18.0
|
|
2602
|
+
* @since 3.18.0
|
|
2603
2603
|
*/
|
|
2604
2604
|
tags?: CodeActionTag[];
|
|
2605
2605
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mrclrchtr/supi-lsp",
|
|
3
|
-
"version": "6.0
|
|
3
|
+
"version": "6.1.0",
|
|
4
4
|
"description": "Language Server Protocol runtime for SuPi code intelligence",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"vscode-jsonrpc": "^9.0.0",
|
|
38
38
|
"vscode-languageserver-protocol": "^3.18.0",
|
|
39
39
|
"vscode-languageserver-types": "^3.18.0",
|
|
40
|
-
"@mrclrchtr/supi-code-runtime": "6.0
|
|
41
|
-
"@mrclrchtr/supi-core": "6.0
|
|
40
|
+
"@mrclrchtr/supi-code-runtime": "6.1.0",
|
|
41
|
+
"@mrclrchtr/supi-core": "6.1.0"
|
|
42
42
|
},
|
|
43
43
|
"bundledDependencies": [
|
|
44
44
|
"@mrclrchtr/supi-code-runtime",
|
|
@@ -30,6 +30,7 @@ export type {
|
|
|
30
30
|
MissingServer,
|
|
31
31
|
Position,
|
|
32
32
|
ProjectServerInfo,
|
|
33
|
+
ProjectServerStatusReason,
|
|
33
34
|
Range,
|
|
34
35
|
SymbolInformation,
|
|
35
36
|
WorkspaceEdit,
|
|
@@ -57,6 +58,7 @@ export type {
|
|
|
57
58
|
DiagnosticEvidenceStatus,
|
|
58
59
|
DiagnosticEvidenceSummary,
|
|
59
60
|
OutstandingDiagnosticSummaryEntry,
|
|
61
|
+
ProcessCrashDiagnosticDemand,
|
|
60
62
|
RecoverDiagnosticsResult,
|
|
61
63
|
RoutedMutationResponse,
|
|
62
64
|
SemanticReadinessResult,
|
|
@@ -335,8 +335,14 @@ export class LspClient {
|
|
|
335
335
|
if (positionEncoding !== "utf-16") {
|
|
336
336
|
throw new Error(`Server selected unsupported position encoding "${positionEncoding}".`);
|
|
337
337
|
}
|
|
338
|
+
if (this._status !== "initializing") {
|
|
339
|
+
throw new Error(`${this.name}: client shutdown during initialize`);
|
|
340
|
+
}
|
|
338
341
|
this.capabilities = result.capabilities;
|
|
339
342
|
await this.rpc.sendNotification("initialized", {});
|
|
343
|
+
if (this._status !== "initializing") {
|
|
344
|
+
throw new Error(`${this.name}: client shutdown during initialize`);
|
|
345
|
+
}
|
|
340
346
|
this._status = "running";
|
|
341
347
|
this.publishLifecycle("startup");
|
|
342
348
|
|
|
@@ -26,8 +26,16 @@ export interface DetectedProjectServer {
|
|
|
26
26
|
fileTypes: string[];
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
/** Structured reason for a route-level process-crash recovery state. */
|
|
30
|
+
export type ProjectServerStatusReason =
|
|
31
|
+
| "process-crashed"
|
|
32
|
+
| "process-crash-recovery-pending"
|
|
33
|
+
| "process-crash-recovery-exhausted";
|
|
34
|
+
|
|
29
35
|
export interface ProjectServerInfo extends DetectedProjectServer {
|
|
30
36
|
status: "running" | "error" | "unavailable";
|
|
37
|
+
/** Structured lifecycle reason when process-crash recovery is active. */
|
|
38
|
+
statusReason?: ProjectServerStatusReason;
|
|
31
39
|
supportedActions: string[];
|
|
32
40
|
openFiles: string[];
|
|
33
41
|
/** Whether the LSP server is currently not indexing and ready to serve queries. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { LspClient } from "../client/client.ts";
|
|
2
2
|
import { getSupportedLspServerActions } from "../config/server-actions.ts";
|
|
3
|
-
import type { ProjectServerInfo } from "../config/server-config.ts";
|
|
3
|
+
import type { ProjectServerInfo, ProjectServerStatusReason } from "../config/server-config.ts";
|
|
4
4
|
import { displayRelativeFilePath } from "../summary.ts";
|
|
5
5
|
|
|
6
6
|
interface ProjectServerInfoInput {
|
|
@@ -9,14 +9,16 @@ interface ProjectServerInfoInput {
|
|
|
9
9
|
fileTypes: string[];
|
|
10
10
|
client: LspClient | undefined;
|
|
11
11
|
unavailableReason?: "missing-command" | "start-failed" | "runtime-error";
|
|
12
|
+
statusReason?: ProjectServerStatusReason;
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
export function buildProjectServerInfo(
|
|
15
16
|
input: ProjectServerInfoInput,
|
|
16
17
|
cwd: string,
|
|
17
18
|
): ProjectServerInfo {
|
|
18
|
-
const status =
|
|
19
|
-
|
|
19
|
+
const status = input.statusReason
|
|
20
|
+
? "error"
|
|
21
|
+
: input.client?.status === "running"
|
|
20
22
|
? "running"
|
|
21
23
|
: input.client?.status === "error" || input.unavailableReason === "start-failed"
|
|
22
24
|
? "error"
|
|
@@ -29,6 +31,7 @@ export function buildProjectServerInfo(
|
|
|
29
31
|
root: input.root,
|
|
30
32
|
fileTypes: input.fileTypes,
|
|
31
33
|
status,
|
|
34
|
+
...(input.statusReason ? { statusReason: input.statusReason } : {}),
|
|
32
35
|
supportedActions: getSupportedLspServerActions(input.client?.serverCapabilities),
|
|
33
36
|
openFiles: input.client?.openFiles.map((file) => displayRelativeFilePath(file, cwd)) ?? [],
|
|
34
37
|
ready: input.client?.ready ?? false,
|