dsh-lsp-actions 0.4.8 → 0.5.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/CHANGELOG.md +11 -0
- package/README.es.md +19 -1
- package/README.hi.md +19 -1
- package/README.md +19 -1
- package/README.pt.md +19 -1
- package/README.zh.md +19 -1
- package/cordis.patch.yml +5 -0
- package/docs/seam-extension-notes.md +1 -1
- package/examples/vscode/backend/cordis.yml +3 -0
- package/lib/host.d.ts +13 -4
- package/lib/host.d.ts.map +1 -1
- package/lib/host.js +16 -5
- package/lib/host.js.map +1 -1
- package/lib/index.d.ts +6 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +9 -5
- package/lib/index.js.map +1 -1
- package/lib/project.d.ts +32 -0
- package/lib/project.d.ts.map +1 -0
- package/lib/project.js +100 -0
- package/lib/project.js.map +1 -0
- package/lib/runner.d.ts +8 -2
- package/lib/runner.d.ts.map +1 -1
- package/lib/runner.js +36 -13
- package/lib/runner.js.map +1 -1
- package/lib/servers.d.ts +18 -6
- package/lib/servers.d.ts.map +1 -1
- package/lib/servers.js +33 -10
- package/lib/servers.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,17 @@ All notable changes to dsh-lsp-actions are documented here. The format follows
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.5.0] - 2026-09-10
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Project-config routing (`servers.<id>.projectMarkers`, issue #4): the nearest ancestor directory — walking up to the workspace root — that holds a configured project config file now decides which server serves a file, so sibling projects sharing an extension can use different servers. `["deno.json", "deno.jsonc"]` on the Deno entry and `["package.json", "tsconfig.json"]` on the TypeScript entry serve `apps/deno-app/src/main.ts` and `apps/node-app/src/main.ts` from their own servers with no path rule, and adding, renaming, or moving a project needs no configuration change. Routing order is `fileGlobs` → nearest project marker (matched only against entries that map the file's extension) → `extensionToLanguage`; the walk never leaves the workspace root, a project config never applies to a sibling directory, and an entry that declares no marker (the default) behaves exactly as before.
|
|
14
|
+
|
|
15
|
+
### Docs
|
|
16
|
+
|
|
17
|
+
- Document project-marker routing and its precedence in the five-language READMEs, and record the new `projectMarkers` key in `cordis.patch.yml` and `docs/seam-extension-notes.md`.
|
|
18
|
+
|
|
8
19
|
## [0.4.8] - 2026-09-10
|
|
9
20
|
|
|
10
21
|
### Changed
|
package/README.es.md
CHANGED
|
@@ -79,7 +79,25 @@ Todos los ajustes son campos Schemastery `Config` (modificables desde cordis.yml
|
|
|
79
79
|
| `maxDocumentBytes` | `4000000` | Tope de lectura de documento (bytes) |
|
|
80
80
|
| `timeoutMs` | `60000` | Timeout por llamada, aplicado por la política oficial de timeout |
|
|
81
81
|
|
|
82
|
-
Cada entrada de `servers` es un `LspServerEntry`: `command` (ejecutable resuelto en PATH al cargar) y `extensionToLanguage` (`".ts"` → `typescript`) son obligatorios; los opcionales `fileGlobs`, `args`, `env`, `initializationOptions`, `configuration`, `formattingOptions`, `maxMessageBytes`, `maxStderrBytes`, `killGraceMs`, `shutdownTimeoutMs`, `diagnosticsSettleMs`, `diagnosticsDebounceMs` e `idleTimeoutMs` (`0` = mantener vivo el proceso del servidor) ajustan el cliente stdio integrado.
|
|
82
|
+
Cada entrada de `servers` es un `LspServerEntry`: `command` (ejecutable resuelto en PATH al cargar) y `extensionToLanguage` (`".ts"` → `typescript`) son obligatorios; los opcionales `fileGlobs`, `projectMarkers`, `args`, `env`, `initializationOptions`, `configuration`, `formattingOptions`, `maxMessageBytes`, `maxStderrBytes`, `killGraceMs`, `shutdownTimeoutMs`, `diagnosticsSettleMs`, `diagnosticsDebounceMs` e `idleTimeoutMs` (`0` = mantener vivo el proceso del servidor) ajustan el cliente stdio integrado.
|
|
83
|
+
|
|
84
|
+
El enrutado es determinista y se rige por la configuración. Cada archivo toma la primera coincidencia de: **(1)** una entrada de `servers` cuyos `fileGlobs` coincidan con la ruta; **(2)** el directorio ancestro más cercano —subiendo hasta la raíz del workspace— que contenga un archivo de configuración de proyecto declarado en los `projectMarkers` de alguna entrada, evaluado solo entre las entradas que además mapean la extensión del archivo; **(3)** la entrada cuyo `extensionToLanguage` mapea la extensión del archivo, en orden de configuración. Así, un workspace con `apps/node-app/{package.json,tsconfig.json,src/main.ts}` y `apps/deno-app/{deno.json,src/main.ts}` sirve cada `main.ts` con el servidor de su propio proyecto: sin reglas de ruta que mantener y sin cambios al añadir, renombrar o mover un proyecto:
|
|
85
|
+
|
|
86
|
+
```yaml
|
|
87
|
+
servers:
|
|
88
|
+
typescript:
|
|
89
|
+
command: typescript-language-server
|
|
90
|
+
args: ["--stdio"]
|
|
91
|
+
extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
|
|
92
|
+
projectMarkers: ["package.json", "tsconfig.json"]
|
|
93
|
+
deno:
|
|
94
|
+
command: deno
|
|
95
|
+
args: ["lsp"]
|
|
96
|
+
extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
|
|
97
|
+
projectMarkers: ["deno.json", "deno.jsonc"]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Un marcador de proyecto solo decide entre servidores que ya mapean la extensión del archivo (nunca amplía los tipos de archivo de una entrada); la búsqueda nunca sale de la raíz del workspace, y la configuración de proyecto de un directorio nunca se aplica a un directorio hermano. El paso **(1)** tiene prioridad sobre un marcador de proyecto: si los `fileGlobs` de una entrada coinciden con la ruta, esa entrada sigue ganando, así que elimina los globs de nivel de proyecto al adoptar `projectMarkers`; un glob `**/*.ts` persistente seguirá reclamando esos archivos. Estas reglas rigen el cliente stdio integrado; un provider del seam `ctx.lsp` montado decide su propio enrutado.
|
|
83
101
|
|
|
84
102
|
## Tools & surfaces
|
|
85
103
|
|
package/README.hi.md
CHANGED
|
@@ -79,7 +79,25 @@ dsh --profile web --dump-config | grep -A3 'id: lsp-actions'
|
|
|
79
79
|
| `maxDocumentBytes` | `4000000` | दस्तावेज़-पठन सीमा (बाइट) |
|
|
80
80
|
| `timeoutMs` | `60000` | प्रति-कॉल timeout, आधिकारिक timeout नीति द्वारा लागू |
|
|
81
81
|
|
|
82
|
-
हर `servers` एंट्री एक `LspServerEntry` है: `command` (निष्पादन योग्य, लोड पर PATH में हल) और `extensionToLanguage` (`".ts"` → `typescript`) अनिवार्य हैं; वैकल्पिक `fileGlobs`, `args`, `env`, `initializationOptions`, `configuration`, `formattingOptions`, `maxMessageBytes`, `maxStderrBytes`, `killGraceMs`, `shutdownTimeoutMs`, `diagnosticsSettleMs`, `diagnosticsDebounceMs` और `idleTimeoutMs` (`0` = server प्रक्रिया को जीवित रखें) अंतर्निहित stdio क्लाइंट को ट्यून करते हैं।
|
|
82
|
+
हर `servers` एंट्री एक `LspServerEntry` है: `command` (निष्पादन योग्य, लोड पर PATH में हल) और `extensionToLanguage` (`".ts"` → `typescript`) अनिवार्य हैं; वैकल्पिक `fileGlobs`, `projectMarkers`, `args`, `env`, `initializationOptions`, `configuration`, `formattingOptions`, `maxMessageBytes`, `maxStderrBytes`, `killGraceMs`, `shutdownTimeoutMs`, `diagnosticsSettleMs`, `diagnosticsDebounceMs` और `idleTimeoutMs` (`0` = server प्रक्रिया को जीवित रखें) अंतर्निहित stdio क्लाइंट को ट्यून करते हैं।
|
|
83
|
+
|
|
84
|
+
रूटिंग नियतात्मक है और पूरी तरह कॉन्फ़िगरेशन से तय होती है। हर फ़ाइल पहला मेल इस क्रम में लेती है: **(1)** किसी एंट्री के `fileGlobs` उस पथ से मेल खाते हों; **(2)** फ़ाइल की डायरेक्टरी से workspace रूट तक ऊपर जाते हुए सबसे निकट वह डायरेक्टरी जिसमें किसी एंट्री के `projectMarkers` में सूचीबद्ध प्रोजेक्ट कॉन्फ़िग फ़ाइल मौजूद हो — और वह एंट्री फ़ाइल का एक्सटेंशन भी मैप करती हो; **(3)** कॉन्फ़िग क्रम में वह एंट्री जिसका `extensionToLanguage` फ़ाइल का एक्सटेंशन मैप करता हो। इसलिए एक ही workspace में `apps/node-app/{package.json,tsconfig.json,src/main.ts}` और `apps/deno-app/{deno.json,src/main.ts}` रखने पर हर `main.ts` अपने ही प्रोजेक्ट के server से सर्व होती है: कोई पथ-नियम बनाए रखने की ज़रूरत नहीं, और प्रोजेक्ट जोड़ने, नाम बदलने या हटाने पर कुछ भी बदलना नहीं पड़ता:
|
|
85
|
+
|
|
86
|
+
```yaml
|
|
87
|
+
servers:
|
|
88
|
+
typescript:
|
|
89
|
+
command: typescript-language-server
|
|
90
|
+
args: ["--stdio"]
|
|
91
|
+
extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
|
|
92
|
+
projectMarkers: ["package.json", "tsconfig.json"]
|
|
93
|
+
deno:
|
|
94
|
+
command: deno
|
|
95
|
+
args: ["lsp"]
|
|
96
|
+
extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
|
|
97
|
+
projectMarkers: ["deno.json", "deno.jsonc"]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
प्रोजेक्ट मार्कर केवल उन्हीं servers में चुनाव करता है जो फ़ाइल का एक्सटेंशन पहले से मैप करते हैं (यह किसी एंट्री के फ़ाइल-प्रकार कभी नहीं बढ़ाता); खोज कभी workspace रूट से बाहर नहीं जाती, और किसी डायरेक्टरी का प्रोजेक्ट कॉन्फ़िग कभी उसकी सहोदर डायरेक्टरी पर लागू नहीं होता। चरण **(1)** प्रोजेक्ट मार्कर से ऊपर है: यदि किसी एंट्री के `fileGlobs` पथ से मेल खाते हैं तो वही जीतती है, इसलिए `projectMarkers` अपनाते समय प्रोजेक्ट-स्तर के globs हटा दें — बचा हुआ `**/*.ts` glob उन फ़ाइलों पर दावा करता रहेगा। ये नियम अंतर्निहित stdio क्लाइंट पर लागू हैं; माउंट किया गया `ctx.lsp` seam provider अपनी रूटिंग स्वयं तय करता है।
|
|
83
101
|
|
|
84
102
|
## Tools & surfaces
|
|
85
103
|
|
package/README.md
CHANGED
|
@@ -80,7 +80,25 @@ All tunables are Schemastery `Config` fields (changeable from cordis.yml). An id
|
|
|
80
80
|
| `maxDocumentBytes` | `4000000` | Document-read cap (bytes) |
|
|
81
81
|
| `timeoutMs` | `60000` | Per-call timeout, enforced by the official timeout policy |
|
|
82
82
|
|
|
83
|
-
Each `servers` entry is an `LspServerEntry`: `command` (executable resolved on PATH at load) and `extensionToLanguage` (`".ts"` → `typescript`) are required; optional `fileGlobs`, `args`, `env`, `initializationOptions`, `configuration`, `formattingOptions`, `maxMessageBytes`, `maxStderrBytes`, `killGraceMs`, `shutdownTimeoutMs`, `diagnosticsSettleMs`, `diagnosticsDebounceMs`, and `idleTimeoutMs` (`0` = keep the server process alive) tune the built-in stdio client.
|
|
83
|
+
Each `servers` entry is an `LspServerEntry`: `command` (executable resolved on PATH at load) and `extensionToLanguage` (`".ts"` → `typescript`) are required; optional `fileGlobs`, `projectMarkers`, `args`, `env`, `initializationOptions`, `configuration`, `formattingOptions`, `maxMessageBytes`, `maxStderrBytes`, `killGraceMs`, `shutdownTimeoutMs`, `diagnosticsSettleMs`, `diagnosticsDebounceMs`, and `idleTimeoutMs` (`0` = keep the server process alive) tune the built-in stdio client.
|
|
84
|
+
|
|
85
|
+
Routing is deterministic and configuration-driven. Every file takes the first match from: **(1)** a server entry whose `fileGlobs` match the path; **(2)** the nearest ancestor directory — walking up to the workspace root — that holds a project config file listed in some entry's `projectMarkers`, matched against the entries that also map the file's extension; **(3)** the entry whose `extensionToLanguage` maps the file's extension, in config order. A workspace holding `apps/node-app/{package.json,tsconfig.json,src/main.ts}` and `apps/deno-app/{deno.json,src/main.ts}` therefore serves each `main.ts` from its own project's server, with no path rule to maintain and nothing to change when a project is added, renamed, or moved:
|
|
86
|
+
|
|
87
|
+
```yaml
|
|
88
|
+
servers:
|
|
89
|
+
typescript:
|
|
90
|
+
command: typescript-language-server
|
|
91
|
+
args: ["--stdio"]
|
|
92
|
+
extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
|
|
93
|
+
projectMarkers: ["package.json", "tsconfig.json"]
|
|
94
|
+
deno:
|
|
95
|
+
command: deno
|
|
96
|
+
args: ["lsp"]
|
|
97
|
+
extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
|
|
98
|
+
projectMarkers: ["deno.json", "deno.jsonc"]
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
A project marker only decides among servers that already map the file's extension (it never widens an entry's file types); the walk never leaves the workspace root, and a project config in one directory never applies to a sibling directory. Step **(1)** outranks a project marker: an entry whose `fileGlobs` match the path still wins, so drop project-level globs when you adopt `projectMarkers` — a lingering `**/*.ts` glob keeps claiming those files. These rules govern the built-in stdio client — a mounted `ctx.lsp` seam provider decides its own routing.
|
|
84
102
|
|
|
85
103
|
## Tools & surfaces
|
|
86
104
|
|
package/README.pt.md
CHANGED
|
@@ -79,7 +79,25 @@ Todos os ajustes são campos Schemastery `Config` (alteráveis pelo cordis.yml).
|
|
|
79
79
|
| `maxDocumentBytes` | `4000000` | Teto de leitura de documento (bytes) |
|
|
80
80
|
| `timeoutMs` | `60000` | Timeout por chamada, aplicado pela política oficial de timeout |
|
|
81
81
|
|
|
82
|
-
Cada entrada de `servers` é um `LspServerEntry`: `command` (executável resolvido no PATH no carregamento) e `extensionToLanguage` (`".ts"` → `typescript`) são obrigatórios; os opcionais `fileGlobs`, `args`, `env`, `initializationOptions`, `configuration`, `formattingOptions`, `maxMessageBytes`, `maxStderrBytes`, `killGraceMs`, `shutdownTimeoutMs`, `diagnosticsSettleMs`, `diagnosticsDebounceMs` e `idleTimeoutMs` (`0` = manter vivo o processo do servidor) ajustam o cliente stdio integrado.
|
|
82
|
+
Cada entrada de `servers` é um `LspServerEntry`: `command` (executável resolvido no PATH no carregamento) e `extensionToLanguage` (`".ts"` → `typescript`) são obrigatórios; os opcionais `fileGlobs`, `projectMarkers`, `args`, `env`, `initializationOptions`, `configuration`, `formattingOptions`, `maxMessageBytes`, `maxStderrBytes`, `killGraceMs`, `shutdownTimeoutMs`, `diagnosticsSettleMs`, `diagnosticsDebounceMs` e `idleTimeoutMs` (`0` = manter vivo o processo do servidor) ajustam o cliente stdio integrado.
|
|
83
|
+
|
|
84
|
+
O roteamento é determinístico e guiado pela configuração. Cada arquivo usa a primeira correspondência de: **(1)** uma entrada de `servers` cujos `fileGlobs` correspondam ao caminho; **(2)** o diretório ancestral mais próximo — subindo até a raiz do workspace — que contenha um arquivo de configuração de projeto declarado nos `projectMarkers` de alguma entrada, avaliado apenas entre as entradas que também mapeiam a extensão do arquivo; **(3)** a entrada cujo `extensionToLanguage` mapeia a extensão do arquivo, na ordem de configuração. Assim, um workspace com `apps/node-app/{package.json,tsconfig.json,src/main.ts}` e `apps/deno-app/{deno.json,src/main.ts}` serve cada `main.ts` com o servidor do seu próprio projeto: sem regras de caminho para manter e sem mudanças ao adicionar, renomear ou mover um projeto:
|
|
85
|
+
|
|
86
|
+
```yaml
|
|
87
|
+
servers:
|
|
88
|
+
typescript:
|
|
89
|
+
command: typescript-language-server
|
|
90
|
+
args: ["--stdio"]
|
|
91
|
+
extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
|
|
92
|
+
projectMarkers: ["package.json", "tsconfig.json"]
|
|
93
|
+
deno:
|
|
94
|
+
command: deno
|
|
95
|
+
args: ["lsp"]
|
|
96
|
+
extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
|
|
97
|
+
projectMarkers: ["deno.json", "deno.jsonc"]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Um marcador de projeto só decide entre servidores que já mapeiam a extensão do arquivo (nunca amplia os tipos de arquivo de uma entrada); a busca nunca sai da raiz do workspace, e a configuração de projeto de um diretório nunca se aplica a um diretório irmão. O passo **(1)** tem prioridade sobre um marcador de projeto: se os `fileGlobs` de uma entrada correspondem ao caminho, ela continua vencendo, então remova os globs de nível de projeto ao adotar `projectMarkers`; um glob `**/*.ts` remanescente continuará reivindicando esses arquivos. Estas regras regem o cliente stdio integrado; um provider do seam `ctx.lsp` montado decide seu próprio roteamento.
|
|
83
101
|
|
|
84
102
|
## Tools & surfaces
|
|
85
103
|
|
package/README.zh.md
CHANGED
|
@@ -79,7 +79,25 @@ dsh --profile web --dump-config | grep -A3 'id: lsp-actions'
|
|
|
79
79
|
| `maxDocumentBytes` | `4000000` | 文档读取上限(字节数) |
|
|
80
80
|
| `timeoutMs` | `60000` | 每次调用的超时,由官方 timeout 策略执行 |
|
|
81
81
|
|
|
82
|
-
每个 `servers` 条目都是一个 `LspServerEntry`:`command`(可执行文件,加载期在 PATH 上解析)与 `extensionToLanguage`(`".ts"` → `typescript`)为必填;可选的 `fileGlobs`、`args`、`env`、`initializationOptions`、`configuration`、`formattingOptions`、`maxMessageBytes`、`maxStderrBytes`、`killGraceMs`、`shutdownTimeoutMs`、`diagnosticsSettleMs`、`diagnosticsDebounceMs` 与 `idleTimeoutMs`(`0` = 保持服务器进程存活)用于调校内置 stdio 客户端。
|
|
82
|
+
每个 `servers` 条目都是一个 `LspServerEntry`:`command`(可执行文件,加载期在 PATH 上解析)与 `extensionToLanguage`(`".ts"` → `typescript`)为必填;可选的 `fileGlobs`、`projectMarkers`、`args`、`env`、`initializationOptions`、`configuration`、`formattingOptions`、`maxMessageBytes`、`maxStderrBytes`、`killGraceMs`、`shutdownTimeoutMs`、`diagnosticsSettleMs`、`diagnosticsDebounceMs` 与 `idleTimeoutMs`(`0` = 保持服务器进程存活)用于调校内置 stdio 客户端。
|
|
83
|
+
|
|
84
|
+
路由是确定性的,且完全由配置决定。每个文件按以下顺序取第一个命中:**(1)** 某条目的 `fileGlobs` 匹配该路径;**(2)** 从文件所在目录向上走到工作区根,最近的、含有某个条目 `projectMarkers` 所列工程配置文件的目录——且该条目同时映射该文件的扩展名;**(3)** 按配置顺序,`extensionToLanguage` 映射该扩展名的条目。因此同一工作区内的 `apps/node-app/{package.json,tsconfig.json,src/main.ts}` 与 `apps/deno-app/{deno.json,src/main.ts}` 会各自用本工程的服务器处理 `main.ts`:无需维护任何路径规则,新增、改名或移动工程也不必改动配置:
|
|
85
|
+
|
|
86
|
+
```yaml
|
|
87
|
+
servers:
|
|
88
|
+
typescript:
|
|
89
|
+
command: typescript-language-server
|
|
90
|
+
args: ["--stdio"]
|
|
91
|
+
extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
|
|
92
|
+
projectMarkers: ["package.json", "tsconfig.json"]
|
|
93
|
+
deno:
|
|
94
|
+
command: deno
|
|
95
|
+
args: ["lsp"]
|
|
96
|
+
extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
|
|
97
|
+
projectMarkers: ["deno.json", "deno.jsonc"]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
工程标记只在该文件扩展名已被若干服务器映射的前提下做选择(绝不会扩大某个服务器的文件类型范围);向上查找永不越过工作区根;某个目录里的工程配置绝不会作用于同级目录。第 **(1)** 步优先于工程标记:若某条目的 `fileGlobs` 命中该路径,仍以它为准——采用 `projectMarkers` 时请一并删掉项目级的 glob,否则残留的 `**/*.ts` 会继续把这些文件抢走。以上规则作用于内置 stdio 客户端;挂载的 `ctx.lsp` seam provider 自行决定路由。
|
|
83
101
|
|
|
84
102
|
## Tools & surfaces
|
|
85
103
|
|
package/cordis.patch.yml
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# LSP action surface: diagnostics, formatting, completion, code actions, symbols, signature
|
|
2
2
|
# help, inlay hints, and rename over language servers.
|
|
3
3
|
# Default config activates no servers (empty table); add one entry per language server.
|
|
4
|
+
# Each servers entry: command + extensionToLanguage (required); optional fileGlobs (path rules),
|
|
5
|
+
# projectMarkers (project config file names — e.g. ["deno.json","deno.jsonc"] or
|
|
6
|
+
# ["package.json","tsconfig.json"] — a file routes to the entry owning its nearest ancestor
|
|
7
|
+
# marker, so sibling projects sharing an extension can use different servers), args, env,
|
|
8
|
+
# initializationOptions, configuration, formattingOptions, and the client's bound/timer keys.
|
|
4
9
|
# editor.enabled: false keeps the IDE integration backend off (Web/CLI profiles own stdio);
|
|
5
10
|
# enable it only in a dedicated headless backend composition (see examples/vscode/backend).
|
|
6
11
|
- insert:
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
| `lsp_format` 写入过 fs 意图事件与权限检查 | 读后 `fs/observed`(present+version)→ `fs/write-intent` waterfall 取意图 → `ctx.fs.writeText(..., intent, signal, sandboxPolicy)` → 写后 `fs/observed` |
|
|
59
59
|
| read-only sandbox 拒绝写入(fail loud 结构化) | 见下 §4.1 |
|
|
60
60
|
| 诊断/补全不落持久层、不跨会话缓存 | 工具结果只进会话日志(模型历史本身);无任何磁盘/内存缓存;不提供 cache 开关(更严格地满足"除非 Config 显式开启") |
|
|
61
|
-
| `servers` 配置形态与官方对齐 | `command`/`args`/`env`/`extensionToLanguage`/`initializationOptions`/`configuration`/字节上限/计时器字段与 `lsp-stdio` 同名同默认;另加 `fileGlobs`(glob
|
|
61
|
+
| `servers` 配置形态与官方对齐 | `command`/`args`/`env`/`extensionToLanguage`/`initializationOptions`/`configuration`/字节上限/计时器字段与 `lsp-stdio` 同名同默认;另加 `fileGlobs`(glob 优先于扩展名)、`projectMarkers`(按目标文件最近的祖先工程配置文件路由:`deno.json`/`deno.jsonc` → Deno、`package.json`/`tsconfig.json` → TypeScript 等,见 `src/project.ts`;优先于扩展名、次于 glob,范围以 workspace 根为界)与 `formattingOptions`/`diagnosticsSettleMs`;`maxDocumentBytes` 因读取发生在上具层而提升为插件级 Config(文档已注明偏差) |
|
|
62
62
|
|
|
63
63
|
### 4.1 权限矩阵(`lsp_format` / `lsp_rename`)
|
|
64
64
|
|
|
@@ -50,4 +50,7 @@
|
|
|
50
50
|
args: [--stdio]
|
|
51
51
|
extensionToLanguage:
|
|
52
52
|
".ts": typescript
|
|
53
|
+
# Project-config routing: a file whose nearest ancestor holds one of these markers is
|
|
54
|
+
# served here even when another entry also maps the extension (see the README).
|
|
55
|
+
projectMarkers: [package.json, tsconfig.json]
|
|
53
56
|
formattingOptions: { tabSize: 2, insertSpaces: true }
|
package/lib/host.d.ts
CHANGED
|
@@ -51,14 +51,23 @@ export declare function normalizeFileUri(uri: string): string;
|
|
|
51
51
|
export declare function decodeFileUri(uri: string): string;
|
|
52
52
|
/**
|
|
53
53
|
* The workspace-relative path one document URI points at, when the URI lies under the canonical
|
|
54
|
-
* workspace URI.
|
|
55
|
-
* percent-encoded colons on Windows, a trailing slash on either side), so containment is judged on
|
|
56
|
-
* decoded, case-insensitive forms while the relative path itself is sliced from the decoded URI —
|
|
57
|
-
* a normalized string can differ in length from the raw one, which would shift the cut.
|
|
54
|
+
* workspace URI.
|
|
58
55
|
* @param workspace - the canonical workspace.
|
|
59
56
|
* @param uri - the document URI the server named.
|
|
60
57
|
* @returns the relative path (`.` for the workspace root itself), or undefined when the URI does
|
|
61
58
|
* not fall under the workspace.
|
|
62
59
|
*/
|
|
63
60
|
export declare function workspaceRelativePath(workspace: HostWorkspace, uri: string): string | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* The `/`-separated path one document URI points at under a root URI. Servers re-spell the root
|
|
63
|
+
* URI sent at `initialize` (lowercase drive letters and percent-encoded colons on Windows, a
|
|
64
|
+
* trailing slash on either side), so containment is judged on decoded, case-insensitive forms
|
|
65
|
+
* while the relative path itself is sliced from the decoded URI — a normalized string can differ
|
|
66
|
+
* in length from the raw one, which would shift the cut.
|
|
67
|
+
* @param rootUri - canonical URI of the containing root (workspace, project, …).
|
|
68
|
+
* @param uri - the document URI to relativize.
|
|
69
|
+
* @returns the relative, `/`-separated path (`.` for the root itself), or undefined when the URI
|
|
70
|
+
* does not fall under `rootUri`.
|
|
71
|
+
*/
|
|
72
|
+
export declare function relativeUnderRootUri(rootUri: string, uri: string): string | undefined;
|
|
64
73
|
//# sourceMappingURL=host.d.ts.map
|
package/lib/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE/D,0EAA0E;AAC1E,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IACzB,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,8FAA8F;IAC9F,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,qBAAqB,EAAE,SAAS,CAAA;CAC3D;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,UAAU,EACd,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,CAuBxB;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,UAAU,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,aAAa,EACxB,gBAAgB,EAAE,MAAM,EACxB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA+CrB;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAEpE;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,gGAAgG;AAChG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQjD;AASD
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE/D,0EAA0E;AAC1E,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IACzB,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,8FAA8F;IAC9F,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,qBAAqB,EAAE,SAAS,CAAA;CAC3D;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,UAAU,EACd,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,CAuBxB;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,UAAU,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,aAAa,EACxB,gBAAgB,EAAE,MAAM,EACxB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA+CrB;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAEpE;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,gGAAgG;AAChG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQjD;AASD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE/F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQrF"}
|
package/lib/host.js
CHANGED
|
@@ -126,17 +126,28 @@ function foldFileUri(uri) {
|
|
|
126
126
|
}
|
|
127
127
|
/**
|
|
128
128
|
* The workspace-relative path one document URI points at, when the URI lies under the canonical
|
|
129
|
-
* workspace URI.
|
|
130
|
-
* percent-encoded colons on Windows, a trailing slash on either side), so containment is judged on
|
|
131
|
-
* decoded, case-insensitive forms while the relative path itself is sliced from the decoded URI —
|
|
132
|
-
* a normalized string can differ in length from the raw one, which would shift the cut.
|
|
129
|
+
* workspace URI.
|
|
133
130
|
* @param workspace - the canonical workspace.
|
|
134
131
|
* @param uri - the document URI the server named.
|
|
135
132
|
* @returns the relative path (`.` for the workspace root itself), or undefined when the URI does
|
|
136
133
|
* not fall under the workspace.
|
|
137
134
|
*/
|
|
138
135
|
export function workspaceRelativePath(workspace, uri) {
|
|
139
|
-
|
|
136
|
+
return relativeUnderRootUri(workspace.fileUrl, uri);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* The `/`-separated path one document URI points at under a root URI. Servers re-spell the root
|
|
140
|
+
* URI sent at `initialize` (lowercase drive letters and percent-encoded colons on Windows, a
|
|
141
|
+
* trailing slash on either side), so containment is judged on decoded, case-insensitive forms
|
|
142
|
+
* while the relative path itself is sliced from the decoded URI — a normalized string can differ
|
|
143
|
+
* in length from the raw one, which would shift the cut.
|
|
144
|
+
* @param rootUri - canonical URI of the containing root (workspace, project, …).
|
|
145
|
+
* @param uri - the document URI to relativize.
|
|
146
|
+
* @returns the relative, `/`-separated path (`.` for the root itself), or undefined when the URI
|
|
147
|
+
* does not fall under `rootUri`.
|
|
148
|
+
*/
|
|
149
|
+
export function relativeUnderRootUri(rootUri, uri) {
|
|
150
|
+
const root = decodeFileUri(rootUri);
|
|
140
151
|
const decoded = decodeFileUri(uri);
|
|
141
152
|
const identity = (candidate) => process.platform === 'win32' ? candidate.toLowerCase() : candidate;
|
|
142
153
|
if (identity(decoded) === identity(root))
|
package/lib/host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAyBpC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,EAAc,EACd,aAAqB,EACrB,MAAoB;IAEpB,cAAc,CAAC,MAAM,CAAC,CAAA;IACtB,IAAI,MAAgB,CAAA;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAClF,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,cAAc,CAAC,MAAM,CAAC,CAAA;QACtB,MAAM,IAAI,KAAK,CAAC,mBAAmB,aAAa,yBAAyB,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAChH,CAAC;IACD,cAAc,CAAC,MAAM,CAAC,CAAA;IACtB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAClE,cAAc,CAAC,MAAM,CAAC,CAAA;QACtB,MAAM,KAAK,CAAA;IACb,CAAC,CAAC,CAAA;IACF,cAAc,CAAC,MAAM,CAAC,CAAA;IACtB,IAAI,IAAI,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,mBAAmB,aAAa,sBAAsB,CAAC,CAAA;IACzE,CAAC;IACD,OAAO;QACL,MAAM;QACN,aAAa,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;QACrC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;KAC5B,CAAA;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAc,EACd,QAAgB,EAChB,SAAwB,EACxB,gBAAwB,EACxB,MAAoB;IAEpB,cAAc,CAAC,MAAM,CAAC,CAAA;IACtB,IAAI,MAAgB,CAAA;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE;YAClC,GAAG,EAAE,SAAS,CAAC,aAAa;YAC5B,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE;SAC1C,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,cAAc,CAAC,MAAM,CAAC,CAAA;QACtB,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,yBAAyB,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IACnG,CAAC;IACD,cAAc,CAAC,MAAM,CAAC,CAAA;IACtB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,kCAAkC,CAAC,CAAA;IACxE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAClE,cAAc,CAAC,MAAM,CAAC,CAAA;QACtB,MAAM,KAAK,CAAA;IACb,CAAC,CAAC,CAAA;IACF,cAAc,CAAC,MAAM,CAAC,CAAA;IACtB,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAClD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,cAAc,CAAC,MAAM,CAAC,CAAA;YACtB,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YACjC,IAAI,KAAK,GAAG,gBAAgB;gBAAE,MAAK;YACnC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,cAAc,CAAC,MAAM,CAAC,CAAA;QACtB,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,wBAAwB,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAClG,CAAC;IACD,IAAI,KAAK,GAAG,gBAAgB,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,WAAW,QAAQ,iBAAiB,gBAAgB,sCAAsC,KAAK,QAAQ,CACxG,CAAA;IACH,CAAC;IACD,cAAc,CAAC,MAAM,CAAC,CAAA;IACtB,OAAO;QACL,MAAM;QACN,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QAC3B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;KACvD,CAAA;AACH,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,cAAc,CAAC,MAA+B;IAC5D,IAAI,MAAM,EAAE,OAAO;QAAE,MAAM,MAAM,CAAC,MAAM,CAAA;AAC1C,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;AACxC,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QACxB,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO;YAAE,OAAO,GAAG,CAAA;QACxC,OAAO,UAAU,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAA;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAA;IACZ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,GAAG,CAAA;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAA;IACxB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,CAAA;IACvC,OAAO,GAAG,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAA;AAC7D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAwB,EAAE,GAAW;IACzE,OAAO,oBAAoB,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AACrD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,GAAW;IAC/D,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACnC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IAClC,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAU,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAClH,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,CAAA;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAA;IACrD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IACrE,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACrC,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC/D,CAAC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export { EDITOR_PROTOCOL } from './editor/types.js';
|
|
|
29
29
|
export { encodeMessage, MessageDecoder } from './framing.js';
|
|
30
30
|
export { formatAppliedEdits, formatCodeActions, formatCompletionList, formatDiagnostics, formatInlayHints, formatRenameResult, formatSignatures, formatSymbols, presentLspCodeActionCall, presentLspCodeActionResult, presentLspCompletionCall, presentLspCompletionResult, presentLspDiagnosticsCall, presentLspDiagnosticsResult, presentLspFormatCall, presentLspFormatResult, presentLspInlayHintsCall, presentLspInlayHintsResult, presentLspRenameCall, presentLspRenameResult, presentLspSignatureCall, presentLspSignatureResult, presentLspSymbolsCall, presentLspSymbolsResult, symbolKindLabel, } from './render.js';
|
|
31
31
|
export { globToRegExp, routeFile, resolveServers, } from './servers.js';
|
|
32
|
+
export { configuredProjectMarkers, findProjectMarker, } from './project.js';
|
|
32
33
|
export { decodeTextEdits, negotiatePositionEncoding, normalizeCodeActions, normalizeCompletionItems, normalizeDiagnostics, normalizeEdits, normalizeInlayHints, normalizeSignatures, normalizeSymbols, normalizeWorkspaceEdit, PositionCodec, requestMethod, supportsAction, supportsPullDiagnostics, supportsTransientOpen, } from './translate.js';
|
|
33
34
|
/** Cordis plugin name for loader diagnostics. */
|
|
34
35
|
export declare const name = "lsp-actions";
|
|
@@ -39,10 +40,11 @@ export declare const Config: import("@deepseek-ai/schemastery").default<ConfigSc
|
|
|
39
40
|
/**
|
|
40
41
|
* Register the eight LSP action tools. Resolves every configured server executable at load (fail
|
|
41
42
|
* loud on a missing command) before registering anything; tool, client, and server lifecycles are
|
|
42
|
-
* effect-scoped, so disposal unregisters the tools and tears down every live server.
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
43
|
+
* effect-scoped, so disposal unregisters the tools and tears down every live server. Files route
|
|
44
|
+
* by `fileGlobs`, then by the nearest project marker a server entry declares (`projectMarkers`),
|
|
45
|
+
* then by the extension map. The official seam is resolved lazily per call (see the runner), so
|
|
46
|
+
* registration is independent of the seam's load order; without servers and without a seam, calls
|
|
47
|
+
* fail loudly with `LSP_ACTION_UNAVAILABLE` instead of the plugin silently contributing nothing.
|
|
46
48
|
* @param ctx - the plugin context (must inject `tools`, `fs`, `subprocess`).
|
|
47
49
|
* @param config - the resolved plugin configuration.
|
|
48
50
|
*/
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAOlD,OAAO,EAAsC,MAAM,IAAI,YAAY,EAAkB,MAAM,cAAc,CAAA;AACzG,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAuC,MAAM,cAAc,CAAA;AAG7F,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,gBAAgB,EAChB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACrH,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,YAAY,EACV,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GAClB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,GAChB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,YAAY,EACZ,SAAS,EACT,cAAc,GACf,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AAEvB,iDAAiD;AACjD,eAAO,MAAM,IAAI,gBAAgB,CAAA;AAEjC,wCAAwC;AACxC,eAAO,MAAM,MAAM,UAAgC,CAAA;AAGnD,qGAAqG;AACrG,eAAO,MAAM,MAAM,0DAAe,CAAA;AAElC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -29,6 +29,7 @@ export { EDITOR_PROTOCOL } from "./editor/types.js";
|
|
|
29
29
|
export { encodeMessage, MessageDecoder } from "./framing.js";
|
|
30
30
|
export { formatAppliedEdits, formatCodeActions, formatCompletionList, formatDiagnostics, formatInlayHints, formatRenameResult, formatSignatures, formatSymbols, presentLspCodeActionCall, presentLspCodeActionResult, presentLspCompletionCall, presentLspCompletionResult, presentLspDiagnosticsCall, presentLspDiagnosticsResult, presentLspFormatCall, presentLspFormatResult, presentLspInlayHintsCall, presentLspInlayHintsResult, presentLspRenameCall, presentLspRenameResult, presentLspSignatureCall, presentLspSignatureResult, presentLspSymbolsCall, presentLspSymbolsResult, symbolKindLabel, } from "./render.js";
|
|
31
31
|
export { globToRegExp, routeFile, resolveServers, } from "./servers.js";
|
|
32
|
+
export { configuredProjectMarkers, findProjectMarker, } from "./project.js";
|
|
32
33
|
export { decodeTextEdits, negotiatePositionEncoding, normalizeCodeActions, normalizeCompletionItems, normalizeDiagnostics, normalizeEdits, normalizeInlayHints, normalizeSignatures, normalizeSymbols, normalizeWorkspaceEdit, PositionCodec, requestMethod, supportsAction, supportsPullDiagnostics, supportsTransientOpen, } from "./translate.js";
|
|
33
34
|
/** Cordis plugin name for loader diagnostics. */
|
|
34
35
|
export const name = 'lsp-actions';
|
|
@@ -40,10 +41,11 @@ export const Config = ConfigSchema;
|
|
|
40
41
|
/**
|
|
41
42
|
* Register the eight LSP action tools. Resolves every configured server executable at load (fail
|
|
42
43
|
* loud on a missing command) before registering anything; tool, client, and server lifecycles are
|
|
43
|
-
* effect-scoped, so disposal unregisters the tools and tears down every live server.
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
44
|
+
* effect-scoped, so disposal unregisters the tools and tears down every live server. Files route
|
|
45
|
+
* by `fileGlobs`, then by the nearest project marker a server entry declares (`projectMarkers`),
|
|
46
|
+
* then by the extension map. The official seam is resolved lazily per call (see the runner), so
|
|
47
|
+
* registration is independent of the seam's load order; without servers and without a seam, calls
|
|
48
|
+
* fail loudly with `LSP_ACTION_UNAVAILABLE` instead of the plugin silently contributing nothing.
|
|
47
49
|
* @param ctx - the plugin context (must inject `tools`, `fs`, `subprocess`).
|
|
48
50
|
* @param config - the resolved plugin configuration.
|
|
49
51
|
*/
|
|
@@ -80,7 +82,9 @@ export async function apply(ctx, config) {
|
|
|
80
82
|
// apply-time snapshot — the seam may load after this plugin or be re-added mid-session.
|
|
81
83
|
// Consumer — resolves the optional ctx.lsp seam lazily and drives the stdio client over ctx.subprocess/ctx.fs per call.
|
|
82
84
|
const getSeam = () => ctx.get('lsp');
|
|
83
|
-
|
|
85
|
+
// The fs seam drives project-marker routing: a file whose nearest ancestor holds a marker some
|
|
86
|
+
// entry declares (`projectMarkers`) is served by that entry instead of the extension default.
|
|
87
|
+
const runner = createActionRunner({ getSeam, client, servers, fs: ctx.fs });
|
|
84
88
|
// Service Provider — registers the eight LSP action tools plus the optional editor JSON-RPC transport through a scoped ctx.effect.
|
|
85
89
|
ctx.effect(() => {
|
|
86
90
|
registerDiagnosticsTool(ctx, runner, resolved);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC7H,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAEtD,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,IAAI,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAEzG,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAsBhD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAkBrH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,GAChB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,YAAY,EACZ,SAAS,EACT,cAAc,GACf,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AAEvB,iDAAiD;AACjD,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAA;AAEjC,wCAAwC;AACxC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAA;AAEnD,0IAA0I;AAC1I,qGAAqG;AACrG,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAA;AAElC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/project.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project-config detection for routing: which configured marker file (if any) governs a source
|
|
3
|
+
* file. The walk starts at the file's own directory and climbs to the workspace root, so one
|
|
4
|
+
* extension can be served by different language servers in sibling projects — a `deno.json`
|
|
5
|
+
* project next to a `package.json` project — with no hard-coded path rule and no cross-project
|
|
6
|
+
* bleed: only the nearest ancestor that holds a *configured* marker claims the file, and the
|
|
7
|
+
* workspace root is the hard upper bound.
|
|
8
|
+
* @module dsh-lsp-actions/project
|
|
9
|
+
*/
|
|
10
|
+
import type { FileSystem } from '@deepseek-ai/dsh-fs';
|
|
11
|
+
import type { ResolvedServer } from './servers.js';
|
|
12
|
+
/**
|
|
13
|
+
* Every project marker some server entry declares, deduplicated in config order.
|
|
14
|
+
* @param servers - the resolved servers.
|
|
15
|
+
* @returns the marker file names to probe, in the order entries declare them.
|
|
16
|
+
*/
|
|
17
|
+
export declare function configuredProjectMarkers(servers: readonly ResolvedServer[]): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Find the marker file that governs one source file: the nearest ancestor directory — the file's
|
|
20
|
+
* own directory first, the workspace root last — holding one of `markers`, scanning the markers in
|
|
21
|
+
* the given order inside each directory. Directories without a configured marker are skipped, a
|
|
22
|
+
* file outside the workspace has no project context, and no filesystem call is made when the
|
|
23
|
+
* servers table declares no marker at all.
|
|
24
|
+
* @param fs - the filesystem seam sharing the language server's execution world.
|
|
25
|
+
* @param markers - the configured marker file names (see `configuredProjectMarkers`).
|
|
26
|
+
* @param filePath - the source file (relative to `workspaceRoot` or absolute).
|
|
27
|
+
* @param workspaceRoot - the workspace root, the walk's upper bound.
|
|
28
|
+
* @param signal - optional cancellation.
|
|
29
|
+
* @returns the governing marker file name, or undefined when none applies.
|
|
30
|
+
*/
|
|
31
|
+
export declare function findProjectMarker(fs: FileSystem, markers: readonly string[], filePath: string, workspaceRoot: string, signal?: AbortSignal): Promise<string | undefined>;
|
|
32
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,qBAAqB,CAAA;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,EAAE,CAQrF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmC7B"}
|
package/lib/project.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project-config detection for routing: which configured marker file (if any) governs a source
|
|
3
|
+
* file. The walk starts at the file's own directory and climbs to the workspace root, so one
|
|
4
|
+
* extension can be served by different language servers in sibling projects — a `deno.json`
|
|
5
|
+
* project next to a `package.json` project — with no hard-coded path rule and no cross-project
|
|
6
|
+
* bleed: only the nearest ancestor that holds a *configured* marker claims the file, and the
|
|
7
|
+
* workspace root is the hard upper bound.
|
|
8
|
+
* @module dsh-lsp-actions/project
|
|
9
|
+
*/
|
|
10
|
+
import { relativeUnderRootUri, throwIfAborted } from "./host.js";
|
|
11
|
+
/**
|
|
12
|
+
* Every project marker some server entry declares, deduplicated in config order.
|
|
13
|
+
* @param servers - the resolved servers.
|
|
14
|
+
* @returns the marker file names to probe, in the order entries declare them.
|
|
15
|
+
*/
|
|
16
|
+
export function configuredProjectMarkers(servers) {
|
|
17
|
+
const markers = [];
|
|
18
|
+
for (const server of servers) {
|
|
19
|
+
for (const marker of server.entry.projectMarkers) {
|
|
20
|
+
if (!markers.includes(marker))
|
|
21
|
+
markers.push(marker);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return markers;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Find the marker file that governs one source file: the nearest ancestor directory — the file's
|
|
28
|
+
* own directory first, the workspace root last — holding one of `markers`, scanning the markers in
|
|
29
|
+
* the given order inside each directory. Directories without a configured marker are skipped, a
|
|
30
|
+
* file outside the workspace has no project context, and no filesystem call is made when the
|
|
31
|
+
* servers table declares no marker at all.
|
|
32
|
+
* @param fs - the filesystem seam sharing the language server's execution world.
|
|
33
|
+
* @param markers - the configured marker file names (see `configuredProjectMarkers`).
|
|
34
|
+
* @param filePath - the source file (relative to `workspaceRoot` or absolute).
|
|
35
|
+
* @param workspaceRoot - the workspace root, the walk's upper bound.
|
|
36
|
+
* @param signal - optional cancellation.
|
|
37
|
+
* @returns the governing marker file name, or undefined when none applies.
|
|
38
|
+
*/
|
|
39
|
+
export async function findProjectMarker(fs, markers, filePath, workspaceRoot, signal) {
|
|
40
|
+
if (markers.length === 0 || filePath.trim() === '')
|
|
41
|
+
return undefined;
|
|
42
|
+
throwIfAborted(signal);
|
|
43
|
+
let workspace;
|
|
44
|
+
let file;
|
|
45
|
+
try {
|
|
46
|
+
workspace = await fs.resolve(workspaceRoot, signal === undefined ? {} : { signal });
|
|
47
|
+
file = await fs.resolve(filePath, {
|
|
48
|
+
cwd: fs.processPath(workspace),
|
|
49
|
+
...signal === undefined ? {} : { signal },
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// An unresolvable path has no project context; the plain glob/extension route still applies.
|
|
54
|
+
throwIfAborted(signal);
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
// Relativizing through the file URLs keeps the walk in the backend's path space and bounds it:
|
|
58
|
+
// `undefined` means the file lies outside the workspace, where no configured project may claim
|
|
59
|
+
// it, and `.` means the path *is* the workspace root, which has no directory of its own.
|
|
60
|
+
const relative = relativeUnderRootUri(fs.fileUrl(workspace), fs.fileUrl(file));
|
|
61
|
+
if (relative === undefined)
|
|
62
|
+
return undefined;
|
|
63
|
+
const segments = relative === '.' ? [] : relative.split('/');
|
|
64
|
+
const directories = [];
|
|
65
|
+
for (let length = segments.length - 1; length >= 0; length -= 1) {
|
|
66
|
+
directories.push(segments.slice(0, length).join('/'));
|
|
67
|
+
}
|
|
68
|
+
if (directories.length === 0)
|
|
69
|
+
directories.push('');
|
|
70
|
+
for (const directory of directories) {
|
|
71
|
+
for (const marker of markers) {
|
|
72
|
+
if (await markerPresent(fs, directory === '' ? marker : `${directory}/${marker}`, workspaceRoot, signal)) {
|
|
73
|
+
return marker;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Whether one marker file name exists inside a workspace-relative directory. An unreadable or
|
|
81
|
+
* refused probe is treated as absent: routing is a hint, and a directory that cannot be inspected
|
|
82
|
+
* must not fail the action — the extension default still serves the call.
|
|
83
|
+
* @param fs - the filesystem seam.
|
|
84
|
+
* @param path - the workspace-relative marker path.
|
|
85
|
+
* @param cwd - the workspace root the relative path resolves against.
|
|
86
|
+
* @param signal - optional cancellation.
|
|
87
|
+
* @returns true when a marker file (not a directory) is present.
|
|
88
|
+
*/
|
|
89
|
+
async function markerPresent(fs, path, cwd, signal) {
|
|
90
|
+
throwIfAborted(signal);
|
|
91
|
+
try {
|
|
92
|
+
const info = await fs.lstat(path, { cwd }, signal);
|
|
93
|
+
return info !== undefined && info.type !== 'directory';
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
throwIfAborted(signal);
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|
package/lib/runner.d.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* @module dsh-lsp-actions/runner
|
|
8
8
|
*/
|
|
9
9
|
import { LspActionClient } from './client.js';
|
|
10
|
+
import type { FileSystem } from '@deepseek-ai/dsh-fs';
|
|
10
11
|
import type { HostSource } from './host.js';
|
|
11
12
|
import type { ResolvedServer } from './servers.js';
|
|
12
13
|
import type { SeamService } from './seam.js';
|
|
@@ -48,13 +49,18 @@ export interface ActionRunner {
|
|
|
48
49
|
/**
|
|
49
50
|
* Create the seam-first action runner. The seam is resolved through `getSeam` on every call, not
|
|
50
51
|
* captured at apply time, so the plugin serves through a seam that loads after it or is re-added
|
|
51
|
-
* later; a seam that is absent at call time falls back to the own client.
|
|
52
|
-
*
|
|
52
|
+
* later; a seam that is absent at call time falls back to the own client. When an `fs` seam is
|
|
53
|
+
* supplied, a file whose nearest project marker is claimed by a server entry routes to that entry
|
|
54
|
+
* before the plain extension map applies (see `findProjectMarker`).
|
|
55
|
+
* @param options - the per-call seam resolver, the own client, the resolved server table, and the
|
|
56
|
+
* optional filesystem used for project-marker routing.
|
|
53
57
|
* @returns the runner facade.
|
|
54
58
|
*/
|
|
55
59
|
export declare function createActionRunner(options: {
|
|
56
60
|
readonly getSeam: () => SeamService | undefined;
|
|
57
61
|
readonly client: LspActionClient;
|
|
58
62
|
readonly servers: readonly ResolvedServer[];
|
|
63
|
+
/** Filesystem used to detect each file's project marker; omit to route by globs/extensions only. */
|
|
64
|
+
readonly fs?: FileSystem;
|
|
59
65
|
}): ActionRunner;
|
|
60
66
|
//# sourceMappingURL=runner.d.ts.map
|
package/lib/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAI3C,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,cAAc,CAAA;AAE/D,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,KAAK,EAEV,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,iBAAiB,CAAA;AAGxB,mGAAmG;AACnG,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,sDAAsD;IACtD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,kGAAkG;IAClG,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAA;IAC5B,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAA;IAC/B,gFAAgF;IAChF,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAA;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,gDAAgD;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACvC;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACxF,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACrF,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACtF,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACxF,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACzF,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACxF,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACzF,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACtF,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CAChG;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,WAAW,GAAG,SAAS,CAAA;IAC/C,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAA;IAC3C,oGAAoG;IACpG,QAAQ,CAAC,EAAE,CAAC,EAAE,UAAU,CAAA;CACzB,GAAG,YAAY,CAqBf"}
|
package/lib/runner.js
CHANGED
|
@@ -7,29 +7,51 @@
|
|
|
7
7
|
* @module dsh-lsp-actions/runner
|
|
8
8
|
*/
|
|
9
9
|
import { finalExtension } from "./extension.js";
|
|
10
|
+
import { configuredProjectMarkers, findProjectMarker } from "./project.js";
|
|
10
11
|
import { firstLanguageId, routeFile } from "./servers.js";
|
|
11
12
|
import { trySeamAction } from "./seam.js";
|
|
12
13
|
import { LspActionError } from "./vocabulary.js";
|
|
13
14
|
/**
|
|
14
15
|
* Create the seam-first action runner. The seam is resolved through `getSeam` on every call, not
|
|
15
16
|
* captured at apply time, so the plugin serves through a seam that loads after it or is re-added
|
|
16
|
-
* later; a seam that is absent at call time falls back to the own client.
|
|
17
|
-
*
|
|
17
|
+
* later; a seam that is absent at call time falls back to the own client. When an `fs` seam is
|
|
18
|
+
* supplied, a file whose nearest project marker is claimed by a server entry routes to that entry
|
|
19
|
+
* before the plain extension map applies (see `findProjectMarker`).
|
|
20
|
+
* @param options - the per-call seam resolver, the own client, the resolved server table, and the
|
|
21
|
+
* optional filesystem used for project-marker routing.
|
|
18
22
|
* @returns the runner facade.
|
|
19
23
|
*/
|
|
20
24
|
export function createActionRunner(options) {
|
|
25
|
+
const markers = options.fs === undefined ? [] : configuredProjectMarkers(options.servers);
|
|
26
|
+
const fs = options.fs;
|
|
27
|
+
const collaborators = {
|
|
28
|
+
client: options.client,
|
|
29
|
+
servers: options.servers,
|
|
30
|
+
projectMarker: fs === undefined || markers.length === 0
|
|
31
|
+
? noProjectMarker
|
|
32
|
+
: (filePath, workspaceRoot, signal) => findProjectMarker(fs, markers, filePath, workspaceRoot, signal),
|
|
33
|
+
};
|
|
21
34
|
return {
|
|
22
|
-
diagnostics: (request, signal) => runOp({ ...
|
|
23
|
-
formatDocument: (request, signal) => runOp({ ...
|
|
24
|
-
completion: (request, signal) => runOp({ ...
|
|
25
|
-
codeActions: (request, signal) => runOp({ ...
|
|
26
|
-
workspaceSymbols: (request, signal) => runOp({ ...
|
|
27
|
-
documentSymbols: (request, signal) => runOp({ ...
|
|
28
|
-
signatureHelp: (request, signal) => runOp({ ...
|
|
29
|
-
inlayHints: (request, signal) => runOp({ ...
|
|
30
|
-
rename: (request, newName, signal) => renameOp({ ...
|
|
35
|
+
diagnostics: (request, signal) => runOp({ ...collaborators, seam: options.getSeam() }, 'diagnostics', request, signal),
|
|
36
|
+
formatDocument: (request, signal) => runOp({ ...collaborators, seam: options.getSeam() }, 'formatDocument', request, signal),
|
|
37
|
+
completion: (request, signal) => runOp({ ...collaborators, seam: options.getSeam() }, 'completion', request, signal),
|
|
38
|
+
codeActions: (request, signal) => runOp({ ...collaborators, seam: options.getSeam() }, 'codeAction', request, signal),
|
|
39
|
+
workspaceSymbols: (request, signal) => runOp({ ...collaborators, seam: options.getSeam() }, 'workspaceSymbol', request, signal),
|
|
40
|
+
documentSymbols: (request, signal) => runOp({ ...collaborators, seam: options.getSeam() }, 'documentSymbol', request, signal),
|
|
41
|
+
signatureHelp: (request, signal) => runOp({ ...collaborators, seam: options.getSeam() }, 'signatureHelp', request, signal),
|
|
42
|
+
inlayHints: (request, signal) => runOp({ ...collaborators, seam: options.getSeam() }, 'inlayHint', request, signal),
|
|
43
|
+
rename: (request, newName, signal) => renameOp({ ...collaborators, seam: options.getSeam() }, request, newName, signal),
|
|
31
44
|
};
|
|
32
45
|
}
|
|
46
|
+
/** The project resolver used when no server entry declares a marker (no filesystem access at all). */
|
|
47
|
+
async function noProjectMarker() {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
/** The route for one request: the nearest claimed project marker decides, then globs/extensions. */
|
|
51
|
+
async function routeForFile(options, request, signal) {
|
|
52
|
+
const projectMarker = await options.projectMarker(request.filePath, request.workspaceRoot, signal);
|
|
53
|
+
return routeFile(options.servers, request.filePath, projectMarker);
|
|
54
|
+
}
|
|
33
55
|
async function runOp(options, operation, request, signal) {
|
|
34
56
|
if (options.seam !== undefined) {
|
|
35
57
|
const attempt = await trySeamAction(options.seam, operation, request.filePath, request.workspaceRoot, request.position, request.range, signal, extrasFor(operation, request));
|
|
@@ -45,7 +67,8 @@ async function runOp(options, operation, request, signal) {
|
|
|
45
67
|
}
|
|
46
68
|
// Workspace symbol search has no document to route by: when no entry matches (or no file path
|
|
47
69
|
// was supplied), fall back to the first configured server.
|
|
48
|
-
const
|
|
70
|
+
const routed = await routeForFile(options, request, signal);
|
|
71
|
+
const route = routed ?? firstServerRoute(options.servers, operation);
|
|
49
72
|
if (route === undefined) {
|
|
50
73
|
throw new LspActionError(noRouteMessage(request.filePath), 'LSP_ACTION_UNAVAILABLE');
|
|
51
74
|
}
|
|
@@ -124,7 +147,7 @@ async function renameOp(options, request, newName, signal) {
|
|
|
124
147
|
// plugin's own client, which fails loud itself when no entry handles the file.
|
|
125
148
|
}
|
|
126
149
|
}
|
|
127
|
-
const route =
|
|
150
|
+
const route = await routeForFile(options, request, signal);
|
|
128
151
|
if (route === undefined) {
|
|
129
152
|
throw new LspActionError(noRouteMessage(request.filePath), 'LSP_ACTION_UNAVAILABLE');
|
|
130
153
|
}
|
package/lib/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAezC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAsChD;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAMlC;IACC,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACzF,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAA;IACrB,MAAM,aAAa,GAAgC;QACjD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,aAAa,EAAE,EAAE,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YACrD,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC;KACzG,CAAA;IACD,OAAO;QACL,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC;QACtH,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC;QAC5H,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC;QACpH,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC;QACrH,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,CAAC;QAC/H,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC;QAC7H,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC;QAC1H,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC;QACnH,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;KACxH,CAAA;AACH,CAAC;AAYD,sGAAsG;AACtG,KAAK,UAAU,eAAe;IAC5B,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,oGAAoG;AACpG,KAAK,UAAU,YAAY,CAAC,OAAsB,EAAE,OAAsB,EAAE,MAAoB;IAC9F,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAClG,OAAO,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;AACpE,CAAC;AA6CD,KAAK,UAAU,KAAK,CAClB,OAAsB,EACtB,SAAgJ,EAChJ,OAAsB,EACtB,MAAoB;IAEpB,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,aAAa,CACjC,OAAO,CAAC,IAAI,EACZ,SAAS,EACT,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,KAAK,EACb,MAAM,EACN,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAC9B,CAAA;QACD,IAAI,OAAO,CAAC,EAAE;YAAE,OAAO,OAAO,CAAC,MAAM,CAAA;QACrC,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACrC,MAAM,IAAI,cAAc,CACtB,iDAAiD,SAAS,yCAAyC,EACnG,wBAAwB,CACzB,CAAA;QACH,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO;YAAE,MAAM,OAAO,CAAC,KAAK,CAAA;QACnD,yFAAyF;QACzF,sFAAsF;IACxF,CAAC;IACD,8FAA8F;IAC9F,2DAA2D;IAC3D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IAC3D,MAAM,KAAK,GAAG,MAAM,IAAI,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IACpE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAC,CAAA;IACtF,CAAC;IACD,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;QACpC,yFAAyF;QACzF,kCAAkC;QAClC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,aAAa,GAAkB;gBACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAA;YACD,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,0BAA0B,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,CAAA;QAClH,CAAC;QACD,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,CAAA;IAChH,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,cAAc,CAAC,OAAO,SAAS,oCAAoC,EAAE,+BAA+B,CAAC,CAAA;IACjH,CAAC;IACD,MAAM,aAAa,GAAkB;QACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;QACvE,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;QAC9D,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;KAC3E,CAAA;IACD,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,aAAa,CAAC,CAAC,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;QAChG,KAAK,gBAAgB,CAAC,CAAC,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;QACtG,KAAK,YAAY,CAAC,CAAC,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;QAC9F,KAAK,YAAY,CAAC,CAAC,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;QAC/F,KAAK,gBAAgB,CAAC,CAAC,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;QACvG,KAAK,eAAe,CAAC,CAAC,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;QACpG,KAAK,WAAW,CAAC,CAAC,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;IAC/F,CAAC;AACH,CAAC;AAED,oGAAoG;AACpG,SAAS,gBAAgB,CAAC,OAAkC,EAAE,SAAiB;IAC7E,IAAI,SAAS,KAAK,iBAAiB;QAAE,OAAO,SAAS,CAAA;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACxB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACzC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,CAAA;AAC9D,CAAC;AAED,wGAAwG;AACxG,SAAS,SAAS,CAAC,SAAiB,EAAE,OAAsB;IAC1D,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,iBAAiB,CAAC,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAA;QAC1F,KAAK,YAAY,CAAC,CAAC,OAAO,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAA;QACjG,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;IACpB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,QAAQ,CACrB,OAAsB,EACtB,OAAsB,EACtB,OAAe,EACf,MAAoB;IAEpB,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,aAAa,CACjC,OAAO,CAAC,IAAI,EACZ,QAAQ,EACR,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,KAAK,EACb,MAAM,EACN,EAAE,OAAO,EAAE,CACZ,CAAA;QACD,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACf,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,OAAO,CAAC,MAAM,CAAA;YAC3D,uFAAuF;QACzF,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gBACrC,MAAM,IAAI,cAAc,CACtB,6FAA6F,EAC7F,wBAAwB,CACzB,CAAA;YACH,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO;gBAAE,MAAM,OAAO,CAAC,KAAK,CAAA;YACnD,oFAAoF;YACpF,+EAA+E;QACjF,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IAC1D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAC,CAAA;IACtF,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,cAAc,CAAC,8CAA8C,EAAE,+BAA+B,CAAC,CAAA;IAC3G,CAAC;IACD,MAAM,aAAa,GAAkB;QACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;KACxE,CAAA;IACD,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAClF,CAAC;AAED,0FAA0F;AAC1F,SAAS,cAAc,CAAC,QAAgB;IACtC,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,SAAS,aAAa,CAAA;IAC/F,OAAO,mCAAmC,OAAO,0FAA0F,CAAA;AAC7I,CAAC"}
|
package/lib/servers.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Server configuration and routing: the `servers` table schema, load-time validation and
|
|
3
3
|
* executable resolution, and the per-file routing that picks one server entry (glob patterns
|
|
4
|
-
* first, then the extension map) plus its language id.
|
|
4
|
+
* first, then the file's nearest project marker, then the extension map) plus its language id.
|
|
5
5
|
* @module dsh-lsp-actions/servers
|
|
6
6
|
*/
|
|
7
7
|
import type { Context } from '@deepseek-ai/cordis';
|
|
@@ -16,6 +16,14 @@ export interface LspServerEntry {
|
|
|
16
16
|
extensionToLanguage: Record<string, string>;
|
|
17
17
|
/** Optional path globs (e.g. `src/**\/*.ts`); when a file matches, this entry wins over the extension map. */
|
|
18
18
|
fileGlobs?: string[];
|
|
19
|
+
/**
|
|
20
|
+
* Optional project config files (plain file names, e.g. `["deno.json", "deno.jsonc"]`). The
|
|
21
|
+
* nearest ancestor directory of a routed file that holds one of these names claims the file for
|
|
22
|
+
* this entry, so sibling projects sharing an extension can use different servers without a
|
|
23
|
+
* hard-coded path rule. A marker only decides among entries that already map the file's
|
|
24
|
+
* extension, and `fileGlobs` still wins over it.
|
|
25
|
+
*/
|
|
26
|
+
projectMarkers?: string[];
|
|
19
27
|
/** Arguments passed to the executable (no shell). Default `[]`. */
|
|
20
28
|
args?: string[];
|
|
21
29
|
/** Extra env vars merged on top of the scrubbed ambient env. Default `{}`. */
|
|
@@ -113,15 +121,19 @@ export interface ServerRoute {
|
|
|
113
121
|
*/
|
|
114
122
|
export declare function resolveServers(ctx: Context, servers: Record<string, ResolvedServerEntry>, signal?: AbortSignal): Promise<ResolvedServer[]>;
|
|
115
123
|
/**
|
|
116
|
-
* Route one file to a server entry: entries with matching `fileGlobs` first, then
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
124
|
+
* Route one file to a server entry: entries with matching `fileGlobs` first, then the entry claimed
|
|
125
|
+
* by the file's nearest project marker, then entries whose `extensionToLanguage` maps the file's
|
|
126
|
+
* extension — every pass in config order. A glob route uses the file's own extension mapping when
|
|
127
|
+
* the entry maps it; the entry's first mapping is the fallback only for files whose extension the
|
|
128
|
+
* glob — not the map — selected. A project marker never widens a server's file types: it decides
|
|
129
|
+
* only among the entries that already map the file's extension.
|
|
120
130
|
* @param servers - the resolved servers.
|
|
121
131
|
* @param filePath - the source file path (absolute or workspace-relative).
|
|
132
|
+
* @param projectMarker - the nearest configured project marker governing `filePath` (see
|
|
133
|
+
* `findProjectMarker`), when the servers table declares any.
|
|
122
134
|
* @returns the route, or undefined when no entry handles the file.
|
|
123
135
|
*/
|
|
124
|
-
export declare function routeFile(servers: readonly ResolvedServer[], filePath: string): ServerRoute | undefined;
|
|
136
|
+
export declare function routeFile(servers: readonly ResolvedServer[], filePath: string, projectMarker?: string): ServerRoute | undefined;
|
|
125
137
|
/** The first extension mapping's language id, used when a glob route wins without an extension hit. */
|
|
126
138
|
export declare function firstLanguageId(server: ResolvedServer): string;
|
|
127
139
|
/**
|
package/lib/servers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../src/servers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAQxC,8FAA8F;AAC9F,eAAO,MAAM,0BAA0B,UAAY,CAAA;AAOnD,gEAAgE;AAChE,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAA;IACf,0FAA0F;IAC1F,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,8GAA8G;IAC9G,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,iHAAiH;IACjH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,wFAAwF;IACxF,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kFAAkF;IAClF,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,+FAA+F;IAC/F,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,gGAAgG;IAChG,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,8FAA8F;IAC9F,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,2FAA2F;AAC3F,MAAM,WAAW,MAAM;IACrB,wGAAwG;IACxG,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACvC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,qFAAqF;IACrF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,qFAAqF;IACrF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oGAAoG;IACpG,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,8FAA8F;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../src/servers.ts"],"names":[],"mappings":"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"}
|
package/lib/servers.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Server configuration and routing: the `servers` table schema, load-time validation and
|
|
3
3
|
* executable resolution, and the per-file routing that picks one server entry (glob patterns
|
|
4
|
-
* first, then the extension map) plus its language id.
|
|
4
|
+
* first, then the file's nearest project marker, then the extension map) plus its language id.
|
|
5
5
|
* @module dsh-lsp-actions/servers
|
|
6
6
|
*/
|
|
7
7
|
import z from '@deepseek-ai/schemastery';
|
|
@@ -21,6 +21,7 @@ export const LspServerEntry = z.object({
|
|
|
21
21
|
command: z.string().required(),
|
|
22
22
|
extensionToLanguage: z.dict(String).required(),
|
|
23
23
|
fileGlobs: z.array(String).default([]),
|
|
24
|
+
projectMarkers: z.array(String).default([]),
|
|
24
25
|
args: z.array(String).default([]),
|
|
25
26
|
env: z.dict(String).default({}),
|
|
26
27
|
initializationOptions: z.any().default(null),
|
|
@@ -65,25 +66,32 @@ export async function resolveServers(ctx, servers, signal) {
|
|
|
65
66
|
for (const [serverId, entry] of Object.entries(servers)) {
|
|
66
67
|
if (serverId.trim() === '')
|
|
67
68
|
throw new Error('lsp-actions: server ids must be non-empty strings');
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
// A raw config handed straight to apply() (tests, programmatic mounting) may omit a field the
|
|
70
|
+
// schemastery schema would have defaulted: normalize the project markers before validating.
|
|
71
|
+
const resolvedEntry = { ...entry, projectMarkers: entry.projectMarkers ?? [] };
|
|
72
|
+
validateServerEntry(serverId, resolvedEntry);
|
|
73
|
+
for (const glob of resolvedEntry.fileGlobs) {
|
|
70
74
|
globToRegExp(glob); // throws on a malformed pattern at load, not at routing time
|
|
71
75
|
}
|
|
72
|
-
const executable = await ctx.subprocess.resolveExecutable(
|
|
73
|
-
resolved.push({ serverId, entry, executable });
|
|
76
|
+
const executable = await ctx.subprocess.resolveExecutable(resolvedEntry.command, resolvedEntry.env, signal);
|
|
77
|
+
resolved.push({ serverId, entry: resolvedEntry, executable });
|
|
74
78
|
}
|
|
75
79
|
return resolved;
|
|
76
80
|
}
|
|
77
81
|
/**
|
|
78
|
-
* Route one file to a server entry: entries with matching `fileGlobs` first, then
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
+
* Route one file to a server entry: entries with matching `fileGlobs` first, then the entry claimed
|
|
83
|
+
* by the file's nearest project marker, then entries whose `extensionToLanguage` maps the file's
|
|
84
|
+
* extension — every pass in config order. A glob route uses the file's own extension mapping when
|
|
85
|
+
* the entry maps it; the entry's first mapping is the fallback only for files whose extension the
|
|
86
|
+
* glob — not the map — selected. A project marker never widens a server's file types: it decides
|
|
87
|
+
* only among the entries that already map the file's extension.
|
|
82
88
|
* @param servers - the resolved servers.
|
|
83
89
|
* @param filePath - the source file path (absolute or workspace-relative).
|
|
90
|
+
* @param projectMarker - the nearest configured project marker governing `filePath` (see
|
|
91
|
+
* `findProjectMarker`), when the servers table declares any.
|
|
84
92
|
* @returns the route, or undefined when no entry handles the file.
|
|
85
93
|
*/
|
|
86
|
-
export function routeFile(servers, filePath) {
|
|
94
|
+
export function routeFile(servers, filePath, projectMarker) {
|
|
87
95
|
const normalized = filePath.replaceAll('\\', '/');
|
|
88
96
|
const extension = finalExtension(filePath);
|
|
89
97
|
for (const server of servers) {
|
|
@@ -94,6 +102,15 @@ export function routeFile(servers, filePath) {
|
|
|
94
102
|
}
|
|
95
103
|
}
|
|
96
104
|
}
|
|
105
|
+
if (projectMarker !== undefined) {
|
|
106
|
+
for (const server of servers) {
|
|
107
|
+
if (!server.entry.projectMarkers.includes(projectMarker))
|
|
108
|
+
continue;
|
|
109
|
+
const languageId = server.entry.extensionToLanguage[extension];
|
|
110
|
+
if (languageId !== undefined)
|
|
111
|
+
return { server, languageId };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
97
114
|
for (const server of servers) {
|
|
98
115
|
const languageId = server.entry.extensionToLanguage[extension];
|
|
99
116
|
if (languageId !== undefined)
|
|
@@ -183,6 +200,12 @@ function validateServerEntry(serverId, entry) {
|
|
|
183
200
|
throw new Error(`lsp-actions: servers.${serverId} maps extension "${extension}" to an empty language id`);
|
|
184
201
|
}
|
|
185
202
|
}
|
|
203
|
+
for (const marker of entry.projectMarkers) {
|
|
204
|
+
// A marker is probed as a plain file name inside each ancestor directory, never as a path.
|
|
205
|
+
if (marker.trim() === '' || marker.trim() !== marker || marker === '.' || marker === '..' || /[/\\]/u.test(marker)) {
|
|
206
|
+
throw new Error(`lsp-actions: servers.${serverId} lists an invalid project marker "${marker}" (plain file names only, e.g. "deno.json")`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
186
209
|
}
|
|
187
210
|
/** Reject a timer value Node would clamp instead of scheduling as configured. */
|
|
188
211
|
export function assertTimer(name, value) {
|
package/lib/servers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"servers.js","sourceRoot":"","sources":["../src/servers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,+FAA+F;AAC/F,MAAM,kBAAkB,GAAG,aAAa,CAAA;AAExC,MAAM,yBAAyB,GAAG,UAAU,CAAA;AAC5C,MAAM,wBAAwB,GAAG,SAAS,CAAA;AAC1C,8FAA8F;AAC9F,MAAM,CAAC,MAAM,0BAA0B,GAAG,SAAS,CAAA;AACnD,MAAM,qBAAqB,GAAG,KAAK,CAAA;AACnC,MAAM,2BAA2B,GAAG,KAAK,CAAA;AACzC,MAAM,6BAA6B,GAAG,KAAK,CAAA;AAC3C,MAAM,+BAA+B,GAAG,GAAG,CAAA;AAC3C,MAAM,uBAAuB,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"servers.js","sourceRoot":"","sources":["../src/servers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-lsp-actions",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "LSP action surface for DeepSeek Harness: diagnostics, formatting, completion, code actions, symbols, signature help, inlay hints, and rename tools over language servers, plus the editor action protocol (lsp.actions.*) that makes the plugin the IDE integration backend",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|