dsh-permission-rules 0.5.0 → 0.5.2
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 +17 -0
- package/README.es.md +139 -118
- package/README.hi.md +141 -120
- package/README.md +111 -90
- package/README.pt.md +140 -119
- package/README.zh.md +158 -137
- package/docs/rule-test-vectors/README.md +28 -0
- package/docs/rule-test-vectors/corpus.json +109 -0
- package/lib/client.js +4 -7
- package/lib/client.js.map +1 -1
- package/lib/index.js +10 -7
- package/lib/types/client/remote.d.ts +1 -1
- package/lib/types/client/section.d.ts +2 -2
- package/lib/types/config.d.ts +3 -3
- package/lib/types/index.d.ts +8 -8
- package/lib/types/network.d.ts +2 -2
- package/lib/types/proxy.d.ts +2 -2
- package/lib/types/remote-service.d.ts +2 -2
- package/lib/types/runtime.d.ts +14 -11
- package/lib/types/runtime.d.ts.map +1 -1
- package/lib/types/settings.d.ts +2 -2
- package/package.json +182 -178
- package/scripts/repair-session-logs.mjs +7 -2
- package/src/client/index.ts +5 -5
- package/src/runtime.ts +10 -7
package/README.hi.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# 🛡️ dsh-permission-rules
|
|
4
4
|
|
|
5
|
-
**DeepSeek Harness के लिए Claude Code-शैली की घोषणात्मक अनुमति
|
|
5
|
+
**DeepSeek Harness के लिए Claude Code-शैली की घोषणात्मक अनुमति नियम।**
|
|
6
6
|
|
|
7
7
|
*नियम ज्ञात को तय करते हैं। एक समीक्षक मॉडल अज्ञात को तय करता है।*
|
|
8
8
|
|
|
@@ -20,179 +20,200 @@
|
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
-
##
|
|
23
|
+
## Compatibility
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
हर मिलान **और** हर पास-थ्रू `permissionRules/decision` सेशन इवेंट के रूप में ऑडिट-लॉग होता है (केवल लॉग — मॉडल संदर्भ में कुछ अतिरिक्त नहीं डाला जाता)।
|
|
32
|
-
|
|
33
|
-
```text
|
|
34
|
-
tools/pre-execute waterfall approval/request waterfall (answerer शृंखला)
|
|
35
|
-
│ │
|
|
36
|
-
dsh-permission-rules dsh-auto-review answerer
|
|
37
|
-
· फ़ाइल क्रम में पहला मिलान ┌───────────────┴──────────────┐
|
|
38
|
-
· deny/ask कॉल को अपनाते हैं │ AI निर्णय (दूसरा मॉडल) │ नहीं ── next() ──▶ मानव UI
|
|
39
|
-
· allow/पास-थ्रू → next() └───────────────┬──────────────┘
|
|
40
|
-
│ deny ──▶ अस्वीकृत टूल परिणाम │ allowed-once / rejected
|
|
41
|
-
│ ask ──▶ ctx.approval ────────────────────────┘
|
|
42
|
-
│
|
|
43
|
-
ऑडिट: permissionRules/decision → approval/asked → autoReview/verdict → approval/decided
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## नियम *और* समीक्षक दोनों क्यों?
|
|
47
|
-
|
|
48
|
-
दूसरा मॉडल *"क्या यह कॉल सुरक्षित है?"* का उत्तर निर्णय-क्षमता से देता है, लेकिन इसमें एक राउंड-ट्रिप लगता है और यह ग़लत भी हो सकता है। घोषणात्मक नियम नियतात्मक, तात्कालिक और बिना मॉडल के उत्तर देते हैं — लेकिन केवल वही कवर करते हैं जो व्यवस्थापक ने लिखा। दोनों मिलकर **"पहले नियम, फिर AI सहारा"** चक्र बनाते हैं: नियम ज्ञात को तय करते हैं, समीक्षक अज्ञात को।
|
|
49
|
-
|
|
50
|
-
## विशेषताएँ
|
|
25
|
+
| Surface | Status |
|
|
26
|
+
|---|---|
|
|
27
|
+
| Harness | DeepSeek Harness `0.1.0-rc.5`–`0.1.0-rc.6` |
|
|
28
|
+
| Node | `^22.19.0 || >=24.0.0` |
|
|
29
|
+
| Platforms | सभी (host + वेब settings क्लाइंट) |
|
|
30
|
+
| Model | कोई भी (deny/ask कारण टूल परिणामों के माध्यम से दिखते हैं) |
|
|
51
31
|
|
|
52
|
-
|
|
53
|
-
- ✅ **समृद्ध मिलान** — टूल-नाम globs (`mcp__*` सहित), एजेंट-पहचान चयनकर्ता (`main` / `subagent` / `preset:*`), आर्गुमेंट कुंजी/मान globs **या** regex (`!pattern` निषेध और `absent` कुंजी आयाम के साथ), दस्तावेज़ित आर्गुमेंट कुंजियों से **किसी भी नेस्टिंग गहराई** पर निकाले गए workspace-सापेक्ष पथ globs, और `when` होस्ट शर्तें (env vars, प्लेटफ़ॉर्म)
|
|
54
|
-
- ✅ **पदानुक्रमित नियम फ़ाइलें** — वैकल्पिक `searchUp` सत्र cwd से फ़ाइलसिस्टम रूट तक हर `.dsh/rules.yaml` को मिलाता है, निकटतम पहले, ताकि चाइल्ड प्रोजेक्ट पैरेंट नियमों को ओवरराइड कर सके
|
|
55
|
-
- ✅ **नियम मेटाडेटा** — `enabled: false`, `description`, `tags`; `/rules` पहले किसी catch-all से छिपे नियमों की चेतावनी देता है
|
|
56
|
-
- ✅ **waterfall-सुरक्षित** — `allow`/पास-थ्रू हमेशा `next()` बुलाते हैं; केवल `deny`/`ask` शॉर्ट-सर्किट करते हैं
|
|
57
|
-
- ✅ **आधिकारिक approval seam** — `ask` `ctx.approval` से होकर जाता है; कभी पुनः-कार्यान्वित नहीं, कभी बायपास नहीं
|
|
58
|
-
- ✅ **पूर्ण ऑडिट** — `permissionRules/decision` इवेंट हर कॉल के लिए नियम क्रिया, workspace cwd और अंतिम परिणाम रखते हैं; `/rules decisions` सत्र में रास्ता फिर चलाता है; ऑडिट एन्वेलप मार्कर से पुराने होस्ट अप्राप्य लॉग लिखने के बजाय एक-बार चेतावनी के साथ ऑडिट-बंद हो जाते हैं (`allowUnmarkedAudit` पुनः चालू करता है)
|
|
59
|
-
- ✅ **dry-run रोलआउट** — `enforce: false` केवल ऑडिट करता है कि नीति *क्या करती* (काल्पनिक क्रिया + वास्तविक डाउनस्ट्रीम परिणाम, `dryRun` चिह्नित) और हर कॉल को पास करता है; उत्पादन में नई नीति का सुरक्षित परीक्षण
|
|
60
|
-
- ✅ **dry-run परीक्षण** — `/rules test <tool> <json-args>` कुछ भी निष्पादित किए बिना सक्रिय नियमों का मूल्यांकन करता है, हर मिलान आयाम के लिए `--cwd`, `--env`, `--agent` और `--platform` ओवरराइड के साथ
|
|
61
|
-
- ✅ **हॉट रीलोड** — debounce सहित Chokidar निगरानी; टूटा हुआ संपादन पिछले नियम रखता है, कभी क्रैश नहीं करता; सत्र के बीच बनाई गई नियम फ़ाइल (प्रोजेक्ट की या fallback) स्वतः अपनाई जाती है, मैनुअल रीलोड की आवश्यकता नहीं
|
|
62
|
-
- ✅ **ज़ोरदार विफलता** — अमान्य YAML, अज्ञात action/फ़ील्ड, ख़राब globs/regex, बैकट्रैकिंग-प्रवण पैटर्न, या `maxRules` से अधिक → लोड विफल
|
|
63
|
-
- ✅ **सीमित हॉट पथ** — पूर्व-संकलित matchers, O(नियम × पैटर्न), `maxRules` द्वारा सीमित; glob बैकट्रैकिंग डिग्री `maxGlobStars` द्वारा सीमित
|
|
32
|
+
## What you get
|
|
64
33
|
|
|
65
|
-
|
|
34
|
+
`dsh-permission-rules` `tools/pre-execute` वॉटरफ़ॉल पर हर टूल कॉल के आगे एक क्रमबद्ध **`allow` / `deny` / `ask`** नियम सूची रखता है — नियतात्मक, तत्काल, लेखा-परीक्षण-योग्य और आपके द्वारा सादे YAML में लिखी गई:
|
|
66
35
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
36
|
+
- **`deny`** कॉल को रोकता है; नियम का `reason` मॉडल-दृश्य त्रुटि बन जाता है।
|
|
37
|
+
- **`ask`** आधिकारिक अनुमोदन सीम पर चलता है (द्वितीय-मॉडल answerer के लिए `dsh-auto-review` माउंट करें, या मानव उत्तर देता है; दोनों न होने पर harness बंद-विफल होता है)।
|
|
38
|
+
- **`allow`** (और कोई-मिलान-नहीं) सख्ती से `next()` से प्रत्यायोजित करता है — बाद के listeners कभी शॉर्ट-सर्किट नहीं होते।
|
|
70
39
|
|
|
71
|
-
|
|
72
|
-
pnpm pack
|
|
73
|
-
dsh plugin --profile web add ./dsh-permission-rules-0.4.1.tgz
|
|
40
|
+
हर हिट **और** हर पास-थ्रू `permissionRules/decision` सत्र घटना के रूप में लॉग होता है (केवल-लॉग — मॉडल संदर्भ में कुछ भी अतिरिक्त इंजेक्ट नहीं होता)।
|
|
74
41
|
|
|
75
|
-
|
|
76
|
-
dsh
|
|
77
|
-
|
|
42
|
+
- **समृद्ध मिलान** — टूल-नाम globs (जिनमें `mcp__*` शामिल), एजेंट-पहचान चयनकर्ता (`main` / `subagent` / `preset:*`), तर्क कुंजी/मान globs **या** regex (जिनमें `!pattern` निषेध और `absent` कुंजी आयाम), **किसी भी नेस्टिंग गहराई** पर कार्यक्षेत्र-सापेक्ष पथ globs, और `when` होस्ट शर्तें (env चर, प्लेटफ़ॉर्म)।
|
|
43
|
+
- **पदानुक्रमित नियम फ़ाइलें** — वैकल्पिक `searchUp` सत्र cwd से फ़ाइल-सिस्टम रूट तक हर `.dsh/rules.yaml` को मर्ज करता है, निकटतम पहले।
|
|
44
|
+
- **dry-run रोलआउट** — `enforce: false` ऑडिट करता है कि नीति *क्या* करती, हर कॉल को पास करते हुए।
|
|
45
|
+
- **हॉट रीलोड** — debounce सहित Chokidar निगरानी; टूटा संपादन पिछले नियम रखता है, कभी क्रैश नहीं।
|
|
46
|
+
- **ज़ोर से विफल** — अमान्य YAML, अज्ञात action/फ़ील्ड, ख़राब globs/regex, बैकट्रैकिंग-प्रवण पैटर्न या `maxRules` से अधिक नियम लोड को विफल करते हैं।
|
|
78
47
|
|
|
79
|
-
|
|
48
|
+
## Rule syntax
|
|
80
49
|
|
|
81
50
|
```yaml
|
|
82
51
|
# <project>/.dsh/rules.yaml
|
|
83
52
|
rules:
|
|
84
53
|
- match: { tools: [bash, pwsh], params: { command: "git push*" }, paths: ["**/secrets/**"] }
|
|
85
54
|
action: deny
|
|
86
|
-
reason: "
|
|
55
|
+
reason: "No pushes from protected paths"
|
|
87
56
|
|
|
88
57
|
- match: { tools: [edit, write] }
|
|
89
58
|
action: ask
|
|
90
|
-
reason: "
|
|
59
|
+
reason: "File writes need confirmation"
|
|
91
60
|
```
|
|
92
61
|
|
|
62
|
+
- **मिलान आयाम** — `tools` (globs, incl. `mcp__*`), `agents` (`main` / `subagent` / `preset:<name>`; अज्ञात पहचान कभी मिलान नहीं करती — बंद-विफल), `params` (कुंजी/मान globs या regex, `!pattern` निषेध, `absent` कुंजी आयाम), `paths` (किसी भी गहराई पर निकाले गए कार्यक्षेत्र-सापेक्ष globs), `when` (`env` चर globs/regex + बंद `platform` सूची), और `network` (`domains` / `ips` / `ports` / `schemes` — globs, वाइल्डकार्ड, CIDR, पोर्ट श्रेणियाँ)।
|
|
63
|
+
- **क्रियाएँ** — `allow` / `deny` / `ask`, फ़ाइल क्रम में मूल्यांकित, पहला मिलान जीतता है।
|
|
64
|
+
- **नियम मेटाडेटा** — `enabled: false` (दृश्य परंतु निष्क्रिय), `description`, `tags`; अज्ञात फ़ील्ड लोड विफल करते हैं।
|
|
65
|
+
- **Schema** — JSON Schema [docs/rules-format.schema.json](docs/rules-format.schema.json) पर वितरित (संपादक पूर्णता `# yaml-language-server: $schema=...`); पूर्ण शब्दावली और 5-नियम सुरक्षा आधाररेखा [docs/rules-format.en.md](docs/rules-format.en.md) में।
|
|
66
|
+
|
|
67
|
+
## Network policy
|
|
68
|
+
|
|
69
|
+
Codex-शैली की **प्रक्रिया-स्तरीय नेटवर्क नीति**: shell उप-प्रक्रिया ट्रैफ़िक एक अंतर्निहित स्थानीय **HTTP/CONNECT प्रॉक्सी** से होकर गुज़रता है, और हर कनेक्शन क्रमबद्ध नेटवर्क नियमों या आधिकारिक sandbox presets पर मैप किए गए तीन मोड से तय होता है:
|
|
70
|
+
|
|
71
|
+
- **`deny-all`** — केवल-पठन sandbox preset: सभी आउटबाउंड रोकें।
|
|
72
|
+
- **`whitelist`** — workspace-write preset: सूचीबद्ध लक्ष्य अनुमत, शेष के लिए `unlisted: ask` (या `deny`)।
|
|
73
|
+
- **`allow-all`** — danger-full-access preset: सब कुछ अनुमत।
|
|
74
|
+
- **`auto`** (डिफ़ॉल्ट) — sandbox preset का अनुसरण करता है; बिना sandbox-नीति सेवा वाले hosts पर `autoFallback` (`allow-all`) में हल होता है।
|
|
75
|
+
|
|
76
|
+
- **मिलान** — `match.network` `domains` / `ips` / `ports` / `schemes` के साथ (globs, वाइल्डकार्ड, CIDR, पोर्ट श्रेणियाँ; संख्यात्मक YAML पोर्ट स्वीकृत)। `tools/pre-execute` हॉट पथ पर URL-उम्मीदवार निष्कर्षण वेब-टूल तर्कों और bash/pwsh कमांड टेक्स्ट में एम्बेडेड URLs पर चलता है; लूपबैक लक्ष्य `loopback` नीति के अनुसार नियमों को शॉर्ट-सर्किट कर सकते हैं।
|
|
77
|
+
- **ऑडिट** — अस्वीकृत कनेक्शन स्वामी सत्र में `permissionRules/network` जोड़ते हैं (वही अनुकूली `ignorable` द्वार), `/rules network` और settings पृष्ठ में ब्लॉक काउंटर व हाल की अवरोधन के साथ।
|
|
78
|
+
|
|
79
|
+
## Quick start
|
|
80
|
+
|
|
93
81
|
```sh
|
|
94
|
-
|
|
82
|
+
# 1. install the bundle into your profile
|
|
83
|
+
dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#main"
|
|
84
|
+
|
|
85
|
+
# or from npm (published releases)
|
|
86
|
+
dsh plugin --profile web add dsh-permission-rules
|
|
87
|
+
|
|
88
|
+
# 2. restart and verify the row
|
|
89
|
+
dsh --profile web --dump-config | grep -A4 'id: permission-rules'
|
|
95
90
|
```
|
|
96
91
|
|
|
97
|
-
|
|
92
|
+
## Install & uninstall
|
|
98
93
|
|
|
99
|
-
|
|
94
|
+
- **git चैनल** (नवीनतम `main`): `dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#main"` — `prepare` स्क्रिप्ट केवल उत्पादन निर्भरताओं से बनाती है।
|
|
95
|
+
- **npm चैनल** (प्रकाशित रिलीज़): `dsh plugin --profile web add dsh-permission-rules`.
|
|
96
|
+
- **tarball चैनल**: इस रेपो में `pnpm pack`, फिर `dsh plugin --profile web add ./dsh-permission-rules-<version>.tgz`.
|
|
97
|
+
- **uninstall**: `dsh plugin --profile web remove dsh-permission-rules`.
|
|
100
98
|
|
|
101
|
-
|
|
99
|
+
## Configuration
|
|
102
100
|
|
|
103
|
-
|
|
101
|
+
सभी ट्यूनेबल Schemastery `Config` फ़ील्ड हैं (cordis.yml से बदले जा सकते हैं)। id-लक्षित ओवरराइड पूरी पंक्ति बदल देता है — हर आवश्यक कुंजी फिर से बताएँ।
|
|
102
|
+
|
|
103
|
+
| Key | Default | Meaning |
|
|
104
104
|
|---|---|---|
|
|
105
|
-
| `rulesFile` | `.dsh/rules.yaml` | नियम फ़ाइल
|
|
106
|
-
| `fallbackPath` | *(
|
|
107
|
-
| `badFilePolicy` | `fail` | ख़राब फ़ाइल: `fail` लंबित टूल कॉल को
|
|
108
|
-
| `maxRules` | `256` | प्रभावी स्रोत शृंखला में
|
|
109
|
-
| `maxCachedWorkspaces` | `512` | कैश
|
|
110
|
-
| `patternMode` | `glob` | `params`/`paths`/`when.env` पैटर्न
|
|
111
|
-
| `watch` | `true` | Chokidar निगरानी +
|
|
105
|
+
| `rulesFile` | `.dsh/rules.yaml` | नियम फ़ाइल स्थान; सापेक्ष = कॉलिंग सत्र cwd के विरुद्ध हल, निरपेक्ष = वैश्विक और माउंट पर मान्य |
|
|
106
|
+
| `fallbackPath` | *(none)* | प्रति-cwd खोज में कुछ न मिलने पर उपयोग की गई नियम फ़ाइल; माउंट पर मान्य |
|
|
107
|
+
| `badFilePolicy` | `fail` | ख़राब नियम फ़ाइल: `fail` लंबित टूल कॉल को ज़ोर से विफल करता है; `ignore-with-warning` चेतावनी देकर खाली जारी रखता है |
|
|
108
|
+
| `maxRules` | `256` | प्रभावी स्रोत शृंखला में नियम संख्या की कठोर सीमा |
|
|
109
|
+
| `maxCachedWorkspaces` | `512` | कैश किए गए प्रति-कार्यक्षेत्र नियम लोड की कठोर सीमा (LRU निष्कासन) |
|
|
110
|
+
| `patternMode` | `glob` | `params`/`paths`/`when.env` पैटर्न स्वाद: `glob` या `regex` (टूल नाम हमेशा globs) |
|
|
111
|
+
| `watch` | `true` | Chokidar निगरानी + परिवर्तन पर रीलोड |
|
|
112
112
|
| `watchStabilityThresholdMs` | `200` | रीलोड debounce विंडो (ms) |
|
|
113
|
-
| `language` | `en` | `/rules` आउटपुट भाषा: `en`, `zh`, `es`, `pt`, `hi`
|
|
114
|
-
| `caseInsensitivePaths` | *(win32)* | `paths` पैटर्न और
|
|
115
|
-
| `audit` | `all` | ऑडिट
|
|
116
|
-
| `searchUp` | `false` | सत्र cwd से
|
|
117
|
-
| `maxGlobStars` | `2` | प्रति glob पैटर्न असीमित `*`/`**` क्वांटिफ़ायर की कठोर सीमा
|
|
118
|
-
| `enforce` | `true` | `false` = dry-run मोड: deny/ask
|
|
119
|
-
| `allowUnmarkedAudit` | `false` |
|
|
120
|
-
|
|
121
|
-
|
|
113
|
+
| `language` | `en` | `/rules` आउटपुट भाषा: `en`, `zh`, `es`, `pt`, `hi` |
|
|
114
|
+
| `caseInsensitivePaths` | *(win32)* | `paths` पैटर्न और कार्यक्षेत्र-रूट तुलना ASCII केस अनदेखा करते हैं; Windows पर `true` |
|
|
115
|
+
| `audit` | `all` | ऑडिट दानेदारी: `all` हर हिट और पास-थ्रू लॉग करता है; `hits` पास-थ्रू घटनाएँ छोड़ता है |
|
|
116
|
+
| `searchUp` | `false` | सत्र cwd से मूल निर्देशिकाओं को चलकर हर मिली नियम फ़ाइल मर्ज करें, निकटतम पहले |
|
|
117
|
+
| `maxGlobStars` | `2` | प्रति glob पैटर्न असीमित `*`/`**` क्वांटिफ़ायर की कठोर सीमा |
|
|
118
|
+
| `enforce` | `true` | `false` = dry-run मोड: deny/ask हिट `dryRun` मार्कर से लॉग होते हैं और हर कॉल पास होता है |
|
|
119
|
+
| `allowUnmarkedAudit` | `false` | पूर्व-मार्कर hosts `ignorable` मार्कर छोड़ देते हैं; प्लगइन एक बार की चेतावनी से सत्र-लॉग ऑडिट अक्षम करता है। पुनः सक्षम के लिए `true` |
|
|
120
|
+
| `network.enabled` | `true` | प्रॉक्सी, env इंजेक्शन और वेब-टूल मोड डिफ़ॉल्ट का मुख्य स्विच |
|
|
121
|
+
| `network.mode` | `auto` | नीति मोड: `auto` sandbox preset का अनुसरण, या `deny-all` / `whitelist` / `allow-all` |
|
|
122
|
+
| `network.autoFallback` | `allow-all` | `auto` के पास sandbox-नीति सेवा न होने पर उपयोग किया मोड |
|
|
123
|
+
| `network.unlisted` | `ask` | श्वेतसूची मोड में बिना नियम मिलान वाले लक्ष्यों का व्यवहार: `ask` या `deny` |
|
|
124
|
+
| `network.proxyBind` | `127.0.0.1` | स्थानीय प्रॉक्सी बाइंड पता (केवल लूपबैक) |
|
|
125
|
+
| `network.proxyPort` | `0` | स्थानीय प्रॉक्सी पोर्ट; `0` एक मुक्त क्षणिक पोर्ट चुनता है |
|
|
126
|
+
| `network.proxyMaxRecent` | `100` | settings पृष्ठ के लिए रखे हाल के ब्लॉक रिकॉर्ड की सीमा |
|
|
127
|
+
| `network.loopback` | `allow` | लूपबैक लक्ष्य: `allow` (Codex समता) या `policy` |
|
|
128
|
+
| `network.injectEnv` | `true` | क्या उप-प्रक्रियाओं के लिए प्रॉक्सी पर्यावरण चर इंजेक्ट हों |
|
|
129
|
+
| `network.noProxy` | `clear` | उप-प्रक्रिया NO_PROXY व्यवहार: `clear` नीति लागू करता है या `preserve` |
|
|
130
|
+
|
|
131
|
+
## Tools & surfaces
|
|
132
|
+
|
|
133
|
+
| Surface | Kind | Notes |
|
|
134
|
+
|---|---|---|
|
|
135
|
+
| `tools/pre-execute` | listener | पहले-मिलान allow/deny/ask नियम + नेटवर्क URL-उम्मीदवार निष्कर्षण |
|
|
136
|
+
| `/rules` | command | `list` · `reload` · `decisions [n]` · `test <tool> <json>` |
|
|
137
|
+
| `permissionRules/decision` | event | हर हिट और पास-थ्रू की केवल-लॉग ऑडिट |
|
|
138
|
+
| `permissionRules/network` | event | अवरुद्ध कनेक्शनों की प्रॉक्सी-परत ऑडिट |
|
|
139
|
+
| HTTP/CONNECT proxy | service | shell उप-प्रक्रिया ट्रैफ़िक को नियंत्रित करने वाला अंतर्निहित स्थानीय प्रॉक्सी |
|
|
140
|
+
| settings page | client | नेटवर्क-मोड संपादक, नियम संपादक, ब्लॉक काउंटर, हाल की अवरोधन |
|
|
122
141
|
|
|
123
142
|
```
|
|
124
|
-
/rules
|
|
125
|
-
/rules list
|
|
126
|
-
/rules reload
|
|
127
|
-
/rules decisions [n]
|
|
128
|
-
/rules test <tool> <json>
|
|
143
|
+
/rules list the active rules, their source files, and any last-reload error
|
|
144
|
+
/rules list explicit alias for the bare listing
|
|
145
|
+
/rules reload re-read the rule-file chain for this workspace
|
|
146
|
+
/rules decisions [n] show the last n permission decisions of this session (default 10)
|
|
147
|
+
/rules test <tool> <json> dry-evaluate the rules against a hypothetical call
|
|
129
148
|
```
|
|
130
149
|
|
|
131
|
-
`/rules test`
|
|
150
|
+
`/rules test` अग्रणी फ़्लैग भी स्वीकार करता है: `--cwd <dir>`, `--env KEY=VALUE` (दोहराने-योग्य), `--agent <selector>` (दोहराने-योग्य) और `--platform <name>`। बहु-फ़ाइल शृंखलाओं (जैसे `searchUp`) में हर सूचीबद्ध नियम पंक्ति अपनी स्रोत फ़ाइल से संबद्ध होती है।
|
|
132
151
|
|
|
133
|
-
|
|
152
|
+
## Permissions & data
|
|
134
153
|
|
|
135
|
-
|
|
154
|
+
- **Permissions**: workshop मैनिफ़ेस्ट `files:read`, `files:watch`, `files:write`, `session:append` और `network:outbound` घोषित करता है। `ask` निर्णय आधिकारिक अनुमोदन सीम पर चलते हैं — कुछ भी पुनः-कार्यान्वित या टाला नहीं गया।
|
|
155
|
+
- **Data**: नियम फ़ाइलें डिस्क से पढ़ी जाती हैं; कोई नियम डेटा लिखा नहीं जाता। कोई मॉडल कॉल नहीं, कोई समीक्षक उप-एजेंट नहीं।
|
|
156
|
+
- **Session log**: `permissionRules/decision` कभी मॉडल संदर्भ में इंजेक्ट नहीं होता और लिफ़ाफ़े के `ignorable: true` मार्कर से जोड़ा जाता है ताकि कोई भी harness बिल्ड लॉग लोड कर सके।
|
|
136
157
|
|
|
137
|
-
|
|
138
|
-
- एकीकरण-परीक्षित (`test/integration.spec.ts`): `permissionRules/decision` → `approval/asked` → `autoReview/verdict` → `approval/decided`, समीक्षक की जगह स्क्रिप्टेड mock।
|
|
139
|
-
- [आधिकारिक harness](https://github.com/deepseek-ai/deepseek-harness) की `never` अनुमोदन नीति और हर fail-closed गारंटी अछूती रहती हैं।
|
|
158
|
+
## Security boundaries
|
|
140
159
|
|
|
141
|
-
|
|
160
|
+
- **नीति, कर्नेल नहीं।** `paths` उम्मीदवार केवल तर्क कुंजियों के एक दस्तावेज़ित समूह से आते हैं (किसी भी गहराई पर, गहराई-सीमित), और केवल कार्यक्षेत्र-सापेक्ष पथ मिलान करते हैं।
|
|
161
|
+
- **यहाँ कोई समीक्षक नहीं।** प्लगइन कभी उप-एजेंट नहीं बनाता या मॉडल नहीं बुलाता — `ask` निर्णय उत्पन्न करना ही इसके काम का अंत है।
|
|
162
|
+
- **कोई sandbox परिवर्तन नहीं।** OS-स्तरीय sandbox नीति sandbox सीम की है, इस प्लगइन की नहीं।
|
|
163
|
+
- **ग़लत विन्यास की ज़ोरदार अस्वीकृति।** अज्ञात YAML फ़ील्ड, अज्ञात क्रियाएँ और ख़राब पैटर्न लोड पर अस्वीकृत।
|
|
164
|
+
- **बैकट्रैकिंग सीमाएँ।** glob पैटर्न `maxGlobStars` असीमित स्टार विस्तार तक सीमित; regex-मोड पैटर्न नेस्टेड असीमित क्वांटिफ़ायर और क्वांटिफ़ाइड ओवरलैपिंग शाब्दिक विकल्प अस्वीकारते हैं।
|
|
142
165
|
|
|
143
|
-
|
|
144
|
-
- **यहाँ कोई समीक्षक नहीं।** प्लगइन कभी सबएजेंट नहीं चलाता, मॉडल नहीं बुलाता — `ask` निर्णय देना ही उसके काम का अंत है।
|
|
145
|
-
- **sandbox में कोई बदलाव नहीं।** OS-स्तरीय sandbox नीति sandbox seam का काम है, इस प्लगइन का नहीं।
|
|
146
|
-
- **ग़लत कॉन्फ़िगरेशन पर ज़ोरदार अस्वीकृति।** अज्ञात YAML फ़ील्ड, अज्ञात action और ख़राब पैटर्न लोड पर अस्वीकृत होते हैं, कभी चुपचाप अनदेखे नहीं।
|
|
147
|
-
- **बैकट्रैकिंग सीमाएँ।** glob पैटर्न `maxGlobStars` असीमित स्टार विस्तार तक सीमित हैं; regex-मोड पैटर्न नेस्टेड असीमित क्वांटिफ़ायर और क्वांटिफ़ाइड ओवरलैपिंग शाब्दिक विकल्पों को अस्वीकार करते हैं। (`\d+\.\d+\.\d+` जैसी regex शृंखलाएँ अनुमत रहती हैं — regex मोड एस्केप हैच है, glob मोड संरक्षित डिफ़ॉल्ट है।)
|
|
166
|
+
## Known limitations
|
|
148
167
|
|
|
149
|
-
|
|
168
|
+
- **पूर्व-मार्कर hosts पर ऑडिट मार्कर।** `permissionRules/decision` `ignorable: true` से जोड़ा जाता है; जिन hosts का `Session.append` मार्कर से पहले का है (`0.1.0-rc.6` पंक्ति) वे इसे चुपचाप छोड़ देते हैं, इसलिए runtime एक बार की चेतावनी से सत्र-लॉग ऑडिट अक्षम कर देता है। पुनः सक्षम के लिए `allowUnmarkedAudit: true`; पहले से लिखे लॉग `scripts/repair-session-logs.mjs` से मरम्मत करें।
|
|
169
|
+
- **पथ उम्मीदवार अनुमानी हैं।** केवल दस्तावेज़ित तर्क कुंजियाँ पथ मिलान को खिलाती हैं, और कार्यक्षेत्र-सापेक्ष मिलान केवल `caseInsensitivePaths` चालू होने पर ASCII-केस-असंवेदी है।
|
|
170
|
+
- **globs एक रूढ़िवादी उपसमुच्चय हैं।** कोई ब्रेस विस्तार नहीं — दो पैटर्न लिखें, या regex मोड उपयोग करें।
|
|
171
|
+
- **regex बैकट्रैकिंग गार्ड संरचनात्मक है, संपूर्ण नहीं।** अविश्वसनीय फ़ाइलों के लिए glob मोड पसंद करें।
|
|
150
172
|
|
|
151
|
-
|
|
152
|
-
- `Drifter-yh/dsh-tool-policy` — deny-by-default टूल नीति; दोहराने से बचने के लिए यहाँ दस्तावेज़ित।
|
|
153
|
-
- `dsh-auto-review` — इस चक्र का AI-सहारा आधा भाग, जिसका यह प्लगइन अग्रिम छोर है।
|
|
173
|
+
## Collaborating with dsh-auto-review
|
|
154
174
|
|
|
155
|
-
|
|
175
|
+
- `dsh-permission-rules` `ask` उत्पन्न करता है; `dsh-auto-review` `approval/request` वॉटरफ़ॉल पर केवल-पठन द्वितीय-मॉडल निर्णय से उत्तर देता है (या मानवों को प्रत्यायोजित करता है)। पूर्ण बंद लूप के लिए दोनों माउंट करें।
|
|
176
|
+
- एकीकरण-परीक्षित: `permissionRules/decision` → `approval/asked` → `autoReview/verdict` → `approval/decided`, समीक्षक को स्क्रिप्टेड मॉक से बदलकर।
|
|
177
|
+
- आधिकारिक harness की `never` अनुमोदन नीति और हर बंद-विफल गारंटी अछूती रहती हैं।
|
|
156
178
|
|
|
157
|
-
|
|
158
|
-
- `paths` उम्मीदवार ह्यूरिस्टिक हैं: केवल दस्तावेज़ित आर्गुमेंट-कुंजियाँ पथ मिलान में आती हैं, और workspace-सापेक्ष मिलान केवल तभी ASCII-केस-असंवेदनशील होता है जब `caseInsensitivePaths` चालू हो।
|
|
159
|
-
- globs एक रूढ़िवादी उपसमुच्चय हैं (brace विस्तार नहीं) — दो पैटर्न लिखें या regex मोड इस्तेमाल करें।
|
|
160
|
-
- regex बैकट्रैकिंग गार्ड संरचनात्मक है, संपूर्ण नहीं: शाब्दिक उपसर्ग के बिना विकल्प-अस्पष्टता के मामले (जैसे कृत्रिम lookarounds) लेखक की ज़िम्मेदारी हैं; अविश्वसनीय फ़ाइलों के लिए glob मोड पसंद करें।
|
|
179
|
+
## Session log repair
|
|
161
180
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
`ignorable` मार्कर से पहले लिखे गए सत्र लॉग को नए harness बिल्ड अस्वीकार कर सकते हैं (`SessionFormatUnsupportedError`)। शामिल `scripts/repair-session-logs.mjs` केवल लक्षित ऑडिट पंक्तियों में `ignorable: true` जोड़ता है, फ़्रेम सुरक्षित रखते हुए, बैकअप के साथ:
|
|
181
|
+
`ignorable` मार्कर के अस्तित्व से पहले लिखे गए सत्र लॉग नए harness बिल्ड द्वारा अस्वीकृत हो सकते हैं (`SessionFormatUnsupportedError`)। वितरित `scripts/repair-session-logs.mjs` केवल लक्षित ऑडिट पंक्तियों को `ignorable: true` ले जाने के लिए फिर से लिखता है, फ़्रेम-संरक्षित, बैकअप सहित:
|
|
165
182
|
|
|
166
183
|
```sh
|
|
167
|
-
node scripts/repair-session-logs.mjs scan [--home DIR] #
|
|
184
|
+
node scripts/repair-session-logs.mjs scan [--home DIR] # विदेशी पंक्तियों की रिपोर्ट, कुछ नहीं बदलता
|
|
168
185
|
node scripts/repair-session-logs.mjs repair [--home DIR] [--dry-run]
|
|
169
186
|
```
|
|
170
187
|
|
|
171
|
-
`--home` डिफ़ॉल्ट रूप से `$DSH_HOME/sessions` (या `~/.dsh/sessions`)
|
|
188
|
+
`--home` डिफ़ॉल्ट रूप से `$DSH_HOME/sessions` (या `~/.dsh/sessions`)।
|
|
172
189
|
|
|
173
|
-
##
|
|
190
|
+
## Development
|
|
174
191
|
|
|
175
192
|
```sh
|
|
176
|
-
pnpm install
|
|
177
|
-
pnpm run typecheck
|
|
178
|
-
pnpm run lint
|
|
179
|
-
pnpm test
|
|
180
|
-
pnpm run test:coverage #
|
|
181
|
-
pnpm run build
|
|
182
|
-
pnpm run pack:check
|
|
183
|
-
node scripts/check-readme-sync.mjs
|
|
193
|
+
pnpm install # node ^22.19 || >=24
|
|
194
|
+
pnpm run typecheck # tsc, src + tests
|
|
195
|
+
pnpm run lint # eslint, src + tests + scripts
|
|
196
|
+
pnpm test # vitest: 139 tests, 9 suites
|
|
197
|
+
pnpm run test:coverage # coverage gate (90/80/90/90)
|
|
198
|
+
pnpm run build # tsc declarations + tsdown bundles (lib/)
|
|
199
|
+
pnpm run pack:check # build + pack (the published artifact)
|
|
200
|
+
node scripts/check-readme-sync.mjs # five-language README sync gate (also in CI)
|
|
184
201
|
```
|
|
185
202
|
|
|
186
|
-
|
|
203
|
+
हेडलेस एंड-टू-एंड सत्यापन रिकॉर्ड के लिए [VERIFICATION.md](VERIFICATION.md) देखें।
|
|
204
|
+
|
|
205
|
+
## Topics
|
|
206
|
+
|
|
207
|
+
`dsh`, `dsh-plugin`, `deepseek-harness`, `permission`, `policy`, `allow-deny-ask`, `approval`, `safety`, `network`, `network-policy`, `proxy`
|
|
187
208
|
|
|
188
|
-
##
|
|
209
|
+
## Contributors
|
|
189
210
|
|
|
190
|
-
- [@PerryLink](https://github.com/PerryLink) — निर्माता और अनुरक्षक: नियम शब्दावली व मूल्यांकन, runtime, HMR निगरानी, सत्र-लॉग
|
|
191
|
-
- [@22xuan](https://github.com/22xuan) — rc.6
|
|
211
|
+
- [@PerryLink](https://github.com/PerryLink) — निर्माता और अनुरक्षक: नियम शब्दावली व मूल्यांकन, runtime, HMR निगरानी, सत्र-लॉग ऑडिट, नेटवर्क नीति + प्रॉक्सी, और पाँच-भाषा दस्तावेज़।
|
|
212
|
+
- [@22xuan](https://github.com/22xuan) — rc.6 hosts द्वारा ऑडिट घटना के `ignorable` मार्कर को चुपचाप छोड़ने की विस्तृत रिपोर्ट ([#2](https://github.com/PerryLink/dsh-permission-rules/issues/2)) और अपस्ट्रीम harness चर्चा; v0.4.1 runtime host-क्षमता पहचान और दस्तावेज़ सुधार सीधे उसी विश्लेषण से निकले।
|
|
192
213
|
|
|
193
214
|
## PerryLink DSH Plugin Family
|
|
194
215
|
|
|
195
|
-
यह
|
|
216
|
+
यह परियोजना [PerryLink](https://github.com/PerryLink) द्वारा अनुरक्षित [15 DeepSeek Harness प्लगइन](https://github.com/PerryLink) में से एक है। यदि यह आपकी मदद करता है, तो बाकी भी संभवतः करेंगे:
|
|
196
217
|
|
|
197
218
|
| Plugin | One-liner |
|
|
198
219
|
|---|---|
|
|
@@ -212,6 +233,6 @@ headless एंड-टू-एंड सत्यापन रिकॉर्ड
|
|
|
212
233
|
| [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) | Plugin-development knowledge base as an on-demand agent skill |
|
|
213
234
|
| [dsh-claude-move](https://github.com/PerryLink/dsh-claude-move) | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
|
|
214
235
|
|
|
215
|
-
##
|
|
236
|
+
## License
|
|
216
237
|
|
|
217
238
|
[Apache License 2.0](LICENSE) © 2026 dsh-permission-rules contributors
|