dsh-permission-rules 0.4.2 → 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.
Files changed (76) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.es.md +160 -117
  3. package/README.hi.md +162 -119
  4. package/README.md +133 -90
  5. package/README.pt.md +161 -118
  6. package/README.zh.md +162 -119
  7. package/docs/rule-test-vectors/README.md +28 -0
  8. package/docs/rule-test-vectors/corpus.json +109 -0
  9. package/lib/client.js +4693 -0
  10. package/lib/client.js.map +1 -0
  11. package/lib/index.js +1530 -179
  12. package/lib/typert.host.js +4305 -0
  13. package/lib/types/client/index.d.ts +28 -0
  14. package/lib/types/client/index.d.ts.map +1 -0
  15. package/lib/types/client/locales.d.ts +9 -0
  16. package/lib/types/client/locales.d.ts.map +1 -0
  17. package/lib/types/client/remote.d.ts +181 -0
  18. package/lib/types/client/remote.d.ts.map +1 -0
  19. package/lib/types/client/section.d.ts +35 -0
  20. package/lib/types/client/section.d.ts.map +1 -0
  21. package/lib/types/config.d.ts +54 -2
  22. package/lib/types/config.d.ts.map +1 -1
  23. package/lib/types/events.d.ts +45 -0
  24. package/lib/types/events.d.ts.map +1 -1
  25. package/lib/types/index.d.ts +8 -6
  26. package/lib/types/index.d.ts.map +1 -1
  27. package/lib/types/network.d.ts +90 -0
  28. package/lib/types/network.d.ts.map +1 -0
  29. package/lib/types/prose.d.ts +15 -0
  30. package/lib/types/prose.d.ts.map +1 -1
  31. package/lib/types/proxy.d.ts +128 -0
  32. package/lib/types/proxy.d.ts.map +1 -0
  33. package/lib/types/remote-service.d.ts +45 -0
  34. package/lib/types/remote-service.d.ts.map +1 -0
  35. package/lib/types/rules.d.ts +131 -0
  36. package/lib/types/rules.d.ts.map +1 -1
  37. package/lib/types/runtime.d.ts +153 -21
  38. package/lib/types/runtime.d.ts.map +1 -1
  39. package/lib/types/settings.d.ts +28 -0
  40. package/lib/types/settings.d.ts.map +1 -0
  41. package/lib/types/typert.host.d.ts +166 -0
  42. package/lib/types/typert.host.d.ts.map +1 -0
  43. package/lib/types/wire.d.ts +421 -0
  44. package/lib/types/wire.d.ts.map +1 -0
  45. package/package.json +182 -144
  46. package/scripts/repair-session-logs.mjs +7 -2
  47. package/src/client/index.ts +111 -0
  48. package/src/client/locales.ts +94 -0
  49. package/src/client/remote.ts +41 -0
  50. package/src/client/section.ts +201 -0
  51. package/src/config.ts +111 -0
  52. package/src/events.ts +46 -0
  53. package/src/index.ts +2 -0
  54. package/src/network.ts +177 -0
  55. package/src/prose.ts +85 -10
  56. package/src/proxy.ts +327 -0
  57. package/src/remote-service.ts +109 -0
  58. package/src/rules.ts +424 -5
  59. package/src/runtime.ts +464 -53
  60. package/src/settings.ts +74 -0
  61. package/src/typert.host.ts +25 -0
  62. package/src/wire.ts +239 -0
  63. package/lib/types/config.js +0 -99
  64. package/lib/types/config.js.map +0 -1
  65. package/lib/types/events.js +0 -44
  66. package/lib/types/events.js.map +0 -1
  67. package/lib/types/glob.js +0 -307
  68. package/lib/types/glob.js.map +0 -1
  69. package/lib/types/index.js +0 -27
  70. package/lib/types/index.js.map +0 -1
  71. package/lib/types/prose.js +0 -173
  72. package/lib/types/prose.js.map +0 -1
  73. package/lib/types/rules.js +0 -610
  74. package/lib/types/rules.js.map +0 -1
  75. package/lib/types/runtime.js +0 -818
  76. package/lib/types/runtime.js.map +0 -1
package/README.hi.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # 🛡️ dsh-permission-rules
4
4
 
5
- **DeepSeek Harness के लिए Claude Code-शैली की घोषणात्मक अनुमति नियम (permission rules)।**
5
+ **DeepSeek Harness के लिए Claude Code-शैली की घोषणात्मक अनुमति नियम।**
6
6
 
7
7
  *नियम ज्ञात को तय करते हैं। एक समीक्षक मॉडल अज्ञात को तय करता है।*
8
8
 
@@ -20,176 +20,219 @@
20
20
 
21
21
  ---
22
22
 
23
- ## यह क्या करता है
23
+ ## Compatibility
24
24
 
25
- `dsh-permission-rules` हर टूल कॉल के आगे `tools/pre-execute` waterfall पर एक क्रमबद्ध **`allow` / `deny` / `ask`** नियम-सूची रखता है — नियतात्मक, तात्कालिक, ऑडिट-योग्य, और आपके द्वारा सादे YAML में लिखी हुई:
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 कारण टूल परिणामों के माध्यम से दिखते हैं) |
26
31
 
27
- - **`deny`** कॉल को रोक देता है। नियम का `reason` मॉडल को दिखने वाली त्रुटि बन जाता है, ताकि एजेंट आँख बंद करके दोबारा कोशिश करने के बजाय *कारण* सीखे।
28
- - **`ask`** आधिकारिक approval seam से होकर जाता है। साथ में `dsh-auto-review` माउंट करें तो दूसरा मॉडल फ़ैसला करता है; वरना मानव उत्तर देता है; दोनों के न होने पर harness fail-closed रहता है।
29
- - **`allow`** (और कोई मिलान न होने पर) सख़्ती से `next()` से सौंपता है — बाद वाले listeners कभी शॉर्ट-सर्किट नहीं होते।
32
+ ## What you get
30
33
 
31
- हर मिलान **और** हर पास-थ्रू `permissionRules/decision` सेशन इवेंट के रूप में ऑडिट-लॉग होता है (केवल लॉग — मॉडल संदर्भ में कुछ अतिरिक्त नहीं डाला जाता)।
34
+ `dsh-permission-rules` `tools/pre-execute` वॉटरफ़ॉल पर हर टूल कॉल के आगे एक क्रमबद्ध **`allow` / `deny` / `ask`** नियम सूची रखता है — नियतात्मक, तत्काल, लेखा-परीक्षण-योग्य और आपके द्वारा सादे YAML में लिखी गई:
32
35
 
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
- ## विशेषताएँ
51
-
52
- - ✅ **तीन-अवस्था शब्दार्थ** — `allow`, `deny`, `ask`, फ़ाइल क्रम में मूल्यांकित; पहला मिलान जीतता है
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` द्वारा सीमित
64
-
65
- ## त्वरित शुरुआत
66
-
67
- ```sh
68
- # 1. bundle को अपने प्रोफ़ाइल में इंस्टॉल करें
69
- dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#main"
36
+ - **`deny`** कॉल को रोकता है; नियम का `reason` मॉडल-दृश्य त्रुटि बन जाता है।
37
+ - **`ask`** आधिकारिक अनुमोदन सीम पर चलता है (द्वितीय-मॉडल answerer के लिए `dsh-auto-review` माउंट करें, या मानव उत्तर देता है; दोनों न होने पर harness बंद-विफल होता है)।
38
+ - **`allow`** (और कोई-मिलान-नहीं) सख्ती से `next()` से प्रत्यायोजित करता है — बाद के listeners कभी शॉर्ट-सर्किट नहीं होते।
70
39
 
71
- # या पैक किए गए tarball से (बिल्ट आर्टिफ़ैक्ट, build अनुमति की ज़रूरत नहीं)
72
- pnpm pack
73
- dsh plugin --profile web add ./dsh-permission-rules-0.4.1.tgz
40
+ हर हिट **और** हर पास-थ्रू `permissionRules/decision` सत्र घटना के रूप में लॉग होता है (केवल-लॉग — मॉडल संदर्भ में कुछ भी अतिरिक्त इंजेक्ट नहीं होता)।
74
41
 
75
- # 2. पुनः आरंभ करें
76
- dsh --profile web
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: "संरक्षित पथों से push मना है"
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
- dsh --profile web --dump-config | grep -A4 'id: permission-rules' # पंक्ति सत्यापित करें
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
- 5 नियमों वाली पूरी सुरक्षा बेसलाइन और पूरा schema [docs/rules-format.en.md](docs/rules-format.en.md) में है।
92
+ ## Install & uninstall
93
+
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`.
98
98
 
99
- ## कॉन्फ़िगरेशन
99
+ ## Configuration
100
100
 
101
- सभी ट्यूनेबल Schemastery `Config` फ़ील्ड हैं (cordis.yml से बदले जा सकते हैं)। id-लक्षित ओवरराइड पूरी पंक्ति बदल देता है — जिन कुंजियों की ज़रूरत हो उन्हें दोबारा लिखें।
101
+ सभी ट्यूनेबल Schemastery `Config` फ़ील्ड हैं (cordis.yml से बदले जा सकते हैं)। id-लक्षित ओवरराइड पूरी पंक्ति बदल देता है — हर आवश्यक कुंजी फिर से बताएँ।
102
102
 
103
- | कुंजी | डिफ़ॉल्ट | अर्थ |
103
+ | Key | Default | Meaning |
104
104
  |---|---|---|
105
- | `rulesFile` | `.dsh/rules.yaml` | नियम फ़ाइल का स्थान; सापेक्ष = कॉलिंग सेशन के cwd के विरुद्ध, निरपेक्ष = वैश्विक और माउंट पर सत्यापित |
106
- | `fallbackPath` | *(कोई नहीं)* | cwd खोज में कुछ न मिलने पर प्रयुक्त नियम फ़ाइल; माउंट पर सत्यापित |
107
- | `badFilePolicy` | `fail` | ख़राब फ़ाइल: `fail` लंबित टूल कॉल को ज़ोरदार त्रुटि देता है (रीलोड पिछले नियम रखते हैं); `ignore-with-warning` चेतावनी देकर ख़ाली चलता है |
108
- | `maxRules` | `256` | प्रभावी स्रोत शृंखला में नियमों की कठोर सीमा; बड़ी फ़ाइलें लोड विफल करती हैं |
109
- | `maxCachedWorkspaces` | `512` | कैश की गई प्रति-वर्कस्पेस नियम लोड की कठोर सीमा; इससे अधिक पर सबसे कम हाल में प्रयुक्त वर्कस्पेस (उसके watcher सहित) हटाया जाता है |
110
- | `patternMode` | `glob` | `params`/`paths`/`when.env` पैटर्न शैली: `glob` या `regex` (टूल नाम हमेशा globs) |
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` (`en`/`zh` संदर्भ अनुवाद हैं) |
114
- | `caseInsensitivePaths` | *(win32)* | `paths` पैटर्न और workspace-रूट तुलना ASCII केस अनदेखा करते हैं; Windows पर डिफ़ॉल्ट `true`, अन्यत्र `false` |
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` | जिन होस्ट का `Session.append` `ignorable` मार्कर से पुराना है (`0.1.0-rc.6` शृंखला) वे बिना-चिह्न ऑडिट इवेंट लिखते हैं, जिससे सत्र कठोर बिल्ड पर अप्राप्य हो जाते हैं: प्लगइन ऐसे होस्ट का पता लगाकर एक-बार चेतावनी के साथ सत्र-लॉग ऑडिट बंद कर देता है। सत्र में रास्ता वापस चाहिए तो `true` सेट करें (मौजूदा लॉग `scripts/repair-session-logs.mjs` से मरम्मत करें) |
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 इस workspace की नियम-फ़ाइल शृंखला दोबारा पढ़ता है
127
- /rules decisions [n] इस सत्र की अंतिम n अनुमति निर्णय दिखाता है (डिफ़ॉल्ट 10)
128
- /rules test <tool> <json> काल्पनिक कॉल के विरुद्ध नियमों का dry-मूल्यांकन, जैसे /rules test bash {"command":"git push origin main"}
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` शुरुआती फ़्लैग भी स्वीकार करता है: `--cwd <dir>` दूसरे workspace के विरुद्ध मूल्यांकन करता है, `--env KEY=मान` (दोहराने योग्य) `when.env` के लिए होस्ट env ओवरराइड करता है, `--agent <चयनकर्ता>` (दोहराने योग्य) `agents` आयाम के लिए पहचान उम्मीदवार देता है, और `--platform <नाम>` `when.platform` के लिए होस्ट प्लेटफ़ॉर्म ओवरराइड करता है। बहु-फ़ाइल शृंखलाओं (जैसे `searchUp`) में हर नियम पंक्ति अपनी स्रोत फ़ाइल के साथ चिह्नित होती है।
132
-
133
- कमांड आउटपुट केवल UI के लिए है — मॉडल नियमों को केवल उनके उत्पन्न टूल परिणामों से ही सीखता है। `language` आउटपुट भाषा चुनता है। नियम फ़ाइल का JSON Schema [docs/rules-format.schema.json](docs/rules-format.schema.json) पर साथ आता है (संपादक पूर्णता के लिए `# yaml-language-server: $schema=...` से जोड़ें)।
150
+ `/rules test` अग्रणी फ़्लैग भी स्वीकार करता है: `--cwd <dir>`, `--env KEY=VALUE` (दोहराने-योग्य), `--agent <selector>` (दोहराने-योग्य) और `--platform <name>`। बहु-फ़ाइल शृंखलाओं (जैसे `searchUp`) में हर सूचीबद्ध नियम पंक्ति अपनी स्रोत फ़ाइल से संबद्ध होती है।
134
151
 
135
- ## dsh-auto-review के साथ सहयोग
152
+ ## Permissions & data
136
153
 
137
- - `dsh-permission-rules` `ask` उत्पन्न करता है; `dsh-auto-review` `approval/request` waterfall पर केवल-पठन दूसरे मॉडल के निर्णय से उत्तर देता है (या मानवों को सौंपता है)। पूर्ण चक्र के लिए दोनों माउंट करें।
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 गारंटी अछूती रहती हैं।
154
+ - **Permissions**: workshop मैनिफ़ेस्ट `files:read`, `files:watch`, `files:write`, `session:append` और `network:outbound` घोषित करता है। `ask` निर्णय आधिकारिक अनुमोदन सीम पर चलते हैं — कुछ भी पुनः-कार्यान्वित या टाला नहीं गया।
155
+ - **Data**: नियम फ़ाइलें डिस्क से पढ़ी जाती हैं; कोई नियम डेटा लिखा नहीं जाता। कोई मॉडल कॉल नहीं, कोई समीक्षक उप-एजेंट नहीं।
156
+ - **Session log**: `permissionRules/decision` कभी मॉडल संदर्भ में इंजेक्ट नहीं होता और लिफ़ाफ़े के `ignorable: true` मार्कर से जोड़ा जाता है ताकि कोई भी harness बिल्ड लॉग लोड कर सके।
140
157
 
141
- ## सुरक्षा सीमाएँ
158
+ ## Security boundaries
142
159
 
143
- - **नीति, कर्नेल नहीं।** `paths` उम्मीदवार केवल दस्तावेज़ित आर्गुमेंट-कुंजी समूह से आते हैं, और केवल workspace-सापेक्ष पथ मिलते हैं।
144
- - **यहाँ कोई समीक्षक नहीं।** प्लगइन कभी सबएजेंट नहीं चलाता, मॉडल नहीं बुलाता — `ask` निर्णय देना ही उसके काम का अंत है।
145
- - **sandbox में कोई बदलाव नहीं।** OS-स्तरीय sandbox नीति sandbox seam का काम है, इस प्लगइन का नहीं।
146
- - **ग़लत कॉन्फ़िगरेशन पर ज़ोरदार अस्वीकृति।** अज्ञात YAML फ़ील्ड, अज्ञात action और ख़राब पैटर्न लोड पर अस्वीकृत होते हैं, कभी चुपचाप अनदेखे नहीं।
147
- - **बैकट्रैकिंग सीमाएँ।** glob पैटर्न `maxGlobStars` असीमित स्टार विस्तार तक सीमित हैं; regex-मोड पैटर्न नेस्टेड असीमित क्वांटिफ़ायर और क्वांटिफ़ाइड ओवरलैपिंग शाब्दिक विकल्पों को अस्वीकार करते हैं। (`\d+\.\d+\.\d+` जैसी regex शृंखलाएँ अनुमत रहती हैं — regex मोड एस्केप हैच है, glob मोड संरक्षित डिफ़ॉल्ट है।)
160
+ - **नीति, कर्नेल नहीं।** `paths` उम्मीदवार केवल तर्क कुंजियों के एक दस्तावेज़ित समूह से आते हैं (किसी भी गहराई पर, गहराई-सीमित), और केवल कार्यक्षेत्र-सापेक्ष पथ मिलान करते हैं।
161
+ - **यहाँ कोई समीक्षक नहीं।** प्लगइन कभी उप-एजेंट नहीं बनाता या मॉडल नहीं बुलाता — `ask` निर्णय उत्पन्न करना ही इसके काम का अंत है।
162
+ - **कोई sandbox परिवर्तन नहीं।** OS-स्तरीय sandbox नीति sandbox सीम की है, इस प्लगइन की नहीं।
163
+ - **ग़लत विन्यास की ज़ोरदार अस्वीकृति।** अज्ञात YAML फ़ील्ड, अज्ञात क्रियाएँ और ख़राब पैटर्न लोड पर अस्वीकृत।
164
+ - **बैकट्रैकिंग सीमाएँ।** glob पैटर्न `maxGlobStars` असीमित स्टार विस्तार तक सीमित; regex-मोड पैटर्न नेस्टेड असीमित क्वांटिफ़ायर और क्वांटिफ़ाइड ओवरलैपिंग शाब्दिक विकल्प अस्वीकारते हैं।
148
165
 
149
- ## संबंधित कार्य
166
+ ## Known limitations
150
167
 
151
- - [Andy8647/dsh-auto-approval](https://github.com/Andy8647/dsh-auto-approval) — दो-अवस्था allow/deny वर्गीकारक, अपनी फ़ाइल-लॉग ऑडिट के साथ; यह प्लगइन पूर्ण तीन-अवस्था शब्दार्थ, घोषणात्मक YAML नियम, सेशन-लॉग ऑडिट और `next()`-सुरक्षित सौंप जोड़ता है।
152
- - `Drifter-yh/dsh-tool-policy` — deny-by-default टूल नीति; दोहराने से बचने के लिए यहाँ दस्तावेज़ित।
153
- - `dsh-auto-review` — इस चक्र का AI-सहारा आधा भाग, जिसका यह प्लगइन अग्रिम छोर है।
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 मोड पसंद करें।
154
172
 
155
- ## ज्ञात सीमाएँ
173
+ ## Collaborating with dsh-auto-review
156
174
 
157
- - `permissionRules/decision` एन्वेलप के `ignorable: true` मार्कर के साथ जोड़ा जाता है, इसलिए कोई भी harness बिल्ड लॉग लोड कर लेता है — जो पाठक इस आउट-ऑफ-रेपो प्रकार को नहीं जानते वे सत्र अस्वीकार करने के बजाय केवल ऑडिट रिकॉर्ड छोड़ देते हैं। मार्कर से पुराने होस्ट (`0.1.0-rc.6` शृंखला) इसे चुपचाप गिरा देते हैं: प्लगइन रनटाइम पर उन्हें पहचानता है (peer संस्करण पूर्व-जाँच + जोड़े गए एन्वेलप की जाँच) और एक-बार चेतावनी के साथ सत्र-लॉग ऑडिट बंद कर देता है, ताकि लॉग हर जगह लोड होते रहें। सत्र में रास्ता वापस चाहिए तो `allowUnmarkedAudit: true` सेट करें; बिना-चिह्न लिखे गए लॉग required-on-read शब्दार्थ वाले होस्ट पर लोड से पहले `scripts/repair-session-logs.mjs` से मरम्मत किए जा सकते हैं।
158
- - `paths` उम्मीदवार ह्यूरिस्टिक हैं: केवल दस्तावेज़ित आर्गुमेंट-कुंजियाँ पथ मिलान में आती हैं, और workspace-सापेक्ष मिलान केवल तभी ASCII-केस-असंवेदनशील होता है जब `caseInsensitivePaths` चालू हो।
159
- - globs एक रूढ़िवादी उपसमुच्चय हैं (brace विस्तार नहीं) — दो पैटर्न लिखें या regex मोड इस्तेमाल करें।
160
- - regex बैकट्रैकिंग गार्ड संरचनात्मक है, संपूर्ण नहीं: शाब्दिक उपसर्ग के बिना विकल्प-अस्पष्टता के मामले (जैसे कृत्रिम lookarounds) लेखक की ज़िम्मेदारी हैं; अविश्वसनीय फ़ाइलों के लिए glob मोड पसंद करें।
175
+ - `dsh-permission-rules` `ask` उत्पन्न करता है; `dsh-auto-review` `approval/request` वॉटरफ़ॉल पर केवल-पठन द्वितीय-मॉडल निर्णय से उत्तर देता है (या मानवों को प्रत्यायोजित करता है)। पूर्ण बंद लूप के लिए दोनों माउंट करें।
176
+ - एकीकरण-परीक्षित: `permissionRules/decision` → `approval/asked` → `autoReview/verdict` → `approval/decided`, समीक्षक को स्क्रिप्टेड मॉक से बदलकर।
177
+ - आधिकारिक harness की `never` अनुमोदन नीति और हर बंद-विफल गारंटी अछूती रहती हैं।
161
178
 
162
- ## सत्र लॉग मरम्मत
179
+ ## Session log repair
163
180
 
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 # node ^22.19 || >=24
177
- pnpm run typecheck # tsc, src + tests
178
- pnpm run lint # eslint, src + tests + scripts
179
- pnpm test # vitest: 139 tests, 9 suites
180
- pnpm run test:coverage # कवरेज द्वार (90/80/90/90)
181
- pnpm run build # tsc डिक्लेरेशन + tsdown bundles (lib/)
182
- pnpm run pack:check # build + pack (प्रकाशित आर्टिफ़ैक्ट)
183
- node scripts/check-readme-sync.mjs # पाँच-भाषा README सिंक द्वार (CI में भी)
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
- headless एंड-टू-एंड सत्यापन रिकॉर्ड (deny द्वारा shell टूल रोकना, ask का approval seam से गुज़रना, `--dump-config`) [VERIFICATION.md](VERIFICATION.md) में देखें।
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`
208
+
209
+ ## Contributors
210
+
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-क्षमता पहचान और दस्तावेज़ सुधार सीधे उसी विश्लेषण से निकले।
213
+
214
+ ## PerryLink DSH Plugin Family
187
215
 
188
- ## योगदानकर्ता
216
+ यह परियोजना [PerryLink](https://github.com/PerryLink) द्वारा अनुरक्षित [15 DeepSeek Harness प्लगइन](https://github.com/PerryLink) में से एक है। यदि यह आपकी मदद करता है, तो बाकी भी संभवतः करेंगे:
189
217
 
190
- - [@PerryLink](https://github.com/PerryLink) — निर्माता और अनुरक्षक: नियम शब्दावली व मूल्यांकन, runtime, HMR निगरानी, सत्र-लॉग ऑडिट और पाँच-भाषा दस्तावेज़।
191
- - [@22xuan](https://github.com/22xuan) — rc.6 होस्ट द्वारा ऑडिट इवेंट के `ignorable` मार्कर को चुपचाप गिराने की विस्तृत रिपोर्ट ([#2](https://github.com/PerryLink/dsh-permission-rules/issues/2)) और अपस्ट्रीम harness चर्चा; v0.4.1 की रनटाइम होस्ट-क्षमता पहचान और दस्तावेज़ सुधार सीधे उसी विश्लेषण से निकले हैं।
218
+ | Plugin | One-liner |
219
+ |---|---|
220
+ | [dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel) | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors |
221
+ | [dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck) | Engineering-discipline guard: requirements grill, test gates, adversary review |
222
+ | [dsh-background-agents](https://github.com/PerryLink/dsh-background-agents) | Durable background child agents with a Web UI sidebar, messaging and interrupt |
223
+ | [dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions) | LSP diagnostics, formatting, completion, code actions and rename over language servers |
224
+ | [dsh-output-styles](https://github.com/PerryLink/dsh-output-styles) | Claude Code outputStyles-equivalent runtime style switching |
225
+ | [dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind) | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore |
226
+ | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit |
227
+ | [dsh-auto-review](https://github.com/PerryLink/dsh-auto-review) | Second-model auto-review on the approval chain, fail-closed by default |
228
+ | [dsh-memento](https://github.com/PerryLink/dsh-memento) | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
229
+ | [dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security) | Security-audit skill pack: secret scan, dependency and supply-chain review |
230
+ | [dsh-session-pin](https://github.com/PerryLink/dsh-session-pin) | Pin sessions in the Web sidebar with durable ordering |
231
+ | [dsh-composer-history](https://github.com/PerryLink/dsh-composer-history) | Terminal-style input history for the web composer: arrows, Ctrl+R search |
232
+ | [dsh-github](https://github.com/PerryLink/dsh-github) | GitHub PR/issues integration for DSH, every write gated by approval |
233
+ | [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) | Plugin-development knowledge base as an on-demand agent skill |
234
+ | [dsh-claude-move](https://github.com/PerryLink/dsh-claude-move) | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
192
235
 
193
- ## लाइसेंस
236
+ ## License
194
237
 
195
238
  [Apache License 2.0](LICENSE) © 2026 dsh-permission-rules contributors