dsh-lsp-actions 0.4.8 → 0.5.1

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 CHANGED
@@ -3,7 +3,25 @@
3
3
  All notable changes to dsh-lsp-actions are documented here. The format follows
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
 
6
- ## [Unreleased]
6
+ ## [0.5.1] - 2026-09-12
7
+
8
+ ### Changed
9
+
10
+ - Rename the four translated READMEs to `README-<lang>.md`. npm selects the package-page readme as the first markdown file matching its `{README,README.*}` glob (`@npmcli/package-json`, publish path), and that glob order puts `README.<lang>.md` ahead of `README.md` — so npm was serving the Simplified-Chinese file for this package too (measured on 15/15 sampled packages of the family). The new names sit outside the glob, so the English source is served again. No content changed apart from the language-switcher link each translation holds to its siblings, and the repo readme gate still passes. Takes effect with the next release; an already-published version cannot gain a corrected readme retroactively.
11
+
12
+ - The release workflow now creates the GitHub Release itself, with the body taken from this version's CHANGELOG section. Until now a `v*` tag published to npm and stopped there, so every Release page had to be created by hand afterwards.
13
+ - Pin the `@deepseek-ai/dsh-*` dev/test dependencies to the published `0.1.5-rc.2` line and record `0.1.5-rc.2` in `dshWorkshop.compatibility.dshVersions`; the monthly Compat workflow now runs against `0.1.5-rc.2`. The peer range `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0` is unchanged, so no supported host line is dropped.
14
+
15
+ ## [0.5.0] - 2026-09-10
16
+
17
+
18
+ ### Added
19
+
20
+ - 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.
21
+
22
+ ### Docs
23
+
24
+ - 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`.
7
25
 
8
26
  ## [0.4.8] - 2026-09-10
9
27
 
@@ -16,7 +16,7 @@
16
16
  [![npm version](https://img.shields.io/npm/v/dsh-lsp-actions)](https://www.npmjs.com/package/dsh-lsp-actions)
17
17
  [![npm downloads](https://img.shields.io/npm/dm/dsh-lsp-actions)](https://www.npmjs.com/package/dsh-lsp-actions)
18
18
 
19
- [English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
19
+ [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
20
20
 
21
21
  </div>
22
22
 
@@ -26,7 +26,7 @@
26
26
 
27
27
  | Surface | Status |
28
28
  |---|---|
29
- | Harness | DeepSeek Harness `dsh-v0.1.5-rc.1` (compatibilidad declarada para `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`); el plugin no escribe eventos de sesión propios - el host registra los eventos estándar tool/call + tool/result. Verificado el 2026-09-10 contra el checkout master dsh-v0.1.5-rc.1 (cadena de gates completa + smoke de instalación de perfil). |
29
+ | Harness | DeepSeek Harness `dsh-v0.1.5-rc.2` (compatibilidad declarada para `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`); el plugin no escribe eventos de sesión propios - el host registra los eventos estándar tool/call + tool/result. Verificado el 2026-09-11 contra el checkout master dsh-v0.1.5-rc.2 (cadena de gates completa + smoke de instalación de perfil). |
30
30
  | Node | `^22.19.0 \|\| >=24.0.0` |
31
31
  | Platforms | Todas (host puro; subprocesos + sistema de archivos, sin red) |
32
32
  | Model | Cualquiera (las herramientas son independientes del modelo; el plugin nunca llama a un modelo) |
@@ -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
 
@@ -16,7 +16,7 @@
16
16
  [![npm version](https://img.shields.io/npm/v/dsh-lsp-actions)](https://www.npmjs.com/package/dsh-lsp-actions)
17
17
  [![npm downloads](https://img.shields.io/npm/dm/dsh-lsp-actions)](https://www.npmjs.com/package/dsh-lsp-actions)
18
18
 
19
- [English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
19
+ [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
20
20
 
21
21
  </div>
22
22
 
@@ -26,7 +26,7 @@
26
26
 
27
27
  | Surface | Status |
28
28
  |---|---|
29
- | Harness | DeepSeek Harness `dsh-v0.1.5-rc.1` (`>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` के लिए अनुकूलता घोषित); प्लगइन स्वयं कोई सत्र इवेंट नहीं लिखता - host मानक tool/call + tool/result इवेंट दर्ज करता है। 2026-09-10 को dsh-v0.1.5-rc.1 master checkout के विरुद्ध सत्यापित (पूर्ण gate श्रृंखला + profile इंस्टॉल smoke)। |
29
+ | Harness | DeepSeek Harness `dsh-v0.1.5-rc.2` (`>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` के लिए अनुकूलता घोषित); प्लगइन स्वयं कोई सत्र इवेंट नहीं लिखता - host मानक tool/call + tool/result इवेंट दर्ज करता है। 2026-09-11 को dsh-v0.1.5-rc.2 master checkout के विरुद्ध सत्यापित (पूर्ण gate श्रृंखला + profile इंस्टॉल smoke)। |
30
30
  | Node | `^22.19.0 \|\| >=24.0.0` |
31
31
  | Platforms | सभी (शुद्ध host; सबप्रोसेस + फ़ाइलसिस्टम, कोई नेटवर्क नहीं) |
32
32
  | Model | कोई भी (टूल मॉडल-अज्ञेय हैं; प्लगइन कभी मॉडल को कॉल नहीं करता) |
@@ -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
 
@@ -16,7 +16,7 @@
16
16
  [![npm version](https://img.shields.io/npm/v/dsh-lsp-actions)](https://www.npmjs.com/package/dsh-lsp-actions)
17
17
  [![npm downloads](https://img.shields.io/npm/dm/dsh-lsp-actions)](https://www.npmjs.com/package/dsh-lsp-actions)
18
18
 
19
- [English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
19
+ [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
20
20
 
21
21
  </div>
22
22
 
@@ -26,7 +26,7 @@
26
26
 
27
27
  | Surface | Status |
28
28
  |---|---|
29
- | Harness | DeepSeek Harness `dsh-v0.1.5-rc.1` (compatibilidade declarada para `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`); o plugin não grava eventos de sessão próprios - o host registra os eventos padrão tool/call + tool/result. Verificado em 2026-09-10 contra o checkout master dsh-v0.1.5-rc.1 (cadeia de gates completa + smoke de instalação de perfil). |
29
+ | Harness | DeepSeek Harness `dsh-v0.1.5-rc.2` (compatibilidade declarada para `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`); o plugin não grava eventos de sessão próprios - o host registra os eventos padrão tool/call + tool/result. Verificado em 2026-09-11 contra o checkout master dsh-v0.1.5-rc.2 (cadeia de gates completa + smoke de instalação de perfil). |
30
30
  | Node | `^22.19.0 \|\| >=24.0.0` |
31
31
  | Platforms | Todas (host puro; subprocessos + sistema de arquivos, sem rede) |
32
32
  | Model | Qualquer (as ferramentas são independentes do modelo; o plugin nunca chama um modelo) |
@@ -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
 
@@ -16,7 +16,7 @@
16
16
  [![npm version](https://img.shields.io/npm/v/dsh-lsp-actions)](https://www.npmjs.com/package/dsh-lsp-actions)
17
17
  [![npm downloads](https://img.shields.io/npm/dm/dsh-lsp-actions)](https://www.npmjs.com/package/dsh-lsp-actions)
18
18
 
19
- [English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
19
+ [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
20
20
 
21
21
  </div>
22
22
 
@@ -26,7 +26,7 @@
26
26
 
27
27
  | Surface | Status |
28
28
  |---|---|
29
- | Harness | DeepSeek Harness `dsh-v0.1.5-rc.1`(对 `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` 声明兼容);插件不自写会话事件——宿主记录标准 tool/call + tool/result 事件;已于 2026-09-10 对照 dsh-v0.1.5-rc.1 master checkout 核验(完整 gate 链 + profile 安装冒烟)。 |
29
+ | Harness | DeepSeek Harness `dsh-v0.1.5-rc.2`(对 `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` 声明兼容);插件不自写会话事件——宿主记录标准 tool/call + tool/result 事件;已于 2026-09-11 对照 dsh-v0.1.5-rc.2 master checkout 核验(完整 gate 链 + profile 安装冒烟)。 |
30
30
  | Node | `^22.19.0 \|\| >=24.0.0` |
31
31
  | Platforms | 全部(纯 host;子进程 + 文件系统,无网络) |
32
32
  | Model | 任意(工具与模型无关;插件从不调用模型) |
@@ -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/README.md CHANGED
@@ -17,7 +17,7 @@
17
17
  [![npm version](https://img.shields.io/npm/v/dsh-lsp-actions)](https://www.npmjs.com/package/dsh-lsp-actions)
18
18
  [![npm downloads](https://img.shields.io/npm/dm/dsh-lsp-actions)](https://www.npmjs.com/package/dsh-lsp-actions)
19
19
 
20
- [English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
20
+ [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
21
21
 
22
22
  </div>
23
23
 
@@ -27,7 +27,7 @@
27
27
 
28
28
  | Surface | Status |
29
29
  |---|---|
30
- | Harness | DeepSeek Harness `dsh-v0.1.5-rc.1` (compat declared for `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`); the plugin writes no session events itself - the host records the standard tool/call + tool/result events. Verified 2026-09-10 against the dsh-v0.1.5-rc.1 master checkout (full gate chain + profile install smoke). |
30
+ | Harness | DeepSeek Harness `dsh-v0.1.5-rc.2` (compat declared for `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`); the plugin writes no session events itself - the host records the standard tool/call + tool/result events. Verified 2026-09-11 against the dsh-v0.1.5-rc.2 master checkout (full gate chain + profile install smoke). |
31
31
  | Node | `^22.19.0 \|\| >=24.0.0` |
32
32
  | Platforms | All (pure host; subprocess + filesystem, no network) |
33
33
  | Model | Any (tools are model-agnostic; the plugin never calls a model) |
@@ -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/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 优先于扩展名)与 `formattingOptions`/`diagnosticsSettleMs`;`maxDocumentBytes` 因读取发生在上具层而提升为插件级 Config(文档已注明偏差) |
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. Servers re-spell the root URI sent at `initialize` (lowercase drive letters and
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;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ/F"}
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. Servers re-spell the root URI sent at `initialize` (lowercase drive letters and
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
- const root = decodeFileUri(workspace.fileUrl);
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":"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"}
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. The official
43
- * seam is resolved lazily per call (see the runner), so registration is independent of the seam's
44
- * load order; without servers and without a seam, calls fail loudly with `LSP_ACTION_UNAVAILABLE`
45
- * instead of the plugin silently contributing nothing.
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
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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. The official
44
- * seam is resolved lazily per call (see the runner), so registration is independent of the seam's
45
- * load order; without servers and without a seam, calls fail loudly with `LSP_ACTION_UNAVAILABLE`
46
- * instead of the plugin silently contributing nothing.
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
- const runner = createActionRunner({ getSeam, client, servers });
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -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
- * @param options - the per-call seam resolver, the own client, and the resolved server table.
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
@@ -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;AAG3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,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;;;;;;GAMG;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;CAC5C,GAAG,YAAY,CAYf"}
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
- * @param options - the per-call seam resolver, the own client, and the resolved server table.
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({ ...options, seam: options.getSeam() }, 'diagnostics', request, signal),
23
- formatDocument: (request, signal) => runOp({ ...options, seam: options.getSeam() }, 'formatDocument', request, signal),
24
- completion: (request, signal) => runOp({ ...options, seam: options.getSeam() }, 'completion', request, signal),
25
- codeActions: (request, signal) => runOp({ ...options, seam: options.getSeam() }, 'codeAction', request, signal),
26
- workspaceSymbols: (request, signal) => runOp({ ...options, seam: options.getSeam() }, 'workspaceSymbol', request, signal),
27
- documentSymbols: (request, signal) => runOp({ ...options, seam: options.getSeam() }, 'documentSymbol', request, signal),
28
- signatureHelp: (request, signal) => runOp({ ...options, seam: options.getSeam() }, 'signatureHelp', request, signal),
29
- inlayHints: (request, signal) => runOp({ ...options, seam: options.getSeam() }, 'inlayHint', request, signal),
30
- rename: (request, newName, signal) => renameOp({ ...options, seam: options.getSeam() }, request, newName, signal),
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 route = routeFile(options.servers, request.filePath) ?? firstServerRoute(options.servers, operation);
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 = routeFile(options.servers, request.filePath);
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":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
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 entries whose
117
- * `extensionToLanguage` maps the file's extension, both in config order. A glob route uses the
118
- * file's own extension mapping when the entry maps it; the entry's first mapping is the fallback
119
- * only for files whose extension the glob — not the map — selected.
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
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../src/servers.ts"],"names":[],"mappings":"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"}
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
- validateServerEntry(serverId, entry);
69
- for (const glob of entry.fileGlobs) {
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(entry.command, entry.env, signal);
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 entries whose
79
- * `extensionToLanguage` maps the file's extension, both in config order. A glob route uses the
80
- * file's own extension mapping when the entry maps it; the entry's first mapping is the fallback
81
- * only for files whose extension the glob — not the map — selected.
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) {
@@ -1 +1 @@
1
- {"version":3,"file":"servers.js","sourceRoot":"","sources":["../src/servers.ts"],"names":[],"mappings":"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"}
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.4.8",
3
+ "version": "0.5.1",
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",
@@ -19,10 +19,10 @@
19
19
  "cordis.patch.yml",
20
20
  "CHANGELOG.md",
21
21
  "README.md",
22
- "README.es.md",
23
- "README.hi.md",
24
- "README.pt.md",
25
- "README.zh.md"
22
+ "README-es.md",
23
+ "README-hi.md",
24
+ "README-pt.md",
25
+ "README-zh.md"
26
26
  ],
27
27
  "scripts": {
28
28
  "build": "tsc --noEmitOnError && node scripts/fix-dts.mjs",
@@ -98,7 +98,7 @@
98
98
  "network:none"
99
99
  ],
100
100
  "compatibility": {
101
- "dshVersions": ["0.1.2-rc.1","0.1.5-rc.1"]
101
+ "dshVersions": ["0.1.2-rc.1","0.1.5-rc.2"]
102
102
  },
103
103
  "capability": {
104
104
  "id": "lsp_diagnostics",
@@ -123,19 +123,19 @@
123
123
  "@deepseek-ai/schemastery": "^3.18.2"
124
124
  },
125
125
  "devDependencies": {
126
- "@deepseek-ai/dsh-attachment": "0.1.5-rc.1",
126
+ "@deepseek-ai/dsh-attachment": "0.1.5-rc.2",
127
127
  "@deepseek-ai/cordis": "^4.0.2",
128
128
  "@deepseek-ai/cordis-plugin-include": "^1.0.7",
129
129
  "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
130
- "@deepseek-ai/dsh-fs": "0.1.5-rc.1",
131
- "@deepseek-ai/dsh-llm": "0.1.5-rc.1",
132
- "@deepseek-ai/dsh-lsp": "0.1.5-rc.1",
133
- "@deepseek-ai/dsh-sandbox": "0.1.5-rc.1",
134
- "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.1",
135
- "@deepseek-ai/dsh-subprocess": "0.1.5-rc.1",
136
- "@deepseek-ai/dsh-timeout": "0.1.5-rc.1",
137
- "@deepseek-ai/dsh-tools": "0.1.5-rc.1",
138
- "@deepseek-ai/dsh-user-approval": "0.1.5-rc.1",
130
+ "@deepseek-ai/dsh-fs": "0.1.5-rc.2",
131
+ "@deepseek-ai/dsh-llm": "0.1.5-rc.2",
132
+ "@deepseek-ai/dsh-lsp": "0.1.5-rc.2",
133
+ "@deepseek-ai/dsh-sandbox": "0.1.5-rc.2",
134
+ "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.2",
135
+ "@deepseek-ai/dsh-subprocess": "0.1.5-rc.2",
136
+ "@deepseek-ai/dsh-timeout": "0.1.5-rc.2",
137
+ "@deepseek-ai/dsh-tools": "0.1.5-rc.2",
138
+ "@deepseek-ai/dsh-user-approval": "0.1.5-rc.2",
139
139
  "@deepseek-ai/schemastery": "^3.18.2",
140
140
  "@types/node": "^26.2.0",
141
141
  "@vitest/coverage-v8": "^3.2.7",