dsh-click 0.3.27 → 0.3.28
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 +7 -0
- package/README.en.md +441 -0
- package/README.es.md +441 -0
- package/README.hi.md +441 -0
- package/README.md +262 -194
- package/README.pt.md +441 -0
- package/lib/index.js +1 -1
- package/lib/types/version.d.ts +1 -1
- package/native/win32/dsh-click-helper.ps1 +70 -0
- package/package.json +1 -1
- package/README-es.md +0 -377
- package/README-hi.md +0 -377
- package/README-pt.md +0 -377
- package/README-zh.md +0 -377
package/README.hi.md
ADDED
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<picture>
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-click-hero-en-dark.webp">
|
|
5
|
+
<img src="docs/assets/dsh-click-hero-en-light.webp" width="100%" alt="dsh-click: किसी विंडो के accessibility तत्व (e12 Edit, e13 Button) screen_read से पढ़े जाकर observationId बनते हैं; कार्रवाइयाँ basedOn में उसे उद्धृत करती हैं, freshness, approval और process-identity सुरक्षा सीमा पार करके Windows UIA helper से चलती हैं, और dsh-click/observed तथा dsh-click/action ऑडिट इवेंट में दर्ज होती हैं">
|
|
6
|
+
</picture>
|
|
7
|
+
|
|
8
|
+
# dsh-click
|
|
9
|
+
|
|
10
|
+
**स्क्रीन देखो, फिर काम करो — हर बदलाव वाला क्लिक मंज़ूरी से गुज़रता है, हर अवलोकन और कार्रवाई ऑडिट होती है।**
|
|
11
|
+
|
|
12
|
+
DeepSeek Harness के लिए नेटिव डेस्कटॉप नियंत्रण (Windows पहले): accessibility tree और pixel संकेत टेक्स्ट-मात्र मॉडल को «देखने» देते हैं, विंडो-स्कोप वाला क्लिक और इनपुट उसे «काम करने» देते हैं, और बीच में मंज़ूरी, ताज़गी तथा प्रक्रिया-पहचान की जाँचें रहती हैं।
|
|
13
|
+
|
|
14
|
+
[इंस्टॉल](#तीन-चरणों-में-शुरुआत) · [कॉन्फ़िगरेशन](#कॉन्फ़िगरेशन) · [FAQ](#faq) · [简体中文](README.md) · [English](README.en.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
|
|
15
|
+
|
|
16
|
+
[](LICENSE)
|
|
17
|
+
[](#संगतता)
|
|
18
|
+
[](https://www.npmjs.com/package/dsh-click)
|
|
19
|
+
[](https://github.com/PerryLink/dsh-click/actions/workflows/ci.yml)
|
|
20
|
+
[](#संगतता)
|
|
21
|
+
|
|
22
|
+
[](https://github.com/PerryLink/dsh-click/stargazers)
|
|
23
|
+
[](https://www.npmjs.com/package/dsh-click)
|
|
24
|
+
[](https://dshfind.com/plugins/PerryLink/dsh-click?ref=badge)
|
|
25
|
+
[](https://securityscorecards.dev/viewer/?uri=github.com/PerryLink/dsh-click)
|
|
26
|
+
[](https://dsh.market/)
|
|
27
|
+
[](https://gitee.com/perrylink/dsh-click)
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
dsh plugin --profile <name> add dsh-click
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<sub>सामुदायिक प्लगइन, DeepSeek से असंबद्ध। कैनोनिकल रिपॉज़िटरी: <https://github.com/PerryLink/dsh-click> (Gitee एक मिरर है)।</sub>
|
|
36
|
+
|
|
37
|
+
## यह क्या है
|
|
38
|
+
|
|
39
|
+
`dsh-click` मॉडल को पूरा «देखो → करो» चक्र देता है: `screen_read` किसी विंडो का accessibility tree (तत्व id, प्रकार, नाम, आयत, समर्थित पैटर्न) और pixel स्थिति-संकेत पढ़ता है, या `screen_shot` तस्वीर लेता है; फिर `click` / `type` / `scroll` / `key` उसी विंडो पर तत्व id या निर्देशांक से काम करते हैं। हर बदलाव वाली कार्रवाई को ताज़ा अवलोकन (`basedOn`) उद्धृत करना ही होता है — स्क्रीन बदल गई या अवलोकन पुराना हुआ तो कार्रवाई मॉडल-पठनीय कारण के साथ अस्वीकार होती है; साथ ही डिफ़ॉल्ट रूप से `ctx.approval` से गुज़रती है और लक्ष्य प्रक्रिया की पहचान कार्रवाई से पहले व बाद में सत्यापित होती है। यह डिफ़ॉल्ट रूप से foreground फ़ोकस नहीं छीनता (`focusFallback: never`), और हर अवलोकन व कार्रवाई sanitized `dsh-click/observed` / `dsh-click/action` ऑडिट इवेंट बनती है।
|
|
40
|
+
|
|
41
|
+
<picture>
|
|
42
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-click-flow-v5-dark.svg">
|
|
43
|
+
<img src="docs/assets/dsh-click-flow-v5-light.svg" width="100%" alt="dsh-click की दो-पक्षीय संरचना: बाईं read-only observe plane observationId बनाती है; बीच की SAFETY BOUNDARY basedOn, freshness, approval, helper dispatch और process identity जाँचती है और अस्वीकृति को screen_read पर लौटाती है; दाईं mutating act plane helper से काम करती है; नीचे दोनों sanitized ऑडिट इवेंट हैं">
|
|
44
|
+
</picture>
|
|
45
|
+
|
|
46
|
+
## तीन चरणों में शुरुआत
|
|
47
|
+
|
|
48
|
+
1. **इंस्टॉल करें** (एक चैनल चुनें):
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
# git चैनल (नवीनतम main; git+https://github.com/PerryLink/dsh-click.git के बराबर)
|
|
52
|
+
dsh plugin --profile web add github:PerryLink/dsh-click
|
|
53
|
+
# npm चैनल (प्रकाशित रिलीज़)
|
|
54
|
+
dsh plugin --profile web add dsh-click
|
|
55
|
+
# tarball चैनल: इस रेपो में pnpm pack करके
|
|
56
|
+
dsh plugin --profile web add ./dsh-click-<version>.tgz
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
git चैनल का `prepare` स्क्रिप्ट केवल production निर्भरताओं से बनाता है।
|
|
60
|
+
|
|
61
|
+
2. **न्यूनतम कॉन्फ़िग** (डिफ़ॉल्ट से ही चलता है; केवल विशिष्ट विंडो छूट देने के लिए `autoApproveWindows` बदलें):
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
- insert:
|
|
65
|
+
- id: dsh-click
|
|
66
|
+
name: dsh-click
|
|
67
|
+
config:
|
|
68
|
+
requireApproval: true
|
|
69
|
+
autoApproveWindows: ['^Notepad']
|
|
70
|
+
focusFallback: never
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
3. **माउंट सत्यापित करें** (पुनः आरंभ के बाद):
|
|
74
|
+
|
|
75
|
+
```sh
|
|
76
|
+
dsh --profile web --dump-config | grep -A3 'id: dsh-click'
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
फिर agent से कहें कि विंडो देखकर काम करे — हर बदलाव वाली कार्रवाई पर मंज़ूरी का संकेत आता है:
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
> नोटपैड खोलो, "hello" टाइप करो, फिर स्क्रीन पर जो है उसे पढ़कर बताओ।
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**अनइंस्टॉल**: `dsh plugin --profile web remove dsh-click` (या प्रोफ़ाइल पैच से वह पंक्ति हटाएँ)।
|
|
86
|
+
|
|
87
|
+
> अगर pnpm इस पैकेज के लिए `ERR_PNPM_IGNORED_BUILDS` दिखाए (esbuild की हानिरहित platform-binary जाँच), तो अपने `pnpm-workspace.yaml` में `allowBuilds: { esbuild: true }` जोड़ें — `dsh` CLI सटीक टुकड़ा छाप देता है।
|
|
88
|
+
|
|
89
|
+
<details>
|
|
90
|
+
<summary>DSH Desktop मार्केट से इंस्टॉल करें</summary>
|
|
91
|
+
|
|
92
|
+
सभी PerryLink प्लगइन DSH Desktop के अंतर्निहित मार्केट में ब्राउज़ किए जा सकते हैं: **Market → Sources → Add source → पेस्ट करें** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **→ चुनें**। इंस्टॉलेशन के लिए मार्केट की npm पहचान जाँच और आपकी पुष्टि आवश्यक रहती है।
|
|
93
|
+
|
|
94
|
+
</details>
|
|
95
|
+
|
|
96
|
+
## मुख्य क्षमताएँ
|
|
97
|
+
|
|
98
|
+
`dsh-click` नेटिव डेस्कटॉप को दो ऑडिट-योग्य पक्षों में बाँटता है — अवलोकन और कार्रवाई:
|
|
99
|
+
|
|
100
|
+
- **`screen_shot`** — विंडो (या मुख्य स्क्रीन) की तस्वीर लेकर `maxScreenshotSide` तक छोटा करता है। जो मॉडल तस्वीरें लेता है उसे परिणाम में चित्र मिलता है; केवल-टेक्स्ट मॉडल को टेक्स्ट विवरण मिलता है और वे भी चलते रहते हैं।
|
|
101
|
+
- **`screen_read`** — संरचित अवलोकन: accessibility tree (तत्व id, प्रकार, नाम, आयत, समर्थित पैटर्न) और रंगों सहित pixel स्थिति-संकेत — शुद्ध टेक्स्ट, कोई इमेज मॉडल ज़रूरी नहीं।
|
|
102
|
+
- **`screen_find`** — जिन ऐप्स में accessibility tree नहीं है, उनके लिए वैकल्पिक OCR (`ocr.*`, माउंट पर tesseract जाँचा जाता है) या visual grounding से क्लिक-योग्य टेक्स्ट/वर्णित लक्ष्य खोजता है और स्क्रीन निर्देशांक तथा `observationId` लौटाता है; यह केवल-पठन है और कभी मंज़ूरी नहीं माँगता।
|
|
103
|
+
- **`click` / `type` / `scroll` / `key`** — तत्व id या निर्देशांक से पता किए गए विंडो-स्कोप कार्रवाई। डिलीवरी UIA invoke पसंद करती है और posted विंडो संदेशों पर लौटती है, तथा डिफ़ॉल्ट रूप से foreground फ़ोकस कभी नहीं छीनती; `type` पहले UIA `ValuePattern` तेज़ रास्ता लेता है, फिर `SendInput` से असली कीस्ट्रोक डालता है (CJK-सुरक्षित); posted इनपुट अनदेखा करने वाले ऐप्स पर `key` ईमानदारी से विफलता बताता है।
|
|
104
|
+
- **`app_list` / `app_launch`** — चल रहे ऐप्स और उनकी दिखने वाली विंडो सूचीबद्ध करता है; नाम या executable पथ से ऐप लॉन्च करता है।
|
|
105
|
+
|
|
106
|
+
हर बदलाव वाली कार्रवाई एक ही सुरक्षा सीमा से गुज़रती है:
|
|
107
|
+
|
|
108
|
+
1. **ताज़गी** — कार्रवाई को `basedOn` अवलोकन उद्धृत करना होता है; करने से ठीक पहले विंडो फिर से कैप्चर होती है, और pixel hash (`staleCheckPixels`) या tree (`staleCheckTree`) बदला होने पर, या अवलोकन `maxObservationAgeMs` से पुराना होने पर कार्रवाई अस्वीकार होती है।
|
|
109
|
+
2. **मंज़ूरी** — डिफ़ॉल्ट रूप से हर कार्रवाई `ctx.approval` से गुज़रती है; `autoApproveWindows` के title/executable regex विशिष्ट विंडो छोड़ सकते हैं (वे भी ताज़गी, प्रक्रिया-पहचान और ऑडिट से गुज़रती हैं)।
|
|
110
|
+
3. **प्रक्रिया पहचान** — कार्रवाई से पहले **और** बाद में मालिक प्रक्रिया का pid व executable पथ सत्यापित होता है; बीच में बदलाव हो तो परिणाम ज़ोर से विफल होता है (`PROCESS_CHANGED`)।
|
|
111
|
+
4. **ऑडिट** — अवलोकन और कार्रवाई सत्र लॉग में `dsh-click/observed` / `dsh-click/action` इवेंट के रूप में दर्ज होते हैं (sanitized, केवल-लॉग)।
|
|
112
|
+
|
|
113
|
+
```text
|
|
114
|
+
मॉडल harness
|
|
115
|
+
│ screen_read ──▶ observationId (+ तत्व, पिक्सेल) ← संरचित टेक्स्ट
|
|
116
|
+
│ click {basedOn, target} ──▶ ताज़गी जाँच ──▶ मंज़ूरी ──▶ helper (UIA)
|
|
117
|
+
│ pixel hash बदला? ── अस्वीकार + फिर देखो
|
|
118
|
+
│ कार्रवाई के बाद pid/exe बदला? ── PROCESS_CHANGED
|
|
119
|
+
│ ◀── canonical JSON + ऑडिट इवेंट (dsh-click/action)
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### टूल सतह
|
|
123
|
+
|
|
124
|
+
| टूल | केवल-पठन | मंज़ूरी चाहिए | नोट्स |
|
|
125
|
+
|---|---|---|---|
|
|
126
|
+
| `screen_shot` | ✅ | — | `observationId` लौटाता है जिसे बाद की कार्रवाइयाँ `basedOn` में उद्धृत करती हैं; मॉडल तस्वीरें ले तो चित्र संलग्न करता है |
|
|
127
|
+
| `screen_read` | ✅ | — | accessibility tree + pixel संकेत; तत्व id ही कार्रवाइयों का पता हैं |
|
|
128
|
+
| `screen_find` | ✅ | — | UIA tree न होने पर OCR/visual grounding; निर्देशांक लक्ष्य + `observationId` लौटाता है |
|
|
129
|
+
| `click` | | ✅ | `elementId` या `(x, y)` में से ठीक एक; पहले UIA invoke, फिर posted संदेश |
|
|
130
|
+
| `type` | | ✅ | केवल value पैटर्न वाले तत्व; विफलता पर नियंत्रण का टेक्स्ट बैकअप और बहाल करता है |
|
|
131
|
+
| `scroll` | | ✅ | तत्व (scroll पैटर्न) या विंडो (posted wheel) |
|
|
132
|
+
| `key` | | ✅ | posted कुंजी संयोजन (`"Ctrl+S"`); posted इनपुट अनदेखा करने वाले ऐप्स ज़ोर से अस्वीकार होते हैं |
|
|
133
|
+
| `app_list` | ✅ | — | चल रहे ऐप्स और उनकी दिखने वाली विंडो |
|
|
134
|
+
| `app_launch` | | ✅ | नाम या executable पथ से, वैकल्पिक आर्ग्युमेंट के साथ |
|
|
135
|
+
|
|
136
|
+
### उदाहरण
|
|
137
|
+
|
|
138
|
+
ये प्लगइन के वास्तविक प्रवेश बिंदु हैं; एक बार इंस्टॉल करके एक चलाएँ।
|
|
139
|
+
|
|
140
|
+
**विस्तृत उदाहरण** — कमांड `app_list`, इनपुट:
|
|
141
|
+
|
|
142
|
+
```json
|
|
143
|
+
{}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
आउटपुट:
|
|
147
|
+
|
|
148
|
+
```text
|
|
149
|
+
1 running application(s) with windows:
|
|
150
|
+
- Demo (pid 4242, C:\Apps\demo.exe)
|
|
151
|
+
- [windowId 1122867] "Demo App" at (10, 20) 800x600
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
*Observed from `plugins/dsh-click/tests/tools.spec.ts:159-185; renderer at src/tools.ts:933-942`*
|
|
155
|
+
|
|
156
|
+
**विफलता शाखा** — इनपुट:
|
|
157
|
+
|
|
158
|
+
```text
|
|
159
|
+
{}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
आउटपुट:
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
Error: dsh-click backend unavailable on linux: Linux backend is reserved but not implemented yet (Windows-first); only Windows can act today
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
*Observed from `plugins/dsh-click/src/platform/selection.ts:61-62,81; plugins/dsh-click/src/tools.ts:133-136; plugins/dsh-click/tests/tools.spec.ts:226-245`*
|
|
169
|
+
|
|
170
|
+
**संक्षिप्त उदाहरण**: `screen_read` · `app_list`
|
|
171
|
+
|
|
172
|
+
## कॉन्फ़िगरेशन
|
|
173
|
+
|
|
174
|
+
सभी विकल्प Schemastery `Config` फ़ील्ड हैं (cordis.yml से बदले जा सकते हैं)। id-लक्षित ओवरराइड पूरी पंक्ति बदल देता है — जो कुंजियाँ चाहिए वे सब दोबारा लिखें। `cordis.patch.yml` हर कुंजी का इनलाइन दस्तावेज़ देता है।
|
|
175
|
+
|
|
176
|
+
सबसे अधिक उपयोग होने वाली कुंजियाँ:
|
|
177
|
+
|
|
178
|
+
| कुंजी | डिफ़ॉल्ट | अर्थ |
|
|
179
|
+
|---|---|---|
|
|
180
|
+
| `requireApproval` | `true` | हर बदलाव वाली कार्रवाई मंज़ूरी से गुज़रती है; अवलोकन कभी नहीं पूछते |
|
|
181
|
+
| `autoApproveWindows` | `[]` | मंज़ूरी का सवाल छोड़ने वाले विंडो title/executable regex (ताज़गी, प्रक्रिया-पहचान और ऑडिट फिर भी लागू) |
|
|
182
|
+
| `focusFallback` | `never` | क्या कार्रवाई अंतिम उपाय के तौर पर लक्ष्य विंडो को foreground ला सकती है (`never` / `allow`) |
|
|
183
|
+
| `imageMode` | `auto` | `screen_shot` रेंडरिंग: `auto` (मॉडल तस्वीरें ले तो चित्र, वरना टेक्स्ट) या `text` |
|
|
184
|
+
| `staleCheckPixels` | `true` | हर कार्रवाई से पहले नया pixel hash तुलना करता है, बदलाव पर अस्वीकार |
|
|
185
|
+
| `staleCheckTree` | `target` | accessibility tree ताज़गी: `target` पता किए तत्व की जाँच (डिफ़ॉल्ट), `strict` किसी भी बदले नोड पर अस्वीकार, `off` पूरे tree hash को छोड़ता है (पहचान/आयु/pixel जाँचें लागू रहती हैं) |
|
|
186
|
+
| `maxObservationAgeMs` | `30000` | कार्रवाई कितने ms पुराना अवलोकन उद्धृत कर सकती है (1000..600000) |
|
|
187
|
+
| `auditSessionEvents` | `true` | `dsh-click/observed` / `dsh-click/action` ऑडिट इवेंट जोड़े जाएँ या नहीं; `false` ऑडिट appends पूरी तरह रोक देता है |
|
|
188
|
+
|
|
189
|
+
<details>
|
|
190
|
+
<summary>पूर्ण कॉन्फ़िगरेशन तालिका (17 पंक्तियाँ)</summary>
|
|
191
|
+
|
|
192
|
+
| कुंजी | डिफ़ॉल्ट | अर्थ |
|
|
193
|
+
|---|---|---|
|
|
194
|
+
| `requireApproval` | `true` | हर बदलाव वाली कार्रवाई मंज़ूरी से गुज़रती है; अवलोकन कभी नहीं पूछते |
|
|
195
|
+
| `autoApproveWindows` | `[]` | मंज़ूरी का सवाल छोड़ने वाले विंडो title/executable regex (ताज़गी, प्रक्रिया-पहचान और ऑडिट फिर भी लागू) |
|
|
196
|
+
| `auditSessionEvents` | `true` | `dsh-click/observed` / `dsh-click/action` सत्र ऑडिट इवेंट जोड़ता है। अनुकूली गेट बिना envelope वाले host पर append पहले ही छोड़ देता है (rc.6–rc.8, 0.1.1-rc.2, और 0.1.2-rc.1 जो पढ़ते समय अज्ञात प्रकार पर फेल-क्लोज़्ड है); `false` ऑडिट appends पूरी तरह रोक देता है। `0.1.2-rc.1` (2026-09-02 को अनुकूलित): सत्र envelope अपना ignorable फ़ील्ड केवल संग्रहीत-लॉग पठन संगतता के लिए रखता है — `Session.append` अभी भी इसे स्टैम्प नहीं कर सकता, इसलिए गेट व्यवहार अपरिवर्तित है |
|
|
197
|
+
| `focusFallback` | `never` | क्या कार्रवाई अंतिम उपाय के तौर पर लक्ष्य विंडो को foreground ला सकती है (`never` / `allow`) |
|
|
198
|
+
| `imageMode` | `auto` | `screen_shot` रेंडरिंग: `auto` (मॉडल तस्वीरें ले तो चित्र, वरना टेक्स्ट) या `text` |
|
|
199
|
+
| `helperTimeoutMs` | `30000` | प्रति helper कॉल टाइमआउट ms में (1..300000) |
|
|
200
|
+
| `maxHelperOutputBytes` | `25165824` | एक helper प्रतिक्रिया की बाइट सीमा (1024..67108864) |
|
|
201
|
+
| `maxScreenshotSide` | `2560` | स्क्रीनशॉट की सबसे लंबी भुजा पिक्सेल में (320..7680); बड़ी कैप्चर छोटी की जाती हैं |
|
|
202
|
+
| `staleCheckPixels` | `true` | हर कार्रवाई से पहले नया pixel hash तुलना करता है, बदलाव पर अस्वीकार |
|
|
203
|
+
| `staleCheckTree` | `target` | accessibility tree ताज़गी: `target` पता किए तत्व की जाँच (डिफ़ॉल्ट), `strict` किसी भी बदले नोड पर अस्वीकार, `off` घड़ी/कर्सर वाली विंडो के लिए पूरे tree hash को छोड़ता है (पहचान/आयु/pixel जाँचें लागू रहती हैं) |
|
|
204
|
+
| `maxObservationAgeMs` | `30000` | कार्रवाई कितने ms पुराना अवलोकन उद्धृत कर सकती है (1000..600000) |
|
|
205
|
+
| `maxCachedObservations` | `8` | कैश्ड अवलोकनों की LRU सीमा (1..64) |
|
|
206
|
+
| `maxElements` | `500` | प्रति `screen_read` accessibility तत्वों की सीमा (1..2000) |
|
|
207
|
+
| `maxTreeDepth` | `32` | accessibility tree traversal की अधिकतम गहराई (1..64) |
|
|
208
|
+
| `maxTextLength` | `200` | sanitized मॉडल-दृश्य स्ट्रिंग्स की truncation लंबाई (16..10000) |
|
|
209
|
+
| `rollbackEnabled` | `true` | `type` विफल होने पर नियंत्रण का टेक्स्ट बैकअप और बहाल करता है |
|
|
210
|
+
| `ocr.enabled` / `command` / `language` | `true` / `tesseract` / `eng` | `screen_find` पथ के लिए वैकल्पिक OCR (माउंट पर जाँचा जाता है; tesseract न हो तो अनुपलब्ध हो जाता है) |
|
|
211
|
+
|
|
212
|
+
</details>
|
|
213
|
+
|
|
214
|
+
आपके प्रोफ़ाइल पैच में ओवरराइड उदाहरण:
|
|
215
|
+
|
|
216
|
+
```yaml
|
|
217
|
+
- insert:
|
|
218
|
+
- id: dsh-click
|
|
219
|
+
name: dsh-click
|
|
220
|
+
config:
|
|
221
|
+
requireApproval: true
|
|
222
|
+
autoApproveWindows: ['^Notepad']
|
|
223
|
+
focusFallback: never
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## FAQ
|
|
227
|
+
|
|
228
|
+
<details>
|
|
229
|
+
<summary>स्क्रीनशॉट और अवलोकन कहाँ रहते हैं? स्क्रीन सामग्री डिस्क पर जा सकती है?</summary>
|
|
230
|
+
|
|
231
|
+
`screen_shot` की तस्वीर harness के attachment store में जाती है (content-addressed, host की अपनी attachment नीति के अधीन) और मॉडल तक केवल उसी टूल परिणाम के ज़रिए पहुँचती है। अवलोकन स्वयं मेमोरी में रहते हैं (सीमित LRU, `maxCachedObservations`, रीस्टार्ट पर खो जाते हैं); इसके अलावा प्लगइन न डिस्क पर कुछ लिखता है, न नेटवर्क अनुरोध करता है, न क्रेडेंशियल रखता है। सत्र लॉग में केवल `dsh-click/*` ऑडिट इवेंट जाते हैं, और विंडो title, executable पथ तथा मुक्त टेक्स्ट लिखे या दिखाए जाने से पहले sanitized व लंबाई-सीमित होते हैं।
|
|
232
|
+
|
|
233
|
+
</details>
|
|
234
|
+
|
|
235
|
+
<details>
|
|
236
|
+
<summary>macOS / Linux पर क्या होता है? चुपचाप टूटता है?</summary>
|
|
237
|
+
|
|
238
|
+
कुछ भी मौन नहीं है। दोनों backend आरक्षित हैं पर लागू नहीं, इसलिए हर कॉल मॉडल-पठनीय कारण के साथ फेल-क्लोज़्ड होती है (`dsh-click backend unavailable on linux: ...`), और प्रोफ़ाइल हर जगह बूट होता रहता है। Windows पर `subprocess` सेवा न हो या helper उपलब्ध न हो तो कॉल ज़ोर से अस्वीकार होती है, सफलता का दिखावा नहीं।
|
|
239
|
+
|
|
240
|
+
</details>
|
|
241
|
+
|
|
242
|
+
<details>
|
|
243
|
+
<summary>क्या यह अन्य प्लगइनों से कमांड, सेवा या slot के लिए टकराता है?</summary>
|
|
244
|
+
|
|
245
|
+
यह कोई service key प्रदान नहीं करता और केवल दो वैकल्पिक seam उपभोग करता है (`dsh-click/backend`, `dsh-click/grounding`, परीक्षण/embedding के लिए); कोई क्लाइंट slot, कोई `webServer` रूट, कोई waterfall listener पंजीकृत नहीं करता; हर ऑडिट इवेंट `dsh-click/*` namespace में रहता है। हर टूल पंजीकरण `ctx.effect` में लिपटा है, इसलिए रोकने/हॉट-रिलोड पर केवल अपने पंजीकृत टूल हटते हैं।
|
|
246
|
+
|
|
247
|
+
</details>
|
|
248
|
+
|
|
249
|
+
<details>
|
|
250
|
+
<summary>प्रदर्शन लागत कितनी है? क्या हर कार्रवाई स्क्रीन फिर कैप्चर करती है?</summary>
|
|
251
|
+
|
|
252
|
+
अवलोकन माँग पर बनते हैं: `screen_read` केवल accessibility tree पढ़ता है (शुद्ध टेक्स्ट), जबकि `screen_shot` PNG एन्कोड करता है। हर बदलाव वाली कार्रवाई ताज़गी तुलना के लिए लक्ष्य विंडो एक बार फिर कैप्चर करती है (डिफ़ॉल्ट रूप से pixel hash और tree) — यह सुरक्षा सीमा का हिस्सा है। helper कॉल `helperTimeoutMs` / `maxHelperOutputBytes` से सीमित हैं, और अवलोकन कैश डिफ़ॉल्ट रूप से 8 प्रविष्टियाँ रखता है।
|
|
253
|
+
|
|
254
|
+
</details>
|
|
255
|
+
|
|
256
|
+
## सुरक्षा सीमाएँ
|
|
257
|
+
|
|
258
|
+
- **पहले देखो, फिर करो, हर बार।** कार्रवाइयों को ताज़ा अवलोकन उद्धृत करना होता है; बदली स्क्रीन (pixel hash) या पुराना अवलोकन मॉडल-पठनीय कारण के साथ अस्वीकार होता है और फिर देखने को कहता है।
|
|
259
|
+
- **मंज़ूरी डिफ़ॉल्ट है।** जब तक आप विशिष्ट विंडो छूट न दें, `requireApproval: true`; हर कार्रवाई — अनुमत या नहीं — ऑडिट होती है।
|
|
260
|
+
- **foreground फ़ोकस नहीं छीना जाता।** helper लक्ष्य विंडो को कभी foreground नहीं लाता (डिफ़ॉल्ट `focusFallback: 'never'`); इनपुट UIA या posted संदेशों से पहुँचता है ताकि पृष्ठभूमि विंडो पर असर न हो। `focusFallback: 'allow'` एकमात्र स्वीकृत अपवाद है।
|
|
261
|
+
- **प्रक्रिया पहचान फिर सत्यापित होती है** हर कार्रवाई से ठीक पहले और बाद में; बीच में प्रक्रिया बदलने पर परिणाम विफल होता है (`PROCESS_CHANGED`)।
|
|
262
|
+
- **sanitized आउटपुट।** नियंत्रण अक्षर हटाए जाते हैं, टैब संकुचित होते हैं, और क्रेडेंशियल-आकार के मान (कुंजियाँ, token, JWT, bearer हेडर) मॉडल या लॉग तक पहुँचने से पहले redact होते हैं।
|
|
263
|
+
- **फेल क्लोज़्ड।** असमर्थित प्लेटफ़ॉर्म, गायब subprocess सेवा या अनुपलब्ध helper हर कॉल को ज़ोर से अस्वीकार करते हैं — प्रोफ़ाइल हर जगह बूट होते रहते हैं।
|
|
264
|
+
|
|
265
|
+
## अनुमतियाँ और डेटा
|
|
266
|
+
|
|
267
|
+
- **अनुमतियाँ**: बदलाव वाली कार्रवाइयाँ आधिकारिक `ctx.approval` seam से गुज़रती हैं; प्लगइन उसे कभी दोबारा लागू या बायपास नहीं करता। `autoApproveWindows` केवल *विशिष्ट विंडो के लिए सवाल छोड़ता* है; वह ताज़गी या प्रक्रिया-पहचान जाँचें बंद नहीं कर सकता। `dshWorkshop` manifest `fs:read`, `subprocess:spawn`, `session:append`, `network:none`, `native-code:none` घोषित करता है।
|
|
268
|
+
- **डेटा**: attachment store में रखी तस्वीरों (content-addressed, harness की अपनी attachment नीति के अधीन) के अलावा प्लगइन डिस्क पर कुछ नहीं रखता। अवलोकन केवल मेमोरी में कैश होते हैं (सीमित LRU)। कोई नेटवर्क अनुरोध नहीं, कोई क्रेडेंशियल भंडारण नहीं।
|
|
269
|
+
- **सत्र लॉग**: `dsh-click/observed` और `dsh-click/action` केवल-लॉग ऑडिट इवेंट हैं जो sanitized विंडो/प्रक्रिया तथ्य ले जाते हैं; title, पथ और मुक्त टेक्स्ट लिखे या दिखाए जाने से पहले redact व लंबाई-सीमित होते हैं।
|
|
270
|
+
|
|
271
|
+
## ज्ञात सीमाएँ
|
|
272
|
+
|
|
273
|
+
- **Windows पहले।** macOS और Linux backend आरक्षित हैं; उन प्लेटफ़ॉर्म पर हर कॉल स्पष्ट कारण के साथ फेल-क्लोज़्ड होती है।
|
|
274
|
+
- **केवल-टेक्स्ट निष्ठा।** `screen_read` इस पर निर्भर है कि ऐप UIAutomation उजागर करे; accessibility tree न होने पर केवल pixel संकेत मिलते हैं, साथ में `screen_find` का OCR/grounding पथ। निर्देशांक से क्लिक उपलब्ध रहता है।
|
|
275
|
+
- **posted-इनपुट ऐप्स।** कुछ ऐप posted विंडो संदेश अनदेखा करते हैं (गेम, कुछ Electron सतहें); `key` सफलता का दिखावा नहीं करता, ईमानदारी से बताता है। 0.3.24 से `type` का `SendInput` fallback असली कीबोर्ड इनपुट और CJK टेक्स्ट संभालता है, पर लक्ष्य ऐप के अपने इनपुट मॉडल से सीमित रहता है।
|
|
276
|
+
- **बिना envelope वाले harness builds पर सत्र ऑडिट।** ऑडिट इवेंट अनुकूली गेट से गुज़रते हैं: जो host शब्दावली जानते हैं वे सीधे जोड़ते हैं, `ignorable` envelope वाले host मार्कर के साथ जोड़ते हैं, और बिना envelope वाले host — `0.1.0-rc.6`–`0.1.0-rc.8`, `0.1.1-rc.2`, और `0.1.2-rc.1` (जो ignorable मार्कर स्टैम्प नहीं कर सकता — envelope फ़ील्ड केवल संग्रहीत-लॉग पठन संगतता के लिए रखा गया है — और पढ़ते समय अज्ञात प्रकार पर फेल-क्लोज़्ड है) — को कोई ऑडिट append नहीं मिलता; टूल परिणाम ही पुनर्निर्माण योग्य ऑडिट ट्रेल रहते हैं। `auditSessionEvents: false` से ऑडिट appends पूरी तरह रोकें।
|
|
277
|
+
|
|
278
|
+
## अन्य DSH प्लगइनों के साथ इंटरऑपरेबिलिटी
|
|
279
|
+
|
|
280
|
+
`dsh-click` केवल टूल सतह उजागर करता है और अन्य प्लगइनों के seam में शामिल नहीं होता:
|
|
281
|
+
|
|
282
|
+
- **केवल दो हार्ड सेवाएँ।** `inject = ['tools', 'subprocess']`; कोई service key प्रदान नहीं करता, इसलिए सेवा-कुंजी टकराव असंभव।
|
|
283
|
+
- **कोई क्लाइंट या HTTP संसाधन नहीं।** कोई क्लाइंट slot, कोई `webServer` रूट, कोई `agent/pre-step` / `tools/post-execute` waterfall listener पंजीकृत नहीं करता, और globals नहीं बदलता।
|
|
284
|
+
- **namespaced ऑडिट।** केवल `dsh-click/observed` और `dsh-click/action` लिखता है; जब host शब्दावली नहीं जानता तो अनुकूली गेट उन्हें छोड़ देता है और टूल परिणाम ही पुनर्निर्माण योग्य ट्रेल रहते हैं।
|
|
285
|
+
- **वैकल्पिक seams degrade होते हैं।** `dsh-click/backend` और `dsh-click/grounding` केवल परीक्षण/embedding के लिए हैं; असली deployment प्लेटफ़ॉर्म चयन पर लौटता है और किसी अन्य प्लगइन की आवश्यकता नहीं रखता।
|
|
286
|
+
- **पंजीकरण प्रभाव हैं।** हर `ctx.tools.register` `ctx.effect` में लिपटा है, इसलिए रोकने/हॉट-रिलोड पर केवल अपने पंजीकृत टूल हटते हैं।
|
|
287
|
+
|
|
288
|
+
## संगतता
|
|
289
|
+
|
|
290
|
+
| सतह | स्थिति |
|
|
291
|
+
|---|---|
|
|
292
|
+
| Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (GitHub tag, 2026-09-25 को सत्यापित)। 2026-09-11 को `dsh-v0.1.7-alpha.1` master checkout के विरुद्ध सत्यापित (पूर्ण गेट शृंखला + profile इंस्टॉल स्मोक)। `engines.dsh`: `>=0.2.1-0 <0.3.0 \|\| >=0.2.2-0 <0.3.0` |
|
|
293
|
+
| Node | `^22.19.0 \|\| >=24.9.0` |
|
|
294
|
+
| प्लेटफ़ॉर्म | **Windows पहले** (UIAutomation + Win32 इनपुट, साथ में PowerShell helper); macOS/Linux backend आरक्षित हैं और स्पष्ट कारण के साथ फेल-क्लोज़्ड होते हैं |
|
|
295
|
+
| मॉडल | केवल-टेक्स्ट मॉडल पूर्ण रूप से समर्थित (`screen_read` संरचित टेक्स्ट देता है); विज़न मॉडल को अतिरिक्त रूप से `screen_shot` चित्र मिलते हैं |
|
|
296
|
+
|
|
297
|
+
## इकोसिस्टम और गुणवत्ता
|
|
298
|
+
|
|
299
|
+
- [Gitee मिरर](https://gitee.com/perrylink/dsh-click) (सिंक मिरर; GitHub कैनोनिकल है)
|
|
300
|
+
- [dshfind प्लगइन पेज](https://dshfind.com/plugins/PerryLink/dsh-click) (इंस्टॉल और रैंकिंग)
|
|
301
|
+
- [OpenSSF Scorecard रिपोर्ट](https://securityscorecards.dev/viewer/?uri=github.com/PerryLink/dsh-click) ([.github/workflows/scorecard.yml](.github/workflows/scorecard.yml) द्वारा संचालित)
|
|
302
|
+
- [dsh-plugin-doctor सत्यापन रिपोर्ट](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章) (K10–K13 सभी `pass`)
|
|
303
|
+
- [DSH Market](https://dsh.market/) (सूचीबद्ध)
|
|
304
|
+
- **1024 स्टोर चैनल**: एक बार `npm i -g dsh1024`, फिर `dsh1024 plugin --profile web add dsh-click` ([deepseek1024.com](https://deepseek1024.com) इंस्टॉल रैंकिंग में गिना जाता है)
|
|
305
|
+
- [इकोसिस्टम नॉलेज बेस](https://perrylink.github.io/dsh-plugin-guide/) — मापे गए आँकड़े, मार्केटिंग नहीं: डेवलपमेंट गाइड · चयन डेटा · रखरखाव मानदंड
|
|
306
|
+
|
|
307
|
+
## डेवलपमेंट
|
|
308
|
+
|
|
309
|
+
```sh
|
|
310
|
+
pnpm install # node ^22.19 || >=24
|
|
311
|
+
pnpm run typecheck # tsc: src + tests, स्थानीय harness checkout के विरुद्ध
|
|
312
|
+
pnpm run typecheck:ci # tsc: प्रकाशित host प्रकारों के विरुद्ध (paths बिना)
|
|
313
|
+
pnpm test # vitest: 79 परीक्षण, 13 फ़ाइलें (helper smoke Windows पर चलता है)
|
|
314
|
+
pnpm run build # tsdown bundle + tsc declarations (lib/)
|
|
315
|
+
pnpm run verify:self-contained # निर्भरता स्पेक registry से हल होती हैं
|
|
316
|
+
pnpm run verify:artifacts # बनी ESM सतह + native helper मौजूद
|
|
317
|
+
pnpm run check:readmes # पाँच-भाषा README संगति
|
|
318
|
+
pnpm pack # प्रकाशित tarball
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
README की छवियाँ [`scripts/gen-readme-assets.py`](scripts/gen-readme-assets.py) (Python + Pillow) से प्रोग्रामेटिक रूप में बनती हैं और सुरक्षित रूप से दोबारा चलाई जा सकती हैं: `python scripts/gen-readme-assets.py`।
|
|
322
|
+
|
|
323
|
+
Topics: `dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `computer-use`, `windows-automation`, `uiautomation`, `desktop-control`, `screen-reader`
|
|
324
|
+
|
|
325
|
+
## परिवार और आभार
|
|
326
|
+
|
|
327
|
+
यह प्रोजेक्ट [PerryLink](https://github.com/PerryLink) के DeepSeek Harness प्लगइन परिवार का हिस्सा है (सभी Apache-2.0)। अगर यह उपयोगी लगे, तो **एक स्टार अगले व्यक्ति को इसे खोजने में मदद करता है** — इसके पीछे कुछ भी लॉक नहीं है।
|
|
328
|
+
|
|
329
|
+
- [Windows helper स्मोक चेकलिस्ट](docs/windows-smoke.md) — 0.3.24+ के लिए असली इनपुट/फ़ोकस सत्यापन।
|
|
330
|
+
- [@LIU12312-Source](https://github.com/LIU12312-Source) — Windows helper के लिए असली `SendInput`/foreground-फ़ोकस fallback (PR #21)।
|
|
331
|
+
- [@Mchsd](https://github.com/Mchsd) — उन host के लिए `auditSessionEvents` opt-out जोड़ा जिनका सत्र रीडर `dsh-click` ऑडिट इवेंट अस्वीकार करता है (#2)।
|
|
332
|
+
- [@PerryLink](https://github.com/PerryLink) — निर्माता और रखरखावकर्ता: टूल सतह, कार्रवाई सुरक्षा सीमा, Windows native helper, sanitizers, और पाँच-भाषा दस्तावेज़।
|
|
333
|
+
|
|
334
|
+
<details>
|
|
335
|
+
<summary>सभी प्लगइन खोलें</summary>
|
|
336
|
+
|
|
337
|
+
| प्लगइन | स्थिति |
|
|
338
|
+
|---|---|
|
|
339
|
+
| **[dsh-aqua-input-check](https://github.com/PerryLink/dsh-aqua-input-check)** | |
|
|
340
|
+
| **[dsh-archive-check](https://github.com/PerryLink/dsh-archive-check)** | |
|
|
341
|
+
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | |
|
|
342
|
+
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | 🧊 फ़्रोज़न — रेपो README देखें |
|
|
343
|
+
| **[dsh-bid-ca-precheck](https://github.com/PerryLink/dsh-bid-ca-precheck)** | |
|
|
344
|
+
| **[dsh-bid-qual-check](https://github.com/PerryLink/dsh-bid-qual-check)** | |
|
|
345
|
+
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | 🧊 फ़्रोज़न — रेपो README देखें |
|
|
346
|
+
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | |
|
|
347
|
+
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | |
|
|
348
|
+
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | |
|
|
349
|
+
| **[dsh-contract-stance](https://github.com/PerryLink/dsh-contract-stance)** | |
|
|
350
|
+
| **[dsh-customs-doc-check](https://github.com/PerryLink/dsh-customs-doc-check)** | |
|
|
351
|
+
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | 🧊 फ़्रोज़न — रेपो README देखें |
|
|
352
|
+
| **[dsh-demurrage-ledger](https://github.com/PerryLink/dsh-demurrage-ledger)** | |
|
|
353
|
+
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | |
|
|
354
|
+
| **[dsh-drill-script-check](https://github.com/PerryLink/dsh-drill-script-check)** | |
|
|
355
|
+
| **[dsh-eia-guide-check](https://github.com/PerryLink/dsh-eia-guide-check)** | |
|
|
356
|
+
| **[dsh-emergency-plan](https://github.com/PerryLink/dsh-emergency-plan)** | |
|
|
357
|
+
| **[dsh-essay-rubric-check](https://github.com/PerryLink/dsh-essay-rubric-check)** | |
|
|
358
|
+
| **[dsh-evidence-check](https://github.com/PerryLink/dsh-evidence-check)** | |
|
|
359
|
+
| **[dsh-export-ctl-check](https://github.com/PerryLink/dsh-export-ctl-check)** | |
|
|
360
|
+
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | |
|
|
361
|
+
| **[dsh-fmea-table-check](https://github.com/PerryLink/dsh-fmea-table-check)** | |
|
|
362
|
+
| **[dsh-forecast-penalty](https://github.com/PerryLink/dsh-forecast-penalty)** | |
|
|
363
|
+
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | |
|
|
364
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | |
|
|
365
|
+
| **[dsh-gongwen-flow-check](https://github.com/PerryLink/dsh-gongwen-flow-check)** | |
|
|
366
|
+
| **[dsh-gongwen-word-check](https://github.com/PerryLink/dsh-gongwen-word-check)** | |
|
|
367
|
+
| **[dsh-guard-plan-qc](https://github.com/PerryLink/dsh-guard-plan-qc)** | |
|
|
368
|
+
| **[dsh-hazchem-check](https://github.com/PerryLink/dsh-hazchem-check)** | |
|
|
369
|
+
| **[dsh-hazplan-check](https://github.com/PerryLink/dsh-hazplan-check)** | |
|
|
370
|
+
| **[dsh-hidden-risk-map](https://github.com/PerryLink/dsh-hidden-risk-map)** | |
|
|
371
|
+
| **[dsh-hs-classify](https://github.com/PerryLink/dsh-hs-classify)** | |
|
|
372
|
+
| **[dsh-icd-rule-check](https://github.com/PerryLink/dsh-icd-rule-check)** | |
|
|
373
|
+
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | |
|
|
374
|
+
| **[dsh-lawcite-adapter](https://github.com/PerryLink/dsh-lawcite-adapter)** | |
|
|
375
|
+
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | |
|
|
376
|
+
| **[dsh-lc-doc-check](https://github.com/PerryLink/dsh-lc-doc-check)** | |
|
|
377
|
+
| **[dsh-learning-gap-check](https://github.com/PerryLink/dsh-learning-gap-check)** | |
|
|
378
|
+
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | |
|
|
379
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | |
|
|
380
|
+
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | |
|
|
381
|
+
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | |
|
|
382
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | |
|
|
383
|
+
| **[dsh-medrec-qc](https://github.com/PerryLink/dsh-medrec-qc)** | |
|
|
384
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | 🧊 फ़्रोज़न — रेपो README देखें |
|
|
385
|
+
| **[dsh-nsfc-form-check](https://github.com/PerryLink/dsh-nsfc-form-check)** | |
|
|
386
|
+
| **[dsh-nurse-record-check](https://github.com/PerryLink/dsh-nurse-record-check)** | |
|
|
387
|
+
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | |
|
|
388
|
+
| **[dsh-origin-rvc-check](https://github.com/PerryLink/dsh-origin-rvc-check)** | |
|
|
389
|
+
| **[dsh-ota-review-check](https://github.com/PerryLink/dsh-ota-review-check)** | |
|
|
390
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | |
|
|
391
|
+
| **[dsh-paper-doc-adapter](https://github.com/PerryLink/dsh-paper-doc-adapter)** | |
|
|
392
|
+
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | |
|
|
393
|
+
| **[dsh-permit-report-check](https://github.com/PerryLink/dsh-permit-report-check)** | |
|
|
394
|
+
| **[dsh-pipeline-check](https://github.com/PerryLink/dsh-pipeline-check)** | |
|
|
395
|
+
| **[dsh-pleading-draft](https://github.com/PerryLink/dsh-pleading-draft)** | |
|
|
396
|
+
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
|
|
397
|
+
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | |
|
|
398
|
+
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
|
|
399
|
+
| **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
|
|
400
|
+
| **[dsh-policy-brief-draft](https://github.com/PerryLink/dsh-policy-brief-draft)** | |
|
|
401
|
+
| **[dsh-power-loss-split](https://github.com/PerryLink/dsh-power-loss-split)** | |
|
|
402
|
+
| **[dsh-power-ticket-check](https://github.com/PerryLink/dsh-power-ticket-check)** | |
|
|
403
|
+
| **[dsh-ppap-check](https://github.com/PerryLink/dsh-ppap-check)** | |
|
|
404
|
+
| **[dsh-protest-deadline](https://github.com/PerryLink/dsh-protest-deadline)** | |
|
|
405
|
+
| **[dsh-railway-window](https://github.com/PerryLink/dsh-railway-window)** | |
|
|
406
|
+
| **[dsh-repair-order-qc](https://github.com/PerryLink/dsh-repair-order-qc)** | |
|
|
407
|
+
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | |
|
|
408
|
+
| **[dsh-review-reply-check](https://github.com/PerryLink/dsh-review-reply-check)** | |
|
|
409
|
+
| **[dsh-rulefile-check](https://github.com/PerryLink/dsh-rulefile-check)** | |
|
|
410
|
+
| **[dsh-safety-brief-check](https://github.com/PerryLink/dsh-safety-brief-check)** | |
|
|
411
|
+
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | 🧊 फ़्रोज़न — रेपो README देखें |
|
|
412
|
+
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | |
|
|
413
|
+
| **[dsh-site-log-check](https://github.com/PerryLink/dsh-site-log-check)** | |
|
|
414
|
+
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | |
|
|
415
|
+
| **[dsh-soe-decision-check](https://github.com/PerryLink/dsh-soe-decision-check)** | |
|
|
416
|
+
| **[dsh-soilwater-check](https://github.com/PerryLink/dsh-soilwater-check)** | |
|
|
417
|
+
| **[dsh-sop-sync-check](https://github.com/PerryLink/dsh-sop-sync-check)** | |
|
|
418
|
+
| **[dsh-spc-gbt-adapter](https://github.com/PerryLink/dsh-spc-gbt-adapter)** | |
|
|
419
|
+
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | |
|
|
420
|
+
| **[dsh-tender-extract](https://github.com/PerryLink/dsh-tender-extract)** | |
|
|
421
|
+
| **[dsh-tender-matrix](https://github.com/PerryLink/dsh-tender-matrix)** | |
|
|
422
|
+
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | |
|
|
423
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
|
|
424
|
+
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | |
|
|
425
|
+
| **[dsh-warranty-calc](https://github.com/PerryLink/dsh-warranty-calc)** | |
|
|
426
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | 🧊 फ़्रोज़न — रेपो README देखें |
|
|
427
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | 🧊 फ़्रोज़न — रेपो README देखें |
|
|
428
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | 🧊 फ़्रोज़न — रेपो README देखें |
|
|
429
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | 🧊 फ़्रोज़न — रेपो README देखें |
|
|
430
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | 🧊 फ़्रोज़न — रेपो README देखें |
|
|
431
|
+
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
|
|
432
|
+
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
|
|
433
|
+
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
|
|
434
|
+
|
|
435
|
+
</details>
|
|
436
|
+
|
|
437
|
+
## लाइसेंस
|
|
438
|
+
|
|
439
|
+
[LICENSE](LICENSE) (Apache License 2.0) © 2026 dsh-click contributors
|
|
440
|
+
|
|
441
|
+
<p align="center"><sub>Apache-2.0 · सामुदायिक प्लगइन, DeepSeek से असंबद्ध।</sub></p>
|