dsh-output-styles 0.3.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.es.md +168 -124
- package/README.hi.md +246 -0
- package/README.md +151 -107
- package/README.pt.md +246 -0
- package/README.zh.md +168 -124
- package/docs/renderer-protocol.md +134 -0
- package/docs/renderer-protocol.zh.md +125 -0
- package/lib/index.js +437 -5
- package/lib/types/client/index.d.ts +1 -1
- package/lib/types/config.d.ts +32 -0
- package/lib/types/config.d.ts.map +1 -1
- package/lib/types/export.d.ts +76 -0
- package/lib/types/export.d.ts.map +1 -0
- package/lib/types/index.d.ts +12 -12
- package/lib/types/renderers.d.ts +119 -0
- package/lib/types/renderers.d.ts.map +1 -0
- package/lib/types/runtime.d.ts +14 -3
- package/lib/types/runtime.d.ts.map +1 -1
- package/lib/types/types.d.ts +32 -0
- package/lib/types/types.d.ts.map +1 -1
- package/package.json +15 -7
- package/src/config.ts +49 -0
- package/src/export.ts +199 -0
- package/src/renderers.ts +264 -0
- package/src/runtime.ts +115 -2
- package/src/types.ts +28 -0
- package/README.ja.md +0 -202
- package/README.ko.md +0 -202
package/README.hi.md
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🎨 dsh-output-styles
|
|
4
|
+
|
|
5
|
+
**DeepSeek Harness के लिए Claude Code का `outputStyles`**: मॉडल की आउटपुट शैली को रनटाइम पर, प्रति-सत्र, स्थायी रूप से बदलें।
|
|
6
|
+
|
|
7
|
+
*`/style concise` — और अब से हर उत्तर संक्षिप्त। `/style off` — वापस परियोजना के डिफ़ॉल्ट पर।*
|
|
8
|
+
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
[](https://github.com/topics/dsh-plugin)
|
|
11
|
+
[](#)
|
|
12
|
+
[](https://github.com/PerryLink/dsh-output-styles/actions)
|
|
13
|
+
[](https://github.com/PerryLink/dsh-output-styles/releases)
|
|
14
|
+
[](https://www.npmjs.com/package/dsh-output-styles)
|
|
15
|
+
[](https://www.npmjs.com/package/dsh-output-styles)
|
|
16
|
+
|
|
17
|
+
[English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Compatibility
|
|
24
|
+
|
|
25
|
+
| Surface | Status |
|
|
26
|
+
|---|---|
|
|
27
|
+
| Harness | DeepSeek Harness `0.1.0-rc.6` |
|
|
28
|
+
| Node | `^22.19.0 || >=24.0.0` |
|
|
29
|
+
| Platforms | सभी (host + वेब क्लाइंट) |
|
|
30
|
+
| Model | कोई भी (सिस्टम-प्रॉम्प्ट इंजेक्शन) |
|
|
31
|
+
|
|
32
|
+
## What you get
|
|
33
|
+
|
|
34
|
+
`dsh-output-styles` DeepSeek Harness के लिए Claude Code के `outputStyles` का समकक्ष है: एक `/style` कमांड जो रनटाइम पर मॉडल की आउटपुट शैली बदलता है, प्रति-सत्र स्थायी होता है और हर प्रॉम्प्ट संयोजन पर इंजेक्ट होता है।
|
|
35
|
+
|
|
36
|
+
- **शैली पुस्तकालय** — प्रति शैली एक Markdown फ़ाइल (`styles/*.md`); मेटाडेटा के लिए frontmatter, मुख्य भाग = मॉडल निर्देश। छह अंतर्निहित (`concise`, `explanatory`, `formal`, `learning`, `proactive`, `step-by-step`), जिनमें Claude Code-समतुल्य `proactive` और `learning` शामिल हैं।
|
|
37
|
+
- **`/style` कमांड** — बिना तर्क शैलियों (विवरण सहित) और वर्तमान चयन को सूचीबद्ध करता है; `/style <name>` बदलता है; `/style off` परियोजना डिफ़ॉल्ट बहाल करता है।
|
|
38
|
+
- **सत्र-स्कोप्ड स्थायित्व** — चयन `output_style` स्टोरेज डोमेन में रहता है, sessionId से अनुक्रमित, और पुनःआरंभ के बाद भी बना रहता है।
|
|
39
|
+
- **सिस्टम-प्रॉम्प्ट इंजेक्शन** — एक `systemPrompt.section()` योगदान (क्रम `sectionOrder`) हर संयोजन पर वर्तमान सत्र की शैली का मुख्य भाग इंजेक्ट करता है, एक विन्यास-योग्य बजट पर काटा गया।
|
|
40
|
+
- **Claude Code समानता** — `keep-coding-instructions`, `force-for-plugin` (उपनाम `force`), `outputStyles` JSON संगतता, स्तरित `stylesDir` निर्देशिकाएँ, हॉट रीलोड और DSH settings सीम पर परियोजना-डिफ़ॉल्ट फ़ॉलबैक।
|
|
41
|
+
- **रेंडरर रजिस्ट्री (`output.render.*`)** — `ctx.outputRenderers` किसी भी प्लगइन को एक शुद्ध presenter पंजीकृत करने देता है, जो `output.render/before` वॉटरफ़ॉल से लागू होता है; अंतर्निहित रेंडरर `concise` और `step-by-step`।
|
|
42
|
+
- **प्रति-सत्र/प्रति-टूल नियम** — `rules: [{ match: { tool: 'bash' }, style: 'concise' }]` मिलान वाले अनुरोधों के लिए रेंडरर नामित करते हैं; `output-style-rules` settings अनुभाग से संपादन-योग्य।
|
|
43
|
+
- **`/export`** — रेंडर पाइपलाइन से वर्तमान सत्र को Markdown या सैनिटाइज़्ड HTML में प्रस्तुत करता है; हर रेंडर मूल पाठ को रेंडर किए गए के साथ रखता है।
|
|
44
|
+
|
|
45
|
+
## Quick start
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
# 1. install the bundle into your profile
|
|
49
|
+
dsh plugin --profile web add "github:PerryLink/dsh-output-styles#main"
|
|
50
|
+
|
|
51
|
+
# or from npm (published releases)
|
|
52
|
+
dsh plugin --profile web add dsh-output-styles
|
|
53
|
+
|
|
54
|
+
# 2. restart and verify the row
|
|
55
|
+
dsh --profile web --dump-config | grep -A3 'id: output-styles'
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Demo
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
You > /style
|
|
62
|
+
output style off
|
|
63
|
+
concise — Terse, direct answers — minimal prose, no preamble. (Daily coding work, tool-heavy sessions, or when prompt length matters.)
|
|
64
|
+
explanatory — Educational answers with short "Insights" that teach as you work. (Learning a codebase, onboarding, …)
|
|
65
|
+
formal — Formal, precise prose with complete sentences and defined terms. (Reports, documentation, release notes, …)
|
|
66
|
+
learning — Collaborative learn-by-doing mode with short "Insights" and small hands-on steps for the user. (Pairing, onboarding, …)
|
|
67
|
+
proactive — Execute immediately, assume reasonable defaults, and prefer action over planning. (Routine multi-step work, …)
|
|
68
|
+
step-by-step — Numbered reasoning steps with explicit intermediate results. (Debugging, design decisions, …)
|
|
69
|
+
|
|
70
|
+
You > /style concise
|
|
71
|
+
switched to concise
|
|
72
|
+
|
|
73
|
+
You > 请只用一句话介绍你自己。
|
|
74
|
+
AI > 我是运行在 DeepSeek Harness 插件化平台上、基于 deepseek-v4-pro 模型的 AI 编码代理。
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## How it works
|
|
78
|
+
|
|
79
|
+
```mermaid
|
|
80
|
+
flowchart LR
|
|
81
|
+
U[You type /style concise] --> C[command registry]
|
|
82
|
+
C -->|command/run logged| L[(session log)]
|
|
83
|
+
C -->|put {style, source}| D[(output_style domain)]
|
|
84
|
+
D --> R[OutputStyleRuntime]
|
|
85
|
+
R -->|body at every assembly| S[systemPrompt section order 90]
|
|
86
|
+
S --> M[Model request]
|
|
87
|
+
M -->|full system prompt| H[request/header logged]
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
मॉडल जो देखता है वह सब सत्र लॉग से पुनर्निर्माण-योग्य है — कोई नया सत्र घटना प्रकार नहीं, कोई agent-loop बदलाव नहीं। शैली नाम `command/run` से आता है, सटीक इंजेक्ट किया गया पाठ `request/header` से, और स्रोत मार्कर `{ kind: 'plugin', plugin: 'dsh-output-styles' }` डोमेन रिकॉर्ड में चलता है। शैलियाँ केवल मुख्य वार्तालाप पर लागू होती हैं; उप-एजेंट सत्र अपने प्रॉम्प्ट रखते हैं (Claude Code की तरह)।
|
|
91
|
+
|
|
92
|
+
## Install & uninstall
|
|
93
|
+
|
|
94
|
+
- **git चैनल** (नवीनतम `main`): `dsh plugin --profile web add "github:PerryLink/dsh-output-styles#main"` — `prepare` स्क्रिप्ट केवल उत्पादन निर्भरताओं से बनाती है।
|
|
95
|
+
- **npm चैनल** (प्रकाशित रिलीज़): `dsh plugin --profile web add dsh-output-styles`.
|
|
96
|
+
- **tarball चैनल**: इस रेपो में `pnpm pack`, फिर `dsh plugin --profile web add ./dsh-output-styles-<version>.tgz`.
|
|
97
|
+
- **uninstall**: `dsh plugin --profile web remove dsh-output-styles`.
|
|
98
|
+
|
|
99
|
+
## Configuration
|
|
100
|
+
|
|
101
|
+
सभी ट्यूनेबल Schemastery `Config` फ़ील्ड हैं (cordis.yml से बदले जा सकते हैं)। अमान्य मान लोड को विफल करते हैं।
|
|
102
|
+
|
|
103
|
+
| Key | Default | Meaning |
|
|
104
|
+
|---|---|---|
|
|
105
|
+
| `stylesDir` | `[]` | शैली-पुस्तकालय निर्देशिकाएँ, cwd के सापेक्ष; बाद की प्रविष्टियाँ पहले वालों को ओवरराइड करती हैं। `[]` = केवल अंतर्निहित `styles/` |
|
|
106
|
+
| `maxStyleChars` | `4000` | शैली-मुख्य बजट (≥ 1); लंबे भाग एक मार्कर से काटे जाते हैं |
|
|
107
|
+
| `defaultStyle` | `''` | उन सत्रों की शैली जिन्होंने कभी चयन नहीं किया (और कोई settings डिफ़ॉल्ट नहीं); `''` = कोई शैली नहीं |
|
|
108
|
+
| `compatJson` | `true` | Claude Code `outputStyles` JSON प्रविष्टियाँ लोड करें (एकल ऑब्जेक्ट या ऐरे) |
|
|
109
|
+
| `sectionOrder` | `90` | इंजेक्ट किए गए अनुभाग का क्रम (0 = persona, 100–199 = टूल मार्गदर्शन) |
|
|
110
|
+
| `truncationMarker` | `"\n\n[style truncated]"` | काटने के बिंदु पर जोड़ा गया मार्कर |
|
|
111
|
+
| `includeBuiltins` | `true` | पैकेज के अंतर्निहित `styles/` को निम्नतम-प्राथमिकता परत के रूप में शामिल करें |
|
|
112
|
+
| `watchStyles` | `true` | डिस्क पर शैली फ़ाइल बदलने पर पुस्तकालय फिर से लोड करें |
|
|
113
|
+
| `rules` | `[]` | प्रति-सत्र/प्रति-टूल रेंडर नियम: `[{ match: { tool?, contentType?, session? }, style, priority? }]` |
|
|
114
|
+
| `enableExport` | `true` | `/export` कमांड पंजीकृत करें (Markdown/HTML सत्र निर्यात, रेंडरर-जागरूक) |
|
|
115
|
+
|
|
116
|
+
## Tools & surfaces
|
|
117
|
+
|
|
118
|
+
| Surface | Kind | Notes |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| `/style` | command | शैलियाँ सूचीबद्ध करें, बदलें या परियोजना डिफ़ॉल्ट बहाल करें |
|
|
121
|
+
| `/export` | command | वर्तमान सत्र को Markdown या सैनिटाइज़्ड HTML में प्रस्तुत करें |
|
|
122
|
+
| `output_style` | storage domain | sessionId से अनुक्रमित सत्र-स्कोप्ड शैली चयन |
|
|
123
|
+
| `systemPrompt.section()` | contribution | हर संयोजन पर वर्तमान शैली का मुख्य भाग इंजेक्ट करता है |
|
|
124
|
+
| `output.render.*` | renderer registry | `ctx.outputRenderers` + `output.render/before` वॉटरफ़ॉल |
|
|
125
|
+
| `style` | projection | स्थिर कमांडों से मुड़ा हुआ `{ options, currentValue }` |
|
|
126
|
+
| Web picker | client entry | `dsh-output-styles/client` `/style` को पॉप-अप चयनकर्ता से सजाता है |
|
|
127
|
+
|
|
128
|
+
## Command reference
|
|
129
|
+
|
|
130
|
+
| Input | Outcome |
|
|
131
|
+
|---|---|
|
|
132
|
+
| `/style` | वर्तमान चयन + प्रति शैली एक पंक्ति (नाम — विवरण) सूचीबद्ध करें |
|
|
133
|
+
| `/style concise` | बदलें (स्थायी लेखन), `switched to concise` |
|
|
134
|
+
| `/style Diagrams first` | बहु-शब्द नाम पूरा शेष भाग होते हैं |
|
|
135
|
+
| `/style off` | परियोजना डिफ़ॉल्ट बहाल करें (settings डिफ़ॉल्ट, फिर `defaultStyle`) |
|
|
136
|
+
| `/style nope` | `error: unknown output style "nope" (available: …)` |
|
|
137
|
+
| `/export` | रेंडर पाइपलाइन से वर्तमान सत्र को Markdown में प्रस्तुत करें |
|
|
138
|
+
| `/export html` | सैनिटाइज़्ड HTML में प्रस्तुत करें |
|
|
139
|
+
| `/export --renderer=concise` | एक रेंडरर बाध्य करके प्रस्तुत करें (नियम छोड़े गए) |
|
|
140
|
+
|
|
141
|
+
## Style library
|
|
142
|
+
|
|
143
|
+
प्रति शैली एक Markdown फ़ाइल; frontmatter मेटाडेटा के लिए, मुख्य भाग = मॉडल निर्देश। `name` डिफ़ॉल्ट रूप से फ़ाइल नाम लेता है और रिक्त स्थान रख सकता है (`Diagrams first`)।
|
|
144
|
+
|
|
145
|
+
| Field | Default | Meaning |
|
|
146
|
+
|---|---|---|
|
|
147
|
+
| `name` | फ़ाइल नाम | बदलाव का लक्ष्य; अक्षर, अंक, रिक्त स्थान और हाइफ़न (`off` आरक्षित है) |
|
|
148
|
+
| `description` | — (आवश्यक) | सूचियों और चयनकर्ता में दिखाया गया एक वाक्य |
|
|
149
|
+
| `whenToUse` | — | सूचियों में जोड़ा गया वैकल्पिक मार्गदर्शन |
|
|
150
|
+
| `keep-coding-instructions` | `false` | `true` होने पर harness प्रॉम्प्ट रखें; `false` होने पर उसे बदल दें (Claude Code अर्थविज्ञान) |
|
|
151
|
+
| `force-for-plugin` | `false` | बिना शर्त लागू करें, किसी भी सत्र चयन को ओवरराइड करते हुए; `force` एक उपनाम है, अधिकतम एक शैली इसे सेट कर सकती है |
|
|
152
|
+
|
|
153
|
+
`compatJson: true` होने पर, Claude Code `outputStyles` JSON प्रविष्टियाँ (`{ name, description, prompt }`) Markdown शैलियों के साथ लोड होती हैं; पार्स न होने वाली प्रविष्टियाँ एक चेतावनी से छोड़ दी जाती हैं।
|
|
154
|
+
|
|
155
|
+
## Renderer protocol
|
|
156
|
+
|
|
157
|
+
`output.render.*` प्रोटोकॉल प्रस्तुति को एक विस्तार बिंदु में बदल देता है। एक रेंडरर एक **शुद्ध presenter** है — `presenter(text, context)` तर्कों को प्रदर्शन डेटा में मैप करता है, DOM को कभी नहीं छूता — टूल नाम और सामग्री प्रकार से मिलान, प्राथमिकता से क्रमबद्ध।
|
|
158
|
+
|
|
159
|
+
- **Waterfall पहले**: हर रेंडर अनुरोध `output.render/before` (`{ text, context }`) से गुज़रता है; listeners को `next()` कॉल करना चाहिए।
|
|
160
|
+
- **Rules**: `rules: [{ match: { tool: 'bash' }, style: 'concise' }]` मिलान वाले अनुरोधों के लिए रेंडरर नामित करता है; बराबरी `priority` से और फिर नियम क्रम से टूटती है।
|
|
161
|
+
- **Built-ins**: `concise` (व्हाइटस्पेस संघनन + बजट कटाव) और `step-by-step` (सुसंगत चरण क्रमांकन)।
|
|
162
|
+
- **Auditability**: हर रेंडर परिणाम `{ original, rendered, rendererId, changed }` रखता है; रेंडर किया गया पाठ जो दिखता है, मूल सत्र लॉग से पुनर्निर्माण-योग्य रहता है।
|
|
163
|
+
|
|
164
|
+
## Web picker
|
|
165
|
+
|
|
166
|
+
`dsh.client` प्रविष्टि host `/style` कमांड के नंगे आह्वान को एक पॉप-अप चयनकर्ता से सजाती है: एक "off" पंक्ति + प्रति पुस्तकालय शैली एक पंक्ति (`description · whenToUse`), सक्रिय पंक्ति चिह्नित। चुनना कमांड Remote के माध्यम से `/style <name>` सबमिट करता है, इसलिए हर बदलाव host का स्थायी कमांड जीवनचक्र बनाए रखता है। चयनकर्ता Web UI के `zh`/`en` भाषा युग्म का अनुसरण करता है।
|
|
167
|
+
|
|
168
|
+
## Differences from Claude Code
|
|
169
|
+
|
|
170
|
+
| | Claude Code | dsh-output-styles |
|
|
171
|
+
|---|---|---|
|
|
172
|
+
| शैली फ़ाइलें | उपयोगकर्ता/परियोजना/प्रबंधित स्तरों पर `.claude/output-styles` | `stylesDir` निर्देशिकाएँ + अंतर्निहित `styles/`, बाद वाली निर्देशिका जीतती है |
|
|
173
|
+
| कस्टम शैलियाँ | Markdown, frontmatter `name`/`description`/`keep-coding-instructions`/`force-for-plugin` | समान फ़ील्ड (`force-for-plugin` शब्दशः स्वीकृत, `force` उपनाम) + `whenToUse` |
|
|
174
|
+
| लीगेसी JSON | `settings.json` में `outputStyles` ऐरे | शब्दशः लोड (`compatJson: true`) |
|
|
175
|
+
| प्रभावी होने का समय | `/clear` के बाद या नया सत्र | तुरंत — सिस्टम प्रॉम्प्ट प्रति-अनुरोध पुनः संयोजित होता है |
|
|
176
|
+
| उप-एजेंट | शैलियाँ लागू नहीं होतीं | समान — उप-एजेंट सत्र अपने प्रॉम्प्ट रखते हैं |
|
|
177
|
+
| बदलना | `/config` मेनू या `outputStyle` सेटिंग (`/output-style` कमांड v2.1.91 में हटाया गया) | `/style` कमांड + Web picker + settings `output-style.style` |
|
|
178
|
+
|
|
179
|
+
## Conflict check
|
|
180
|
+
|
|
181
|
+
विकास से पहले DSH पारिस्थितिकी के विरुद्ध जाँचा गया (2026-08 स्नैपशॉट): [topic:dsh-plugin](https://github.com/topics/dsh-plugin) के अंतर्गत कोई `style`/`output-style` रिपॉज़िटरी नहीं, चार प्रमुख [awesome lists](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) में कोई output-style श्रेणी नहीं, और [dsh-hub catalog](https://github.com/omdsh-dev/dsh-hub-workshop) में कोई प्रविष्टि नहीं। निकटतम पड़ोसी — [dsh-soul-md](https://github.com/Scorp1o117/dsh-soul-md) (persona) और [dsh-claude-marketplace](https://github.com/ben7am1n/dsh-claude-marketplace) (आउटपुट शैलियाँ स्पष्ट रूप से v0.2+ तक टाली गईं) — सन्निकट हैं, संघर्षपूर्ण नहीं।
|
|
182
|
+
|
|
183
|
+
## Permissions & data
|
|
184
|
+
|
|
185
|
+
- **Permissions**: workshop मैनिफ़ेस्ट `fs:read`, `fs:watch`, `storage:read`, `storage:write` और `settings:read` घोषित करता है।
|
|
186
|
+
- **Data**: शैली चयन `output_style` स्टोरेज डोमेन में रहता है (sessionId से अनुक्रमित); कोई अन्य स्थिति स्थायी नहीं, कोई नेटवर्क अनुरोध नहीं।
|
|
187
|
+
- **Session log**: शैली नाम `command/run` से आता है, सटीक इंजेक्ट किया गया पाठ `request/header` से; स्रोत मार्कर `{ kind: 'plugin', plugin: 'dsh-output-styles' }` डोमेन रिकॉर्ड में चलता है।
|
|
188
|
+
|
|
189
|
+
## Security boundaries
|
|
190
|
+
|
|
191
|
+
- **केवल सार्वजनिक सेवाएँ।** `systemPrompt`, कमांड, स्टोरेज और settings योगदान करता है; engine / agent-loop / apiproxy / आधिकारिक UI में कोई बदलाव नहीं।
|
|
192
|
+
- **मॉडल-दृश्य ⟺ लॉग किया गया।** मॉडल जो देखता है वह सब सत्र लॉग से पुनर्निर्माण-योग्य है — कोई नया सत्र घटना प्रकार नहीं, कोई agent-loop बदलाव नहीं।
|
|
193
|
+
- **मूल हमेशा रखा गया।** हर रेंडर (और `/export`) मूल पाठ को रेंडर किए गए के साथ रखता है; HTML निर्यात के लिए सैनिटाइज़्ड HTML उपयोग होता है।
|
|
194
|
+
|
|
195
|
+
## Known limitations
|
|
196
|
+
|
|
197
|
+
- **केवल मुख्य वार्तालाप।** शैलियाँ मुख्य वार्तालाप पर लागू होती हैं; उप-एजेंट सत्र अपने प्रॉम्प्ट रखते हैं (Claude Code की तरह)।
|
|
198
|
+
- **कटाव।** `maxStyleChars` से लंबे शैली मुख्य भाग एक मार्कर से काटे जाते हैं।
|
|
199
|
+
- **छोड़ी गई फ़ाइलें।** एक ख़राब शैली फ़ाइल चेतावनी से छोड़ दी जाती है और profile को कभी नहीं तोड़ती।
|
|
200
|
+
|
|
201
|
+
## Development
|
|
202
|
+
|
|
203
|
+
```sh
|
|
204
|
+
pnpm install
|
|
205
|
+
pnpm run typecheck # दोनों tsc परियोजनाएँ
|
|
206
|
+
pnpm test # vitest — 107 tests
|
|
207
|
+
pnpm run verify # typecheck + tests + self-contained (prepublishOnly द्वार)
|
|
208
|
+
pnpm run build # lib/ कलाकृतियाँ (host + client बंडल)
|
|
209
|
+
pnpm pack # dsh plugin add के लिए tarball
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
रिलीज़: `package.json` संस्करण से मेल खाते प्रत्यय वाला `v*` टैग पुश करने पर Publish workflow चलता है — पूर्ण सत्यापन, फिर provenance सहित npm प्रकाशन।
|
|
213
|
+
|
|
214
|
+
## Topics
|
|
215
|
+
|
|
216
|
+
`deepseek-harness`, `dsh`, `dsh-plugin`, `output-style`, `output-styles`, `claude-code`
|
|
217
|
+
|
|
218
|
+
## Contributors
|
|
219
|
+
|
|
220
|
+
- [@PerryLink](https://github.com/PerryLink) — लेखक और अनुरक्षक: प्लगइन वास्तुकला, शैली पुस्तकालय, बंडल स्थापना, Web picker, पाँच-भाषा दस्तावेज़ और CI/रिलीज़ टूलिंग।
|
|
221
|
+
|
|
222
|
+
## PerryLink DSH Plugin Family
|
|
223
|
+
|
|
224
|
+
यह परियोजना [PerryLink](https://github.com/PerryLink) द्वारा अनुरक्षित [15 DeepSeek Harness प्लगइन](https://github.com/PerryLink) में से एक है। यदि यह आपकी मदद करता है, तो बाकी भी संभवतः करेंगे:
|
|
225
|
+
|
|
226
|
+
| Plugin | One-liner |
|
|
227
|
+
|---|---|
|
|
228
|
+
| [dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel) | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors |
|
|
229
|
+
| [dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck) | Engineering-discipline guard: requirements grill, test gates, adversary review |
|
|
230
|
+
| [dsh-background-agents](https://github.com/PerryLink/dsh-background-agents) | Durable background child agents with a Web UI sidebar, messaging and interrupt |
|
|
231
|
+
| [dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions) | LSP diagnostics, formatting, completion, code actions and rename over language servers |
|
|
232
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching |
|
|
233
|
+
| [dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind) | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore |
|
|
234
|
+
| [dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules) | Claude Code-style declarative allow/deny/ask permission rules with audit |
|
|
235
|
+
| [dsh-auto-review](https://github.com/PerryLink/dsh-auto-review) | Second-model auto-review on the approval chain, fail-closed by default |
|
|
236
|
+
| [dsh-memento](https://github.com/PerryLink/dsh-memento) | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
|
|
237
|
+
| [dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security) | Security-audit skill pack: secret scan, dependency and supply-chain review |
|
|
238
|
+
| [dsh-session-pin](https://github.com/PerryLink/dsh-session-pin) | Pin sessions in the Web sidebar with durable ordering |
|
|
239
|
+
| [dsh-composer-history](https://github.com/PerryLink/dsh-composer-history) | Terminal-style input history for the web composer: arrows, Ctrl+R search |
|
|
240
|
+
| [dsh-github](https://github.com/PerryLink/dsh-github) | GitHub PR/issues integration for DSH, every write gated by approval |
|
|
241
|
+
| [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) | Plugin-development knowledge base as an on-demand agent skill |
|
|
242
|
+
| [dsh-claude-move](https://github.com/PerryLink/dsh-claude-move) | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
|
|
243
|
+
|
|
244
|
+
## License
|
|
245
|
+
|
|
246
|
+
[Apache License 2.0](LICENSE) © 2026 dsh-output-styles contributors
|
package/README.md
CHANGED
|
@@ -4,62 +4,58 @@
|
|
|
4
4
|
|
|
5
5
|
**Claude Code `outputStyles` for DeepSeek Harness** — switch the model's output style at runtime, per session, durably.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
*`/style concise` — and every reply from now on is terse. `/style off` — back to the project default.*
|
|
8
|
+
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
[](https://github.com/topics/dsh-plugin)
|
|
9
11
|
[](#)
|
|
10
|
-
[](https://github.com/PerryLink/dsh-output-styles/actions)
|
|
13
|
+
[](https://github.com/PerryLink/dsh-output-styles/releases)
|
|
14
|
+
[](https://www.npmjs.com/package/dsh-output-styles)
|
|
15
|
+
[](https://www.npmjs.com/package/dsh-output-styles)
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
[English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
|
|
14
18
|
|
|
15
19
|
</div>
|
|
16
20
|
|
|
17
21
|
---
|
|
18
22
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
## ✨ Features
|
|
23
|
+
## Compatibility
|
|
22
24
|
|
|
23
|
-
| | |
|
|
25
|
+
| Surface | Status |
|
|
24
26
|
|---|---|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
27
|
+
| Harness | DeepSeek Harness `0.1.0-rc.6` |
|
|
28
|
+
| Node | `^22.19.0 || >=24.0.0` |
|
|
29
|
+
| Platforms | All (host + web client) |
|
|
30
|
+
| Model | Any (system-prompt injection) |
|
|
31
|
+
|
|
32
|
+
## What you get
|
|
33
|
+
|
|
34
|
+
`dsh-output-styles` is the Claude Code `outputStyles` equivalent for DeepSeek Harness: a `/style` command that switches the model's output style at runtime, persisted per session, injected at every prompt assembly.
|
|
35
|
+
|
|
36
|
+
- **Style library** — one Markdown file per style (`styles/*.md`); frontmatter for metadata, body = the model directive. Six built-ins ship in the box (`concise`, `explanatory`, `formal`, `learning`, `proactive`, `step-by-step`), including Claude Code-parity `proactive` and `learning`.
|
|
37
|
+
- **`/style` command** — no argument lists styles (with descriptions) plus the current selection; `/style <name>` switches; `/style off` restores the project default.
|
|
38
|
+
- **Session-scoped persistence** — the choice lives in the `output_style` storage domain, keyed by sessionId, and survives restarts.
|
|
39
|
+
- **System-prompt injection** — a `systemPrompt.section()` contribution (order `sectionOrder`) injects the current session's style body at every assembly, truncated at a configurable budget.
|
|
40
|
+
- **Claude Code parity** — `keep-coding-instructions`, `force-for-plugin` (`force` alias), `outputStyles` JSON compatibility, layered `stylesDir` directories, hot reload, and project-default fallback over the DSH settings seam.
|
|
41
|
+
- **Renderer registry (`output.render.*`)** — `ctx.outputRenderers` lets any plugin register a pure presenter, applied through the `output.render/before` waterfall; built-in renderers `concise` and `step-by-step`.
|
|
42
|
+
- **Per-session/per-tool rules** — `rules: [{ match: { tool: 'bash' }, style: 'concise' }]` name the renderer for matching requests; editable through the `output-style-rules` settings section.
|
|
43
|
+
- **`/export`** — render the current session to Markdown or sanitized HTML through the render pipeline; every render keeps the original text beside the rendered one.
|
|
44
|
+
|
|
45
|
+
## Quick start
|
|
41
46
|
|
|
42
47
|
```sh
|
|
43
|
-
# 1.
|
|
44
|
-
|
|
45
|
-
dsh plugin --profile <name> add dsh-output-styles
|
|
46
|
-
|
|
47
|
-
# 2. Boot and switch
|
|
48
|
-
dsh --profile <name>
|
|
49
|
-
/style # → output style off, then one line per style
|
|
50
|
-
/style concise # → switched to concise
|
|
51
|
-
/style Diagrams first # → names with spaces work too
|
|
52
|
-
/style off # → back to the project default
|
|
53
|
-
```
|
|
48
|
+
# 1. install the bundle into your profile
|
|
49
|
+
dsh plugin --profile web add "github:PerryLink/dsh-output-styles#main"
|
|
54
50
|
|
|
55
|
-
|
|
51
|
+
# or from npm (published releases)
|
|
52
|
+
dsh plugin --profile web add dsh-output-styles
|
|
56
53
|
|
|
57
|
-
|
|
58
|
-
- id: output-styles
|
|
59
|
-
name: 'dsh-output-styles/client'
|
|
54
|
+
# 2. restart and verify the row
|
|
55
|
+
dsh --profile web --dump-config | grep -A3 'id: output-styles'
|
|
60
56
|
```
|
|
61
57
|
|
|
62
|
-
##
|
|
58
|
+
## Demo
|
|
63
59
|
|
|
64
60
|
```
|
|
65
61
|
You > /style
|
|
@@ -78,7 +74,7 @@ You > 请只用一句话介绍你自己。
|
|
|
78
74
|
AI > 我是运行在 DeepSeek Harness 插件化平台上、基于 deepseek-v4-pro 模型的 AI 编码代理。
|
|
79
75
|
```
|
|
80
76
|
|
|
81
|
-
##
|
|
77
|
+
## How it works
|
|
82
78
|
|
|
83
79
|
```mermaid
|
|
84
80
|
flowchart LR
|
|
@@ -93,81 +89,83 @@ flowchart LR
|
|
|
93
89
|
|
|
94
90
|
Everything the model sees is reconstructable from the session log — no new session event type, no agent-loop changes. The style name comes from `command/run`, the exact injected text from `request/header`, and the provenance marker `{ kind: 'plugin', plugin: 'dsh-output-styles' }` rides in the domain record. Styles apply to the main conversation only; subagent sessions keep their own prompts (matching Claude Code).
|
|
95
91
|
|
|
96
|
-
##
|
|
97
|
-
|
|
98
|
-
Every tunable is a validated Schemastery `Config` field (invalid values fail the load):
|
|
92
|
+
## Install & uninstall
|
|
99
93
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
| `defaultStyle` | `''` | Style for sessions that never selected one (and no settings default exists); `''` = no style. |
|
|
105
|
-
| `compatJson` | `true` | Load Claude Code `outputStyles` JSON entries (single objects or arrays). |
|
|
106
|
-
| `sectionOrder` | `90` | Order of the injected section (0 = persona, 100–199 = tool guidance). |
|
|
107
|
-
| `truncationMarker` | `"\n\n[style truncated]"` | Marker appended at the truncation point. |
|
|
108
|
-
| `includeBuiltins` | `true` | Include the package's bundled `styles/` as the lowest-priority layer. |
|
|
109
|
-
| `watchStyles` | `true` | Reload the library when a style file changes on disk. |
|
|
94
|
+
- **git channel** (latest `main`): `dsh plugin --profile web add "github:PerryLink/dsh-output-styles#main"` — the `prepare` script builds with production dependencies only.
|
|
95
|
+
- **npm channel** (published releases): `dsh plugin --profile web add dsh-output-styles`.
|
|
96
|
+
- **tarball channel**: `pnpm pack` in this repo, then `dsh plugin --profile web add ./dsh-output-styles-<version>.tgz`.
|
|
97
|
+
- **uninstall**: `dsh plugin --profile web remove dsh-output-styles`.
|
|
110
98
|
|
|
111
|
-
##
|
|
99
|
+
## Configuration
|
|
112
100
|
|
|
113
|
-
|
|
114
|
-
<summary><code>styles/concise.md</code></summary>
|
|
101
|
+
All tunables are Schemastery `Config` fields (changeable from cordis.yml). Invalid values fail the load.
|
|
115
102
|
|
|
116
|
-
|
|
117
|
-
---
|
|
118
|
-
name: concise
|
|
119
|
-
description: Terse, direct answers — minimal prose, no preamble.
|
|
120
|
-
whenToUse: Daily coding work, tool-heavy sessions, or when prompt length matters.
|
|
121
|
-
keep-coding-instructions: true
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
You are in the concise output style for this conversation.
|
|
125
|
-
- Lead with the direct answer; skip preamble, restatements, and filler.
|
|
126
|
-
- 回答语言跟随用户语言:中文提问用中文回答,英文提问用英文回答。
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
</details>
|
|
130
|
-
|
|
131
|
-
Frontmatter fields:
|
|
132
|
-
|
|
133
|
-
| Field | Default | Meaning |
|
|
103
|
+
| Key | Default | Meaning |
|
|
134
104
|
|---|---|---|
|
|
135
|
-
| `
|
|
136
|
-
| `
|
|
137
|
-
| `
|
|
138
|
-
| `
|
|
139
|
-
| `
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
105
|
+
| `stylesDir` | `[]` | Style-library directories, resolved against cwd; later entries override earlier ones. `[]` = the bundled `styles/` only |
|
|
106
|
+
| `maxStyleChars` | `4000` | Style-body budget (≥ 1); longer bodies are truncated with a marker |
|
|
107
|
+
| `defaultStyle` | `''` | Style for sessions that never selected one (and no settings default exists); `''` = no style |
|
|
108
|
+
| `compatJson` | `true` | Load Claude Code `outputStyles` JSON entries (single objects or arrays) |
|
|
109
|
+
| `sectionOrder` | `90` | Order of the injected section (0 = persona, 100–199 = tool guidance) |
|
|
110
|
+
| `truncationMarker` | `"\n\n[style truncated]"` | Marker appended at the truncation point |
|
|
111
|
+
| `includeBuiltins` | `true` | Include the package's bundled `styles/` as the lowest-priority layer |
|
|
112
|
+
| `watchStyles` | `true` | Reload the library when a style file changes on disk |
|
|
113
|
+
| `rules` | `[]` | Per-session/per-tool render rules: `[{ match: { tool?, contentType?, session? }, style, priority? }]` |
|
|
114
|
+
| `enableExport` | `true` | Register the `/export` command (Markdown/HTML session export, renderer-aware) |
|
|
115
|
+
|
|
116
|
+
## Tools & surfaces
|
|
117
|
+
|
|
118
|
+
| Surface | Kind | Notes |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| `/style` | command | List styles, switch, or restore the project default |
|
|
121
|
+
| `/export` | command | Render the current session to Markdown or sanitized HTML |
|
|
122
|
+
| `output_style` | storage domain | Session-scoped style choice, keyed by sessionId |
|
|
123
|
+
| `systemPrompt.section()` | contribution | Injects the current style body at every assembly |
|
|
124
|
+
| `output.render.*` | renderer registry | `ctx.outputRenderers` + the `output.render/before` waterfall |
|
|
125
|
+
| `style` | projection | `{ options, currentValue }` folded from settled commands |
|
|
126
|
+
| Web picker | client entry | `dsh-output-styles/client` decorates `/style` with a popup picker |
|
|
151
127
|
|
|
152
|
-
##
|
|
128
|
+
## Command reference
|
|
153
129
|
|
|
154
130
|
| Input | Outcome |
|
|
155
131
|
|---|---|
|
|
156
|
-
| `/style` | List current selection + one line per style (name — description) |
|
|
132
|
+
| `/style` | List the current selection + one line per style (name — description) |
|
|
157
133
|
| `/style concise` | Switch (durable write), `switched to concise` |
|
|
158
134
|
| `/style Diagrams first` | Multi-word names are the whole remainder |
|
|
159
135
|
| `/style off` | Restore the project default (settings default, then `defaultStyle`) |
|
|
160
136
|
| `/style nope` | `error: unknown output style "nope" (available: …)` |
|
|
137
|
+
| `/export` | Render the current session to Markdown through the renderer pipeline |
|
|
138
|
+
| `/export html` | Render to sanitized HTML |
|
|
139
|
+
| `/export --renderer=concise` | Render with one renderer forced (rules bypassed) |
|
|
140
|
+
|
|
141
|
+
## Style library
|
|
142
|
+
|
|
143
|
+
One Markdown file per style; frontmatter for metadata, body = the model directive. `name` defaults to the file name and may contain spaces (`Diagrams first`).
|
|
161
144
|
|
|
162
|
-
|
|
145
|
+
| Field | Default | Meaning |
|
|
146
|
+
|---|---|---|
|
|
147
|
+
| `name` | file name | Switch target; letters, digits, spaces, and hyphens (`off` is reserved) |
|
|
148
|
+
| `description` | — (required) | One sentence shown in listings and the picker |
|
|
149
|
+
| `whenToUse` | — | Optional guidance appended to listings |
|
|
150
|
+
| `keep-coding-instructions` | `false` | Keep the harness prompt when `true`; replace it when `false` (Claude Code semantics) |
|
|
151
|
+
| `force-for-plugin` | `false` | Apply unconditionally, overriding any session selection; `force` is an alias, at most one style may set it |
|
|
163
152
|
|
|
164
|
-
|
|
153
|
+
With `compatJson: true`, Claude Code `outputStyles` JSON entries (`{ name, description, prompt }`) load beside Markdown styles; unparseable entries are skipped with a warning.
|
|
165
154
|
|
|
166
|
-
##
|
|
155
|
+
## Renderer protocol
|
|
167
156
|
|
|
168
|
-
|
|
157
|
+
The `output.render.*` protocol turns presentation into an extension point. A renderer is a **pure presenter** — `presenter(text, context)` maps args to display data, never touches the DOM — matched by tool name and content type, ordered by priority.
|
|
169
158
|
|
|
170
|
-
|
|
159
|
+
- **Waterfall first**: every render request passes through `output.render/before` (`{ text, context }`); listeners must call `next()`.
|
|
160
|
+
- **Rules**: `rules: [{ match: { tool: 'bash' }, style: 'concise' }]` names the renderer for matching requests; ties break by `priority`, then rule order.
|
|
161
|
+
- **Built-ins**: `concise` (whitespace compaction + budget truncation) and `step-by-step` (consistent step numbering).
|
|
162
|
+
- **Auditability**: every render result carries `{ original, rendered, rendererId, changed }`; the rendered text is what surfaces, the original stays reconstructable from the session log.
|
|
163
|
+
|
|
164
|
+
## Web picker
|
|
165
|
+
|
|
166
|
+
The `dsh.client` entry decorates the host `/style` command's bare invocation with a popup picker: an "off" row plus one row per library style (`description · whenToUse`), the active row marked. Picking submits `/style <name>` through the command Remote, so every switch keeps the host's durable command lifecycle. The picker follows the Web UI's shipped `zh`/`en` locale pair.
|
|
167
|
+
|
|
168
|
+
## Differences from Claude Code
|
|
171
169
|
|
|
172
170
|
| | Claude Code | dsh-output-styles |
|
|
173
171
|
|---|---|---|
|
|
@@ -178,25 +176,71 @@ Screened against the DSH ecosystem before development (2026-08 snapshot): no `st
|
|
|
178
176
|
| Subagents | Styles do not apply | Same — subagent sessions keep their own prompts |
|
|
179
177
|
| Switching | `/config` menu or `outputStyle` setting (the `/output-style` command was removed in v2.1.91) | `/style` command + Web picker + settings `output-style.style` |
|
|
180
178
|
|
|
181
|
-
##
|
|
179
|
+
## Conflict check
|
|
180
|
+
|
|
181
|
+
Screened against the DSH ecosystem before development (2026-08 snapshot): no `style`/`output-style` repository under [topic:dsh-plugin](https://github.com/topics/dsh-plugin), no output-style category in the four major [awesome lists](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin), and no entry in the [dsh-hub catalog](https://github.com/omdsh-dev/dsh-hub-workshop). The closest neighbors — [dsh-soul-md](https://github.com/Scorp1o117/dsh-soul-md) (persona) and [dsh-claude-marketplace](https://github.com/ben7am1n/dsh-claude-marketplace) (output styles explicitly deferred to v0.2+) — are adjacent, not conflicting.
|
|
182
|
+
|
|
183
|
+
## Permissions & data
|
|
184
|
+
|
|
185
|
+
- **Permissions**: declares `fs:read`, `fs:watch`, `storage:read`, `storage:write`, and `settings:read` in its workshop manifest.
|
|
186
|
+
- **Data**: the style choice lives in the `output_style` storage domain (keyed by sessionId); no other state is persisted, no network requests.
|
|
187
|
+
- **Session log**: the style name comes from `command/run`, the exact injected text from `request/header`; the provenance marker `{ kind: 'plugin', plugin: 'dsh-output-styles' }` rides in the domain record.
|
|
188
|
+
|
|
189
|
+
## Security boundaries
|
|
190
|
+
|
|
191
|
+
- **Public services only.** Contributes `systemPrompt`, commands, storage, and settings; no engine / agent-loop / apiproxy / official-UI changes.
|
|
192
|
+
- **Model-visible ⟺ logged.** Everything the model sees is reconstructable from the session log — no new session event type, no agent-loop changes.
|
|
193
|
+
- **Original always kept.** Every render (and `/export`) keeps the original text beside the rendered one; sanitized HTML is used for HTML export.
|
|
194
|
+
|
|
195
|
+
## Known limitations
|
|
196
|
+
|
|
197
|
+
- **Main conversation only.** Styles apply to the main conversation; subagent sessions keep their own prompts (matching Claude Code).
|
|
198
|
+
- **Truncation.** Style bodies longer than `maxStyleChars` are truncated with a marker.
|
|
199
|
+
- **Skipped style files.** A bad style file is skipped with a warning and never breaks the profile.
|
|
200
|
+
|
|
201
|
+
## Development
|
|
182
202
|
|
|
183
203
|
```sh
|
|
184
204
|
pnpm install
|
|
185
205
|
pnpm run typecheck # both tsc projects
|
|
186
|
-
pnpm test # vitest —
|
|
206
|
+
pnpm test # vitest — 107 tests
|
|
187
207
|
pnpm run verify # typecheck + tests + self-contained (the prepublishOnly gate)
|
|
188
208
|
pnpm run build # lib/ artifacts (host + client bundles)
|
|
189
209
|
pnpm pack # tarball for dsh plugin add
|
|
190
210
|
```
|
|
191
211
|
|
|
192
|
-
Releases: pushing a `v*` tag whose suffix matches the `package.json` version triggers the Publish workflow — full verification, then an npm publish with provenance.
|
|
212
|
+
Releases: pushing a `v*` tag whose suffix matches the `package.json` version triggers the Publish workflow — full verification, then an npm publish with provenance.
|
|
193
213
|
|
|
194
|
-
|
|
214
|
+
## Topics
|
|
195
215
|
|
|
196
|
-
|
|
216
|
+
`deepseek-harness`, `dsh`, `dsh-plugin`, `output-style`, `output-styles`, `claude-code`
|
|
197
217
|
|
|
198
|
-
|
|
218
|
+
## Contributors
|
|
199
219
|
|
|
200
|
-
|
|
220
|
+
- [@PerryLink](https://github.com/PerryLink) — author and maintainer: plugin architecture, style library, bundle install, Web picker, five-language docs, and CI/release tooling.
|
|
221
|
+
|
|
222
|
+
## PerryLink DSH Plugin Family
|
|
201
223
|
|
|
202
|
-
|
|
224
|
+
This project is one of the [15 DeepSeek Harness plugins](https://github.com/PerryLink) maintained by [PerryLink](https://github.com/PerryLink). If this one helps you, the others likely will too:
|
|
225
|
+
|
|
226
|
+
| Plugin | One-liner |
|
|
227
|
+
|---|---|
|
|
228
|
+
| [dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel) | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors |
|
|
229
|
+
| [dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck) | Engineering-discipline guard: requirements grill, test gates, adversary review |
|
|
230
|
+
| [dsh-background-agents](https://github.com/PerryLink/dsh-background-agents) | Durable background child agents with a Web UI sidebar, messaging and interrupt |
|
|
231
|
+
| [dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions) | LSP diagnostics, formatting, completion, code actions and rename over language servers |
|
|
232
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching |
|
|
233
|
+
| [dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind) | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore |
|
|
234
|
+
| [dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules) | Claude Code-style declarative allow/deny/ask permission rules with audit |
|
|
235
|
+
| [dsh-auto-review](https://github.com/PerryLink/dsh-auto-review) | Second-model auto-review on the approval chain, fail-closed by default |
|
|
236
|
+
| [dsh-memento](https://github.com/PerryLink/dsh-memento) | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
|
|
237
|
+
| [dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security) | Security-audit skill pack: secret scan, dependency and supply-chain review |
|
|
238
|
+
| [dsh-session-pin](https://github.com/PerryLink/dsh-session-pin) | Pin sessions in the Web sidebar with durable ordering |
|
|
239
|
+
| [dsh-composer-history](https://github.com/PerryLink/dsh-composer-history) | Terminal-style input history for the web composer: arrows, Ctrl+R search |
|
|
240
|
+
| [dsh-github](https://github.com/PerryLink/dsh-github) | GitHub PR/issues integration for DSH, every write gated by approval |
|
|
241
|
+
| [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) | Plugin-development knowledge base as an on-demand agent skill |
|
|
242
|
+
| [dsh-claude-move](https://github.com/PerryLink/dsh-claude-move) | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
|
|
243
|
+
|
|
244
|
+
## License
|
|
245
|
+
|
|
246
|
+
[Apache License 2.0](LICENSE) © 2026 dsh-output-styles contributors
|