@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.
Files changed (59) hide show
  1. package/README.md +1 -1
  2. package/node_modules/@mrclrchtr/supi-code-runtime/package.json +1 -1
  3. package/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +5 -0
  4. package/node_modules/@mrclrchtr/supi-core/package.json +1 -1
  5. package/node_modules/@mrclrchtr/supi-lsp/README.md +5 -1
  6. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/package.json +1 -1
  7. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +5 -0
  8. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/package.json +1 -1
  9. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-jsonrpc/package.json +1 -1
  10. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.d.ts +1 -1
  11. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-protocol/lib/common/protocol.d.ts +2 -2
  12. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.d.ts +9 -9
  13. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-protocol/package.json +3 -3
  14. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-types/lib/esm/main.d.ts +2 -2
  15. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-types/lib/esm/main.js +1 -1
  16. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-types/lib/umd/main.d.ts +2 -2
  17. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-types/lib/umd/main.js +1 -1
  18. package/node_modules/@mrclrchtr/supi-lsp/node_modules/vscode-languageserver-types/package.json +1 -1
  19. package/node_modules/@mrclrchtr/supi-lsp/package.json +3 -3
  20. package/node_modules/@mrclrchtr/supi-lsp/src/api.ts +2 -0
  21. package/node_modules/@mrclrchtr/supi-lsp/src/client/client.ts +6 -0
  22. package/node_modules/@mrclrchtr/supi-lsp/src/config/server-config.ts +8 -0
  23. package/node_modules/@mrclrchtr/supi-lsp/src/config/types.ts +1 -0
  24. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager-project-info.ts +6 -3
  25. package/node_modules/@mrclrchtr/supi-lsp/src/manager/manager.ts +582 -26
  26. package/node_modules/@mrclrchtr/supi-lsp/src/provider/lsp-semantic-provider.ts +2 -3
  27. package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-diagnostic-surface.ts +10 -0
  28. package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-registry.ts +36 -9
  29. package/node_modules/@mrclrchtr/supi-lsp/src/session/runtime-transition-debug.ts +2 -0
  30. package/node_modules/@mrclrchtr/supi-lsp/src/session/workspace-lsp-runtime.ts +4 -2
  31. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/package.json +1 -1
  32. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/src/capability/types.ts +5 -0
  33. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/package.json +1 -1
  34. package/node_modules/@mrclrchtr/supi-tree-sitter/package.json +3 -3
  35. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/kotlin/tree-sitter-kotlin.wasm.json +1 -1
  36. package/node_modules/@mrclrchtr/supi-tree-sitter/resources/grammars/sql/tree-sitter-sql.wasm.json +1 -1
  37. package/package.json +5 -5
  38. package/src/analysis/health/recovery.ts +4 -0
  39. package/src/analysis/health/server-status.ts +64 -0
  40. package/src/analysis/health/signals.ts +1 -0
  41. package/src/analysis/provider.ts +2 -1
  42. package/src/analysis/target/symbol.ts +28 -16
  43. package/src/analysis/target/types.ts +1 -0
  44. package/src/session/find-workflow.ts +5 -12
  45. package/src/session/health-refresh.ts +6 -2
  46. package/src/session/health-types.ts +8 -2
  47. package/src/session/health-workflow.ts +5 -1
  48. package/src/session/semantic-demand.ts +36 -0
  49. package/src/session/target-workflow.ts +9 -12
  50. package/src/tool/code_health/guidance.ts +2 -2
  51. package/src/tool/code_health/markdown.ts +15 -3
  52. package/src/tool/code_health/result.ts +14 -5
  53. package/src/tool/code_health/spec.ts +2 -1
  54. package/src/tool/code_health/tui.ts +24 -3
  55. package/src/tool/result/errors.ts +1 -0
  56. package/src/tool/result/types.ts +6 -0
  57. package/src/ui/footer.ts +7 -5
  58. package/src/ui/status-command.ts +31 -0
  59. 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 detected languages, running or missing servers, and capability warnings:
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrclrchtr/supi-code-runtime",
3
- "version": "6.0.1",
3
+ "version": "6.1.0",
4
4
  "description": "Shared workspace context and capability contracts for code intelligence",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -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. */
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrclrchtr/supi-core",
3
- "version": "6.0.1",
3
+ "version": "6.1.0",
4
4
  "description": "Shared settings, configuration, reporting, and session infrastructure",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -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` and bounded attempted/restarted server names; a cancelled pass records the server names still running at cancellation, while restart identity requires the pass result. `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.
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
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrclrchtr/supi-code-runtime",
3
- "version": "6.0.1",
3
+ "version": "6.1.0",
4
4
  "description": "Shared workspace context and capability contracts for code intelligence",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -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. */
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrclrchtr/supi-core",
3
- "version": "6.0.1",
3
+ "version": "6.1.0",
4
4
  "description": "Shared settings, configuration, reporting, and session infrastructure",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vscode-jsonrpc",
3
3
  "description": "A json rpc implementation over streams",
4
- "version": "9.0.1",
4
+ "version": "9.0.2",
5
5
  "author": "Microsoft Corporation",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -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, WorkDoneProgressOptions & TextDocumentRegistrationOptions>;
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 - proposed
2781
+ * @since 3.18.0
2782
2782
  */
2783
2783
  tagSupport?: CodeActionTagOptions;
2784
2784
  }
2785
2785
  /**
2786
- * @since 3.18.0 - proposed
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 file:// URI for the location of the file/folder being created.
175
+ * A URI for the location of the file/folder being created.
176
176
  */
177
- uri: string;
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 file:// URI for the original location of the file/folder being renamed.
199
+ * A URI for the original location of the file/folder being renamed.
200
200
  */
201
- oldUri: string;
201
+ oldUri: DocumentUri;
202
202
  /**
203
- * A file:// URI for the new location of the file/folder being renamed.
203
+ * A URI for the new location of the file/folder being renamed.
204
204
  */
205
- newUri: string;
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 file:// URI for the location of the file/folder being deleted.
226
+ * A URI for the location of the file/folder being deleted.
227
227
  */
228
- uri: string;
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vscode-languageserver-protocol",
3
3
  "description": "VSCode Language Server Protocol implementation",
4
- "version": "3.18.2",
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.1",
31
- "vscode-languageserver-types": "3.18.0"
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",
@@ -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 - proposed
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 - proposed
2602
+ * @since 3.18.0
2603
2603
  */
2604
2604
  tags?: CodeActionTag[];
2605
2605
  }
@@ -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 - proposed
1761
+ * @since 3.18.0
1762
1762
  */
1763
1763
  export var CodeActionTag;
1764
1764
  (function (CodeActionTag) {
@@ -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 - proposed
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 - proposed
2602
+ * @since 3.18.0
2603
2603
  */
2604
2604
  tags?: CodeActionTag[];
2605
2605
  }
@@ -1790,7 +1790,7 @@
1790
1790
  /**
1791
1791
  * Code action tags are extra annotations that tweak the behavior of a code action.
1792
1792
  *
1793
- * @since 3.18.0 - proposed
1793
+ * @since 3.18.0
1794
1794
  */
1795
1795
  var CodeActionTag;
1796
1796
  (function (CodeActionTag) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vscode-languageserver-types",
3
3
  "description": "Types used by the Language server for node",
4
- "version": "3.18.0",
4
+ "version": "3.18.3",
5
5
  "author": "Microsoft Corporation",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrclrchtr/supi-lsp",
3
- "version": "6.0.1",
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.1",
41
- "@mrclrchtr/supi-core": "6.0.1"
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. */
@@ -84,5 +84,6 @@ export type {
84
84
  LspConfig,
85
85
  MissingServer,
86
86
  ProjectServerInfo,
87
+ ProjectServerStatusReason,
87
88
  ServerConfig,
88
89
  } from "./server-config.ts";
@@ -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
- input.client?.status === "running"
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,