dsh-lsp-actions 0.3.0 → 0.3.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/README.hi.md CHANGED
@@ -2,98 +2,163 @@
2
2
 
3
3
  # 🛰️ dsh-lsp-actions
4
4
 
5
- **DeepSeek Harness के लिए LSP एक्शन सतह — असली language server, असली फीडबैक।**
5
+ **DeepSeek Harness के लिए LSP एक्शन सतह — असली language servers, असली फीडबैक, और एडिटर्स के लिए IDE इंटीग्रेशन बैकएंड।**
6
6
 
7
- आपके एजेंट के एडिटर लूप के लिए डायग्नोस्टिक्स, फ़ॉर्मेटिंग, कोड कम्प्लीशन, क्विकफिक्स, सिंबल, सिग्नेचर हेल्प और इनले हिंट्स — उन्हीं language servers से संचालित जिन्हें आपका IDE इस्तेमाल करता है।
7
+ *आपके एजेंट के एडिटर लूप के लिए डायग्नोस्टिक्स, फ़ॉर्मेटिंग, कम्प्लीशन, कोड एक्शन, सिंबल, सिग्नेचर हेल्प, इनले हिंट्स और रिनेम — साथ ही स्थिर एडिटर एक्शन प्रोटोकॉल (`lsp.actions.*`) जो किसी भी एडिटर को इन्हें सीधे उपभोग करने देता है।*
8
8
 
9
- [![Topic: dsh](https://img.shields.io/badge/Topic-dsh-4D6BFE?style=for-the-badge)](https://github.com/topics/dsh)
10
- [![Topic: dsh-plugin](https://img.shields.io/badge/Topic-dsh--plugin-8257D0?style=for-the-badge)](https://github.com/topics/dsh-plugin)
11
- [![CI](https://github.com/PerryLink/dsh-lsp-actions/actions/workflows/ci.yml/badge.svg)](https://github.com/PerryLink/dsh-lsp-actions/actions/workflows/ci.yml)
12
- [![npm](https://img.shields.io/npm/v/dsh-lsp-actions?style=flat-square)](https://www.npmjs.com/package/dsh-lsp-actions)
13
- [![npm downloads](https://img.shields.io/npm/dw/dsh-lsp-actions?style=flat-square)](https://www.npmjs.com/package/dsh-lsp-actions)
14
- [![License](https://img.shields.io/badge/License-Apache%202.0-D22128?style=flat-square)](LICENSE)
15
- [![Node](https://img.shields.io/badge/Node-%5E22.19%20%7C%7C%20%3E%3D24-43853D?style=flat-square)](package.json)
9
+ [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
10
+ [![DSH plugin](https://img.shields.io/badge/dsh-plugin-✅-green)](https://github.com/topics/dsh-plugin)
11
+ [![Node](https://img.shields.io/badge/node-%5E22.19%20%7C%7C%20%3E%3D24-brightgreen.svg)](#)
12
+ [![CI](https://img.shields.io/github/actions/workflow/status/PerryLink/dsh-lsp-actions/ci.yml?branch=main&label=CI)](https://github.com/PerryLink/dsh-lsp-actions/actions)
13
+ [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-lsp-actions?label=version)](https://github.com/PerryLink/dsh-lsp-actions/releases)
14
+ [![npm version](https://img.shields.io/npm/v/dsh-lsp-actions)](https://www.npmjs.com/package/dsh-lsp-actions)
15
+ [![npm downloads](https://img.shields.io/npm/dm/dsh-lsp-actions)](https://www.npmjs.com/package/dsh-lsp-actions)
16
16
 
17
- [English](README.md) · [简体中文](README.zh-CN.md) · [Español](README.es.md) · [हिन्दी](README.hi.md) · [Português](README.pt.md)
17
+ [English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
18
18
 
19
19
  </div>
20
20
 
21
21
  ---
22
22
 
23
- > **नया (v0.3.0):** IDE इंटीग्रेशन बैकएंड — एडिटर एक्शन प्रोटोकॉल `lsp.actions.list` / `lsp.actions.run` / `lsp.events` (v1) और न्यूनतम VS Code उदाहरण। प्रोटोकॉल का प्रामाणिक विवरण [README.md](README.md) और [README.zh-CN.md](README.zh-CN.md) में है (आर्किटेक्चर, वर्ज़निंग और बैकवर्ड-कम्पैटिबिलिटी); पूरा wire स्पेक: [docs/editor-protocol.md](docs/editor-protocol.md) / [docs/editor-protocol.zh-CN.md](docs/editor-protocol.zh-CN.md)।
23
+ ## Compatibility
24
24
 
25
- ## यह प्लगइन आपके एजेंट को क्या देता है
25
+ | Surface | Status |
26
+ |---|---|
27
+ | Harness | DeepSeek Harness `0.1.0-rc.6` (`>=0.1.0-rc.6` के लिए अनुकूलता घोषित) |
28
+ | Node | `^22.19.0 \|\| >=24.0.0` |
29
+ | Platforms | सभी (शुद्ध host; सबप्रोसेस + फ़ाइलसिस्टम, कोई नेटवर्क नहीं) |
30
+ | Model | कोई भी (टूल मॉडल-अज्ञेय हैं; प्लगइन कभी मॉडल को कॉल नहीं करता) |
26
31
 
27
- आधिकारिक DeepSeek Harness `ctx.lsp` seam **नेविगेशन** (go-to-definition, references, implementation, hover) को कवर करता है। `dsh-lsp-actions` **एक्शन सतह** को पूरा करता है — वह फीडबैक लूप जिसकी एक एजेंट को कोड लिखते और ठीक करते समय ज़रूरत होती है:
32
+ ## What you get
28
33
 
29
- | टूल | क्या करता है | लिखता है? |
30
- | --- | --- | --- |
31
- | `lsp_diagnostics <file>` | कंपाइलर/एनालाइज़र की एरर, वॉर्निंग और हिंट्स — severity, range, message और स्रोत server के साथ | ❌ केवल-पठन |
32
- | `lsp_format <file> [range?]` | language server के ज़रिए फ़ाइल या चयन को फ़ॉर्मेट करता है और परिणाम लागू करता है, diff लौटाता है | ✅ `fs/write-intent` + sandbox नीति से |
33
- | `lsp_completion <file> <line> <character>` | कर्सर स्थान पर कम्प्लीशन सुझाव, असली इंसर्शन टेक्स्ट सहित | ❌ केवल-पठन |
34
- | `lsp_code_action <file> [range?] [only?]` | किसी range या पहले डायग्नोस्टिक के लिए server-सत्यापित क्विकफिक्स/रिफैक्टरिंग (उनके edits सहित) | ❌ केवल संदर्भ |
35
- | `lsp_symbols <query?> <file_path?>` | नाम से पूरे workspace में सिंबल खोज, या एक फ़ाइल की सिंबल रूपरेखा | ❌ केवल-पठन |
36
- | `lsp_signature <file> <line> <character>` | कॉल के अंदर सिग्नेचर हेल्प (पैरामीटर और दस्तावेज़ीकरण) | ❌ केवल-पठन |
37
- | `lsp_inlay_hints <file> [range?]` | server के टाइप एनोटेशन और पैरामीटर-नाम संकेत | ❌ केवल-पठन |
38
- | `lsp_rename <file> <line> <character> <new_name>` | server-सत्यापित सिंबल नाम बदलना, पूरे workspace में प्रति-फ़ाइल diffs के साथ लागू | ✅ `fs/write-intent` + sandbox नीति से |
34
+ `dsh-lsp-actions` एक ही host पंक्ति के रूप में माउंट होता है (`id: lsp-actions`, `name: dsh-lsp-actions`, `inject: [tools, fs, subprocess]`)। आधिकारिक DeepSeek Harness `ctx.lsp` seam **नेविगेशन** (go-to-definition, references, implementation, hover) को कवर करता है; यह प्लगइन **एक्शन सतह** को पूरा करता है — वह फीडबैक लूप जिसकी एक एजेंट को कोड लिखते और ठीक करते समय ज़रूरत होती है:
39
35
 
40
- > ✨ टेस्ट सूट में एक असली `typescript-language-server` रन शामिल है: डायग्नोस्टिक्स, फ़ॉर्मेटिंग, कम्प्लीशन, सिंबल खोज और रिनेम एक जीवित server के ख़िलाफ़ end-to-end सत्यापित होते हैं, सिर्फ़ mocks से नहीं। सूट आत्मनिर्भर है (tsls एक devDependency है) और CI में Node 22/24 पर Linux, Windows और macOS में चलती है।
36
+ 1. **आठ `lsp_*` टूल** — डायग्नोस्टिक्स, फ़ॉर्मेटिंग, कम्प्लीशन, कोड एक्शन, सिंबल, सिग्नेचर हेल्प, इनले हिंट्स और रिनेम, सभी उन्हीं language servers से सेवित जिन्हें आपका IDE इस्तेमाल करता है।
37
+ 2. **एडिटर एक्शन प्रोटोकॉल v1** — एक स्थिर JSON-RPC सतह (`lsp.actions.list` / `lsp.actions.run` / `lsp.events`) जो किसी भी एडिटर (VS Code पहले) को उन क्षमताओं को सीधे उपभोग करने देती है।
38
+ 3. **असली-server सत्यापन** — टेस्ट सूट में एक असली `typescript-language-server` रन शामिल है (आत्मनिर्भर, CI Node 22/24 पर Linux, Windows और macOS में), सिर्फ़ mocks नहीं।
41
39
 
42
- ## त्वरित शुरुआत
40
+ ## Quick start
43
41
 
44
42
  ```sh
45
- dsh plugin --profile <name> add <path-or-tarball-of-dsh-lsp-actions>
46
- ```
47
-
48
- हर language server के लिए एक entry कॉन्फ़िगर करें (आकार आधिकारिक `lsp-stdio` कॉन्फ़िग से मेल खाता है):
49
-
50
- ```yaml
51
- # अपने profile के cordis.patch.yml में (या bundle पंक्ति में)
52
- - insert:
53
- - id: lsp-actions
54
- name: dsh-lsp-actions
55
- inject: [tools, fs, subprocess]
56
- config:
57
- servers:
58
- ts:
59
- command: typescript-language-server
60
- args: [--stdio]
61
- extensionToLanguage:
62
- ".ts": typescript
63
- formattingOptions: { tabSize: 2, insertSpaces: true }
64
- py:
65
- command: pyright-langserver
66
- args: [--stdio]
67
- extensionToLanguage:
68
- ".py": python
69
- maxDiagnostics: 200
70
- maxCompletionItems: 20
71
- maxCodeActions: 50
72
- maxSymbols: 100
73
- maxSignatures: 10
74
- maxInlayHints: 200
75
- maxResultChars: 16000
76
- timeoutMs: 60000
77
- ```
43
+ # 1. install the bundle into your profile
44
+ dsh plugin --profile web add "github:PerryLink/dsh-lsp-actions#main"
78
45
 
79
- आठों टूल हमेशा पंजीकृत रहते हैं। **खाली `servers` तालिका और बिना माउंटेड `ctx.lsp` seam के कॉल ज़ोर से विफल होते हैं** (`LSP_ACTION_UNAVAILABLE` बताता है कि क्या कॉन्फ़िगर करना है) — प्लगइन वे server कभी शुरू नहीं करता जो आपने कॉन्फ़िगर नहीं किए। इस प्लगइन के **बाद** माउंट हुआ `ctx.lsp` seam अगली कॉल पर पहचान लिया जाता है (seam का पता हर कॉल पर चलता है, इसलिए लोड क्रम मायने नहीं रखता)।
46
+ # or from npm (published releases)
47
+ dsh plugin --profile web add dsh-lsp-actions
80
48
 
81
- ## यह निर्माण से ही सुरक्षित क्यों है
49
+ # 2. restart and verify the row
50
+ dsh --profile web --dump-config | grep -A3 'id: lsp-actions'
51
+ ```
82
52
 
83
- - **फ़ॉर्मेटिंग और रिनेम असली बदलाव हैं, `write`/`edit` जैसे ही माने जाते हैं।** हर बाइट `fs/write-intent` waterfall (निरीक्षण → संरक्षित लेखन → निरीक्षण) और प्रति-कॉल sandbox नीति से गुज़रता है। `lsp_rename` हर संपादित फ़ाइल को पहली लेखन से *पहले* प्री-फ़्लाइट करता है (workspace समाहितता, ओवरलैप जाँच, बाइट-सीमित पठन), ताकि ख़राब server उत्तर आधा-लागू रिनेम न छोड़ सके।
84
- - **बाक़ी सब डिज़ाइन से केवल-पठन है।** कोड एक्शन, कम्प्लीशन, सिंबल, सिग्नेचर और हिंट्स संदर्भ सामग्री के रूप में रिपोर्ट होते हैं; उन्हें लागू करना मॉडल का अपना write/edit निर्णय है। कमांड रूप रिपोर्ट होते हैं और **कभी निष्पादित नहीं होते**।
85
- - **केवल-पठन सत्र ज़ोर से, तेज़ी से और संरचित रूप से विफल होते हैं** — साझा `[sandbox: …]` मार्कर के साथ `LSP_ACTION_READ_ONLY`, किसी भी server दौर से *पहले* उठाया जाता है।
86
- - **एस्केलेशन आधिकारिक टूल्स से मेल खाता है।** प्रतिबंधित फ़ाइलसिस्टम के तहत `lsp_format` और `lsp_rename` वही एक-बार `sandbox_permissions` / `justification` पुनर्प्रयास विज्ञापित करते हैं जो `write`/`edit` करते हैं, `ctx.approval` के ज़रिए हल होता है।
87
- - **संघर्ष कभी कुछ नहीं मिटाते।** अगर फ़ाइल पढ़े जाने के बाद डिस्क पर बदल गई, तो संरक्षित लेखन `LSP_ACTION_CONFLICT` से विफल होता है और मॉडल को चुनने को कहा जाता है: दोबारा पढ़कर फिर चलाएँ, या diff हाथ से लागू करें।
88
- - **टाइमआउट प्लेटफ़ॉर्म के हैं।** हर टूल `timeoutMs` घोषित करता है; आधिकारिक `dsh-tool-call-timeout-policy` उसे लागू करती है, और हर await `exec.signal` का सम्मान करता है।
89
- - **कुछ भी कैश नहीं होता।** परिणाम केवल सत्र लॉग में रहते हैं; सत्रों के बीच कोई स्थायित्व नहीं है।
53
+ ## Install & uninstall
54
+
55
+ - **git channel** (नवीनतम `main`): `dsh plugin --profile web add "github:PerryLink/dsh-lsp-actions#main"` — `prepare` स्क्रिप्ट बिल्ड करती है (`tsc --noEmitOnError`)।
56
+ - **npm channel** (प्रकाशित रिलीज़): `dsh plugin --profile web add dsh-lsp-actions`।
57
+ - **tarball channel**: इस repo में `pnpm pack` चलाएँ, फिर `dsh plugin --profile web add ./dsh-lsp-actions-<version>.tgz`।
58
+ - **uninstall**: `dsh plugin --profile web remove dsh-lsp-actions` (या profile patch से पंक्ति हटाएँ)।
59
+
60
+ ## Configuration
61
+
62
+ सभी ट्यूनेबल Schemastery `Config` फ़ील्ड हैं (cordis.yml से बदले जा सकते हैं)। id-लक्षित ओवरराइड पूरी पंक्ति को बदल देता है — जितनी भी keys चाहिए, सब दोबारा लिखें। `cordis.patch.yml` हर key को इनलाइन दस्तावेज़ित करता है।
63
+
64
+ | Key | Default | Meaning |
65
+ |---|---|---|
66
+ | `servers` | `{}` | नामित language servers; खाली तालिका कोई server सक्रिय नहीं करती |
67
+ | `editor.enabled` | `false` | एडिटर एक्शन प्रोटोकॉल को JSON-RPC stdio पर सेवित करता है (केवल headless backend) |
68
+ | `editor.requestTimeoutMs` | `60000` | एडिटर प्रोटोकॉल का प्रति-रन timeout बजट (ms) |
69
+ | `editor.diagnosticsCacheMaxFiles` | `64` | सीमित LRU डायग्नोस्टिक्स कैश आकार (फ़ाइलों में) |
70
+ | `maxDiagnostics` | `200` | प्रति परिणाम डायग्नोस्टिक्स सीमा |
71
+ | `maxCompletionItems` | `20` | प्रति परिणाम कम्प्लीशन-आइटम सीमा |
72
+ | `maxCodeActions` | `50` | प्रति परिणाम कोड-एक्शन सीमा |
73
+ | `maxSymbols` | `100` | सिंबल-परिणाम सीमा |
74
+ | `maxSignatures` | `10` | सिग्नेचर-हेल्प सीमा |
75
+ | `maxInlayHints` | `200` | इनले-हिंट सीमा |
76
+ | `maxResultChars` | `16000` | रेंडर किए गए परिणाम की सीमा (वर्ण) |
77
+ | `maxDocumentBytes` | `4000000` | दस्तावेज़-पठन सीमा (बाइट) |
78
+ | `timeoutMs` | `60000` | प्रति-कॉल timeout, आधिकारिक timeout नीति द्वारा लागू |
79
+
80
+ हर `servers` एंट्री एक `LspServerEntry` है: `command` (निष्पादन योग्य, लोड पर PATH में हल) और `extensionToLanguage` (`".ts"` → `typescript`) अनिवार्य हैं; वैकल्पिक `fileGlobs`, `args`, `env`, `initializationOptions`, `configuration`, `formattingOptions`, `maxMessageBytes`, `maxStderrBytes`, `killGraceMs`, `shutdownTimeoutMs`, `diagnosticsSettleMs`, `diagnosticsDebounceMs` और `idleTimeoutMs` (`0` = server प्रक्रिया को जीवित रखें) अंतर्निहित stdio क्लाइंट को ट्यून करते हैं।
81
+
82
+ ## Tools & surfaces
83
+
84
+ | Surface | Kind | Notes |
85
+ |---|---|---|
86
+ | `lsp_diagnostics` | tool | `<file>` — कंपाइलर/एनालाइज़र की एरर, वॉर्निंग और हिंट्स — severity, range, message और स्रोत server के साथ (केवल-पठन) |
87
+ | `lsp_format` | tool | `<file> [range?]` — language server से फ़ाइल/चयन को फ़ॉर्मेट करता है और लागू करता है, diff लौटाता है (`fs/write-intent` से लिखता है) |
88
+ | `lsp_completion` | tool | `<file> <line> <character>` — कर्सर स्थान पर कम्प्लीशन सुझाव, इंसर्शन टेक्स्ट सहित (केवल-पठन) |
89
+ | `lsp_code_action` | tool | `<file> [range?] [only?]` — server-सत्यापित क्विकफिक्स/रिफैक्टरिंग उनके edits सहित, किसी range या पहले डायग्नोस्टिक के लिए (केवल संदर्भ) |
90
+ | `lsp_symbols` | tool | `<query?> <file_path?>` — नाम से पूरे workspace में सिंबल खोज, या एक फ़ाइल की रूपरेखा (केवल-पठन) |
91
+ | `lsp_signature` | tool | `<file> <line> <character>` — कॉल के अंदर सिग्नेचर हेल्प (पैरामीटर और दस्तावेज़ीकरण) (केवल-पठन) |
92
+ | `lsp_inlay_hints` | tool | `<file> [range?]` — server के टाइप एनोटेशन और पैरामीटर-नाम संकेत (केवल-पठन) |
93
+ | `lsp_rename` | tool | `<file> <line> <character> <new_name>` — server-सत्यापित रिनेम, पूरे workspace में प्रति-फ़ाइल diffs के साथ लागू (`fs/write-intent` से लिखता है) |
94
+ | `lsp.actions.*` | protocol | एडिटर एक्शन प्रोटोकॉल v1: JSON-RPC पर `lsp.actions.list` / `lsp.actions.run` / `lsp.events` |
95
+ | `examples/vscode/` | extension | केवल-UI VS Code एक्सटेंशन और उससे जुड़ी headless backend संरचना |
96
+
97
+ ## Editor action protocol v1
98
+
99
+ जब किसी समर्पित headless संरचना में `editor.enabled: true` सेट हो, तो `dsh-lsp-actions` नई-पंक्ति-सीमांकित JSON-RPC 2.0 (आधिकारिक SDK/ACP ट्रांसपोर्ट जैसा ही wire फ़्रेमिंग) पर एक स्थिर एडिटर प्रोटोकॉल सेवित करता है:
100
+
101
+ | Method | What it does |
102
+ |---|---|
103
+ | `lsp.actions.list` | `lsp-actions/v1` प्रोटोकॉल संस्करण, एक्शन कैटलॉग (`diagnostics.get`, `completion.get`, `quickfix.apply`, `format` — हर एक `writes` चिह्नित) और पतायोग्य DSH सत्र लौटाता है |
104
+ | `lsp.actions.run` | संरचित `{ requestId, action, status, result \| error }` लिफ़ाफ़े के साथ एक एक्शन निष्पादित करता है; एरर स्थिर `LSP_ACTION_*` कोड रखते हैं |
105
+ | `lsp.events` | स्ट्रीम की गई `lsp.event` सूचनाओं की सदस्यता लेता है: `diagnostics.updated`, `action.status`, `file.changed`, `sessions.changed` |
106
+
107
+ सभी लेखन एक्शन (`quickfix.apply`, `format`) **आधिकारिक अनुमति presets और अनुमोदन** से गुज़रते हैं: एक `read-only` सत्र किसी भी server दौर से पहले `LSP_ACTION_READ_ONLY` से अस्वीकार होता है, edits `fs/write-intent` waterfall से चलते हैं, और `sandbox_permissions` + `justification` एस्केलेशन जोड़ी आधिकारिक `approveEscalation` पूछताछ से हल होती है (कोई उत्तरदाता न होने पर fail-closed)। पूर्ण wire स्पेक, द्विभाषी: [`docs/editor-protocol.md`](docs/editor-protocol.md) · [`docs/editor-protocol.zh-CN.md`](docs/editor-protocol.zh-CN.md)।
108
+
109
+ **वर्ज़निंग और बैकवर्ड-कम्पैटिबिलिटी वादा**
110
+
111
+ - प्रोटोकॉल वर्ज़न-युक्त है — `lsp.actions.list` लौटाता है `protocol: "lsp-actions/v1"`, `version: 1`। **v1 जमा हुआ है:** फ़ील्ड नाम, एक्शन ids, इवेंट प्रकार और एरर कोड हमेशा के लिए स्थिर रहते हैं।
112
+ - विकास **केवल योगात्मक** है: नए एक्शन, फ़ील्ड और इवेंट प्रकार बिना वर्ज़न बढ़ाए आते हैं; मौजूदा अर्थ कभी जगह-पर नहीं बदलते; कोई तोड़ने वाला बदलाव नए `protocol` संस्करण के तहत आता है, जिसे servers साथ-साथ सेवित कर सकते हैं।
113
+ - क्लाइंट को अज्ञात फ़ील्ड, अज्ञात इवेंट प्रकार और अज्ञात एक्शन को अनदेखा करना चाहिए, और स्थिर एरर `code` पर रूट करना चाहिए, संदेश पाठ पर कभी नहीं।
114
+
115
+ **एरर कोड**
116
+
117
+ हर विफलता एक स्थिर `code` रखती है; मॉडल और कॉलर code से रूट करते हैं, संदेश पाठ से कभी नहीं।
118
+
119
+ | Code | Meaning |
120
+ |---|---|
121
+ | `LSP_ACTION_UNAVAILABLE` | कोई server entry नहीं और seam का कोई provider इस फ़ाइल को नहीं संभालता |
122
+ | `LSP_ACTION_UNSUPPORTED` | server (या seam provider) ऑपरेशन का विज्ञापन नहीं करता |
123
+ | `LSP_ACTION_SERVER_FAILED` | server विफल हुआ (अपने stderr टेल सहित); स्टार्टअप विफलताएँ एक बार पुनः प्रयास करती हैं |
124
+ | `LSP_ACTION_MALFORMED_RESPONSE` | server ने संरचनात्मक रूप से अमान्य पेलोड भेजा |
125
+ | `LSP_ACTION_CONFLICT` | फ़ाइल पढ़े जाने के बाद बदल गई, या edits ओवरलैप / सीमा से बाहर / workspace से बाहर हैं |
126
+ | `LSP_ACTION_READ_ONLY` | सत्र का sandbox मोड फ़ॉर्मेटिंग/रिनेम लेखन को मना करता है |
127
+ | `LSP_ACTION_WORKSPACE_REQUIRED` | कॉल करने वाले सत्र के पास server को जड़ देने के लिए workspace cwd नहीं है |
128
+ | `LSP_ACTION_NO_SYMBOL` | server को कर्सर स्थान पर नाम बदलने योग्य कोई सिंबल नहीं मिला |
129
+ | `LSP_ACTION_UNKNOWN` | एडिटर प्रोटोकॉल: अज्ञात एक्शन id, या कोई code action `title`/`index` से मेल नहीं खाया |
130
+ | `LSP_ACTION_INVALID_ARGS` | एडिटर प्रोटोकॉल: दोषपूर्ण एक्शन पैरामीटर |
131
+ | `LSP_ACTION_APPROVAL_UNAVAILABLE` | एडिटर प्रोटोकॉल: अनुमोदन मार्ग व्यापक sandbox मोड नहीं दे सका (fail-closed) |
132
+ | `LSP_PROTOCOL_VERSION_UNSUPPORTED` | एडिटर प्रोटोकॉल: घोषित प्रोटोकॉल संस्करण समर्थित नहीं है |
133
+
134
+ ## VS Code extension
135
+
136
+ [`examples/vscode/`](examples/vscode/) एक **केवल-UI** एक्सटेंशन (DSH सत्रों, डायग्नोस्टिक्स सूची, एक-क्लिक quickfix apply, open-at-range और format वाली साइडबार) और वह headless backend संरचना (`backend/cordis.yml`) देता है जिससे वह ACP-शैली JSON-RPC पर जुड़ता है। एक्सटेंशन शून्य LSP लॉजिक लागू करता है — हर क्षमता और हर लिखा बाइट प्लगइन का है। इंस्टॉल चरण, सेटिंग्स और डेमो-gif रिकॉर्डिंग स्क्रिप्ट [`examples/vscode/README.md`](examples/vscode/README.md) में हैं।
137
+
138
+ ![Editor demo](docs/editor-demo.gif)
139
+
140
+ ## Permissions & data
141
+
142
+ - **अनुमतियाँ**: फ़ॉर्मेटिंग और रिनेम आधिकारिक अनुमति presets और अनुमोदन से चलते हैं — `fs/write-intent` waterfall और `sandbox_permissions` / `justification` एस्केलेशन जोड़ी, `ctx.approval` से हल। प्लगइन अपने workshop manifest में `fs:read`, `fs:write`, `subprocess:spawn` और `network:none` घोषित करता है।
143
+ - **डेटा**: डिस्क पर कुछ भी संग्रहीत नहीं होता; टूल परिणाम केवल सत्र लॉग में रहते हैं (सत्रों के बीच कोई स्थायित्व नहीं)। एडिटर प्रोटोकॉल एक ही सीमित इन-मेमोरी LRU डायग्नोस्टिक्स कैश रखता है, ताज़गी-मुहरित और रीस्टार्ट के बीच कभी स्थायी नहीं।
144
+ - **कोई नेटवर्क नहीं**: प्लगइन कोई नेटवर्क अनुरोध नहीं करता; यह language servers से स्थानीय सबप्रोसेस stdio पर बात करता है।
145
+
146
+ ## Security boundaries
147
+
148
+ - **डिफ़ॉल्ट रूप से केवल-पठन।** आठ टूल में से छह केवल संदर्भ हैं; सिर्फ़ `lsp_format` और `lsp_rename` बदलाव करते हैं, और वे असली `write`/`edit` बदलाव की तरह करते हैं।
149
+ - **आधिकारिक seams, फिर से लागू नहीं।** हर बाइट `fs/write-intent` waterfall (निरीक्षण → संरक्षित लेखन → निरीक्षण) और प्रति-कॉल sandbox नीति से गुज़रता है; एस्केलेशन आधिकारिक `write`/`edit` टूल्स से मेल खाता है।
150
+ - **ज़ोर से, तेज़ी से, संरचित रूप से विफल।** खाली `servers` + बिना `ctx.lsp` seam → `LSP_ACTION_UNAVAILABLE`; केवल-पठन सत्र किसी भी server दौर से पहले → `LSP_ACTION_READ_ONLY`; कमांड रूप रिपोर्ट होते हैं और कभी निष्पादित नहीं होते।
151
+ - **संघर्ष कभी कुछ नहीं मिटाते।** पढ़े जाने के बाद डिस्क पर बदली फ़ाइल `LSP_ACTION_CONFLICT` से विफल होती है; `lsp_rename` पहली लेखन से पहले हर संपादित फ़ाइल को प्री-फ़्लाइट करता है।
152
+ - **सीमित कार्य।** परिणाम सीमाएँ, बाइट सीमाएँ और प्लेटफ़ॉर्म की timeout नीति हर कॉल को सीमित करती हैं; डायग्नोस्टिक्स कैश एक सीमित LRU है।
153
+ - **मॉडल पथ पर कुछ भी कैश नहीं।** टूल परिणाम केवल सत्र लॉग में रहते हैं; डायग्नोस्टिक्स कैश रीस्टार्ट के बीच कभी स्थायी नहीं होता।
90
154
  - **ख़राब server ज़ोर से विफल होते हैं।** ग़ैर-मौजूद निष्पादन योग्य लोड पर विफल होता है; स्टार्टअप पर मरने वाला server कॉल को `LSP_ACTION_SERVER_FAILED` + उसके stderr टेल से विफल करता है (एक नए-प्रक्रिया पुनर्प्रयास के बाद)।
155
+ - **प्रॉम्प्ट स्वच्छता।** प्लगइन सत्र के system prompt में कोई persona या प्रॉम्प्ट गद्य नहीं डालता — उसकी मॉडल-सामना सतह आठ टूल schemas हैं।
91
156
 
92
- ## आर्किटेक्चर
157
+ ## Architecture
93
158
 
94
159
  एक्शन **पहले आधिकारिक seam** से चलते हैं और प्लगइन के अपने न्यूनतम stdio क्लाइंट पर गिरते हैं:
95
160
 
96
- ```
161
+ ```text
97
162
  lsp_diagnostics / lsp_format / lsp_completion / lsp_code_action /
98
163
  lsp_symbols / lsp_signature / lsp_inlay_hints / lsp_rename
99
164
  │
@@ -104,85 +169,56 @@ lsp_symbols / lsp_signature / lsp_inlay_hints / lsp_rename
104
169
  अंतर्निहित stdio क्लाइंट ← servers तालिका (ctx.subprocess.spawn + JSON-RPC)
105
170
  ```
106
171
 
107
- seam विस्तार upstream प्रस्तावित है (`upstream/lsp-action-seam.patch`, PR विवरण `upstream/PR-description.md` में)। जब वह आ जाएगा, प्लगइन बिना बदलाव के काम करता रहेगा — अंतर्निहित क्लाइंट का उपयोग बस बंद हो जाएगा। अंतर्निहित क्लाइंट `servers` तालिका के लिए स्वतंत्र fallback के रूप में बना रहेगा। पूर्ण शोध और डिज़ाइन नोट्स: [`docs/seam-extension-notes.md`](docs/seam-extension-notes.md), [`upstream/README.md`](upstream/README.md)।
108
-
109
- ## कॉन्फ़िगरेशन संदर्भ
110
-
111
- ```ts
112
- interface Config {
113
- /** नामित language servers; खाली = प्लगइन का अपना क्लाइंट कुछ नहीं परोसता। */
114
- servers?: Record<string, LspServerEntry>
115
- maxDiagnostics?: number // डिफ़ॉल्ट 200
116
- maxCompletionItems?: number // डिफ़ॉल्ट 20
117
- maxCodeActions?: number // डिफ़ॉल्ट 50
118
- maxSymbols?: number // डिफ़ॉल्ट 100
119
- maxSignatures?: number // डिफ़ॉल्ट 10
120
- maxInlayHints?: number // डिफ़ॉल्ट 200
121
- maxResultChars?: number // डिफ़ॉल्ट 16000 (पूर्ण रेंडर परिणाम की सीमा)
122
- maxDocumentBytes?: number // डिफ़ॉल्ट 4000000
123
- timeoutMs?: number // डिफ़ॉल्ट 60000 (आधिकारिक timeout नीति द्वारा लागू)
124
- }
125
-
126
- interface LspServerEntry {
127
- command: string // निष्पादन योग्य, लोड पर PATH में हल होता है
128
- extensionToLanguage: Record<string, string> // ".ts" → "typescript"
129
- fileGlobs?: string[] // वैकल्पिक; glob मिलान एक्सटेंशन मैप पर जीतता है
130
- args?: string[] // बिना shell
131
- env?: Record<string, string>
132
- initializationOptions?: unknown
133
- configuration?: unknown // ऑब्जेक्ट रूप workspace/configuration का section-वार उत्तर देता है
134
- formattingOptions?: unknown // जैसे { tabSize: 2, insertSpaces: true }
135
- maxMessageBytes?: number // डिफ़ॉल्ट 16000000
136
- maxStderrBytes?: number // डिफ़ॉल्ट 1000000
137
- killGraceMs?: number // डिफ़ॉल्ट 2000
138
- shutdownTimeoutMs?: number // डिफ़ॉल्ट 5000
139
- diagnosticsSettleMs?: number // डिफ़ॉल्ट 2000 (केवल-push डायग्नोस्टिक्स विंडो)
140
- diagnosticsDebounceMs?: number // डिफ़ॉल्ट 250 (अंतिम push बैच के बाद का शांत काल)
141
- idleTimeoutMs?: number // डिफ़ॉल्ट 0 (0 = server प्रक्रिया को जीवित रखें)
142
- }
143
- ```
144
-
145
- ### त्रुटि कोड
172
+ seam विस्तार upstream प्रस्तावित है (`upstream/lsp-action-seam.patch`, PR विवरण `upstream/PR-description.md` में)। जब वह आ जाएगा, प्लगइन बिना बदलाव के काम करता रहेगा — अंतर्निहित क्लाइंट का उपयोग बस बंद हो जाएगा। अंतर्निहित क्लाइंट `servers` तालिका के लिए स्वतंत्र fallback के रूप में बना रहेगा। **एडिटर प्रोटोकॉल** उसी runner, उसी लेखन पथ और उसी अनुमति मशीनरी का उपयोग करता है। पूर्ण शोध और डिज़ाइन नोट्स: [`docs/seam-extension-notes.md`](docs/seam-extension-notes.md)।
146
173
 
147
- हर विफलता त्रुटि परिणाम पर एक स्थिर `code` रखती है; मॉडल और कॉलर code से रूट करते हैं, संदेश पाठ से कभी नहीं।
174
+ ## Known limitations
148
175
 
149
- | Code | अर्थ |
150
- | --- | --- |
151
- | `LSP_ACTION_UNAVAILABLE` | कोई server entry नहीं और seam का कोई provider इस फ़ाइल को नहीं संभालता। |
152
- | `LSP_ACTION_UNSUPPORTED` | server (या seam provider) ऑपरेशन का विज्ञापन नहीं करता। |
153
- | `LSP_ACTION_SERVER_FAILED` | server विफल हुआ (अपने stderr टेल सहित); स्टार्टअप विफलताएँ एक बार पुनः प्रयास करती हैं। |
154
- | `LSP_ACTION_MALFORMED_RESPONSE` | server ने संरचनात्मक रूप से अमान्य पेलोड भेजा। |
155
- | `LSP_ACTION_CONFLICT` | फ़ाइल पढ़े जाने के बाद बदल गई, या server के edits ओवरलैप / सीमा से बाहर / workspace से बाहर हैं। |
156
- | `LSP_ACTION_READ_ONLY` | सत्र का sandbox मोड फ़ॉर्मेटिंग/रिनेम लेखन को मना करता है। |
157
- | `LSP_ACTION_WORKSPACE_REQUIRED` | कॉल करने वाले सत्र के पास server को जड़ देने के लिए workspace cwd नहीं है। |
158
- | `LSP_ACTION_NO_SYMBOL` | server को कर्सर स्थान पर नाम बदलने योग्य कोई सिंबल नहीं मिला। |
176
+ - **क्षणिक दस्तावेज़।** हर एक्शन फ़ाइल खोलता है, एक अनुरोध चलाता है और फिर बंद कर देता है (आधिकारिक stdio host की तरह)। बिना-दस्तावेज़ अनुरोधों के लिए निवासी खुली फ़ाइल माँगने वाले प्रोजेक्ट-आधारित server (tsls बिना खुली फ़ाइल के `workspace/symbol` मना करता है) को `lsp_symbols` में `file_path` देकर सेवा दी जाती है। tsls इस जीवनचक्र में `textDocument/signatureHelp` का उत्तर `null` से भी देता है; अन्य server (gopls, pyright, rust-analyzer) इसे सामान्य रूप से परोसते हैं।
177
+ - **रेंज फ़ॉर्मेटिंग के लिए server का range provider चाहिए।** केवल पूर्ण-दस्तावेज़ फ़ॉर्मेटिंग विज्ञापित करने वाले server रेंज अनुरोधों को `LSP_ACTION_UNSUPPORTED` से विफल करते हैं।
178
+ - **रिनेम केवल टेक्स्ट edits लागू करता है।** server के रिनेम उत्तर में रिसोर्स ऑपरेशन (फ़ाइल बनाना/मिटाना/नाम बदलना) `LSP_ACTION_UNSUPPORTED` से अस्वीकार होते हैं, और workspace से बाहर के edits कुछ भी लिखे जाने से पहले `LSP_ACTION_CONFLICT` से विफल होते हैं।
159
179
 
160
- ### होस्ट संस्करण समर्थन
180
+ ## Development
161
181
 
162
- प्लगइन DeepSeek Harness पैकेजों को **peer dependencies** के रूप में घोषित करता है (`@deepseek-ai/dsh-fs`, `dsh-llm`, `dsh-sandbox`, `dsh-subprocess`, `dsh-tools` ≥ `0.1.0-rc.6`), ताकि एक ही प्रति होस्ट और प्लगइन दोनों को सेवा दे। `0.1.0-rc.6` के विरुद्ध परीक्षित।
182
+ ```sh
183
+ pnpm install # node ^22.19 || >=24
184
+ pnpm run lint # oxlint over src/ and tests/
185
+ pnpm test # vitest: unit + fixture-server integration + editor-protocol e2e + real tsls e2e
186
+ pnpm run test:coverage # coverage gate
187
+ pnpm build # tsc --noEmitOnError → lib/
188
+ pnpm run prepare # tsc --noEmitOnError (runs on install)
189
+ pnpm run prepublishOnly # tsc --noEmitOnError (runs before publish)
190
+ ```
163
191
 
164
- ### ज्ञात सीमाएँ
192
+ ## Topics
165
193
 
166
- - **क्षणिक दस्तावेज़।** हर एक्शन फ़ाइल खोलता है, एक अनुरोध चलाता है और फिर बंद कर देता है (आधिकारिक stdio host की तरह)। बिना-दस्तावेज़ अनुरोधों के लिए निवासी खुली फ़ाइल माँगने वाले प्रोजेक्ट-आधारित server (tsls बिना खुली फ़ाइल के `workspace/symbol` मना करता है) को `lsp_symbols` में `file_path` देकर सेवा दी जाती है — प्लगइन उस अनुरोध के दौरान रूटिंग फ़ाइल खुली रखता है। tsls इस जीवनचक्र में `textDocument/signatureHelp` का उत्तर `null` से भी देता है; अन्य server (gopls, pyright, rust-analyzer) इसे सामान्य रूप से परोसते हैं।
167
- - **रेंज फ़ॉर्मेटिंग के लिए server का range provider चाहिए।** केवल पूर्ण-दस्तावेज़ फ़ॉर्मेटिंग विज्ञापित करने वाले server रेंज अनुरोधों को `LSP_ACTION_UNSUPPORTED` से विफल करते हैं।
168
- - **रिनेम केवल टेक्स्ट edits लागू करता है।** server के रिनेम उत्तर में रिसोर्स ऑपरेशन (फ़ाइल बनाना/मिटाना/नाम बदलना) `LSP_ACTION_UNSUPPORTED` से अस्वीकार होते हैं, और workspace से बाहर के edits कुछ भी लिखे जाने से पहले `LSP_ACTION_CONFLICT` से विफल होते हैं। `utf-8`/`utf-32` server पर क्रॉस-फ़ाइल रिनेम स्थितियाँ हर संपादित फ़ाइल को पढ़कर डिकोड होती हैं; अपठनीय संपादित फ़ाइल स्थितियों को ग़लत डिकोड करने के बजाय कॉल को संघर्ष के रूप में विफल करती है।
194
+ `dsh`, `dsh-plugin`, `deepseek-harness`, `lsp`, `language-server`, `diagnostics`, `formatting`, `completion`, `code-action`, `symbols`, `signature-help`, `inlay-hints`, `rename`, `refactor`, `ide`, `editor`, `vscode`, `acp`, `json-rpc`
169
195
 
170
- ## विकास
196
+ ## Contributors
171
197
 
172
- ```sh
173
- pnpm install
174
- pnpm run lint # src/ और tests/ पर oxlint
175
- pnpm test # 240+ टेस्ट: यूनिट + fixture-server एकीकरण + असली tsls e2e
176
- pnpm run test:coverage # द्वार: पंक्तियाँ/कथन/फ़ंक्शन ≥ 90%, शाखाएँ ≥ 85%
177
- pnpm build # lib/ उत्पन्न करता है
178
- ```
198
+ - [@PerryLink](https://github.com/PerryLink) — निर्माता और अनुरक्षक: LSP एक्शन क्लाइंट व server जीवनचक्र, सभी आठ टूल, एडिटर एक्शन प्रोटोकॉल, टेस्ट, CI और पाँच-भाषा दस्तावेज़ीकरण।
179
199
 
180
- ## योगदानकर्ता
200
+ ## PerryLink DSH Plugin Family
181
201
 
182
- इस प्रोजेक्ट में योगदान देने वाले सभी लोगों का धन्यवाद:
202
+ यह प्रोजेक्ट [PerryLink](https://github.com/PerryLink) द्वारा अनुरक्षित [15 DeepSeek Harness प्लगइन्स](https://github.com/PerryLink) में से एक है। अगर यह आपकी मदद करता है, तो बाकी भी करेंगे:
183
203
 
184
- - [PerryLink](https://github.com/PerryLink) — प्लगइन स्वयं: LSP एक्शन क्लाइंट व server जीवनचक्र, सभी आठ टूल, टेस्ट, CI और दस्तावेज़ीकरण।
204
+ | Plugin | One-liner |
205
+ |---|---|
206
+ | [dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel) | केवल-पठन MCP रनटाइम पैनल: /mcp कमांड + स्टेटस, टूल्स और एरर वाला Settings टैब |
207
+ | [dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck) | इंजीनियरिंग-अनुशासन गार्ड: आवश्यकताओं की जाँच, टेस्ट गेट, प्रतिकूल समीक्षा |
208
+ | [dsh-background-agents](https://github.com/PerryLink/dsh-background-agents) | Web UI साइडबार, संदेश और व्यवधान के साथ टिकाऊ बैकग्राउंड चाइल्ड एजेंट |
209
+ | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | language servers पर LSP डायग्नोस्टिक्स, फ़ॉर्मेटिंग, कम्प्लीशन, कोड एक्शन और रिनेम |
210
+ | [dsh-output-styles](https://github.com/PerryLink/dsh-output-styles) | Claude Code outputStyles-समतुल्य रनटाइम स्टाइल स्विचिंग |
211
+ | [dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind) | Claude Code /rewind-समतुल्य: स्नैपशॉट, सत्र फ़ोर्क, एक-चरण पुनर्स्थापन |
212
+ | [dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules) | Claude Code-शैली घोषणात्मक allow/deny/ask अनुमति नियम, ऑडिट के साथ |
213
+ | [dsh-auto-review](https://github.com/PerryLink/dsh-auto-review) | अनुमोदन श्रृंखला पर द्वितीय-मॉडल ऑटो-समीक्षा, डिफ़ॉल्ट fail-closed |
214
+ | [dsh-memento](https://github.com/PerryLink/dsh-memento) | अनुमोदन-गेटेड क्रॉस-सत्र मेमोरी: ctx.memory seam + SQLite + memory टूल |
215
+ | [dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security) | सुरक्षा-ऑडिट स्किल पैक: सीक्रेट स्कैन, निर्भरता और आपूर्ति-श्रृंखला समीक्षा |
216
+ | [dsh-session-pin](https://github.com/PerryLink/dsh-session-pin) | टिकाऊ क्रम के साथ Web साइडबार में सत्र पिन करें |
217
+ | [dsh-composer-history](https://github.com/PerryLink/dsh-composer-history) | web composer के लिए टर्मिनल-शैली इनपुट इतिहास: तीर, Ctrl+R खोज |
218
+ | [dsh-github](https://github.com/PerryLink/dsh-github) | DSH के लिए GitHub PR/issues एकीकरण, हर लेखन अनुमोदन-गेटेड |
219
+ | [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) | माँग पर एजेंट स्किल के रूप में प्लगइन-विकास ज्ञानकोश |
220
+ | [dsh-claude-move](https://github.com/PerryLink/dsh-claude-move) | Claude Code सत्र, मेमोरी, स्किल्स और CLAUDE.md को DSH में माइग्रेट करें |
185
221
 
186
222
  ## License
187
223
 
188
- [Apache License 2.0](LICENSE)
224
+ [Apache License 2.0](LICENSE) © 2026 dsh-lsp-actions contributors