dsh-output-styles 0.4.0 โ†’ 0.4.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/README.ko.md DELETED
@@ -1,217 +0,0 @@
1
- <div align="center">
2
-
3
- # ๐ŸŽจ dsh-output-styles
4
-
5
- **DeepSeek Harness๋ฅผ ์œ„ํ•œ Claude Code `outputStyles`** โ€”โ€” ๋Ÿฐํƒ€์ž„์—, ์„ธ์…˜๋ณ„๋กœ, ์˜๊ตฌ์ ์œผ๋กœ ๋ชจ๋ธ์˜ ์ถœ๋ ฅ ์Šคํƒ€์ผ์„ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
6
-
7
- [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
8
- [![CI](https://github.com/PerryLink/dsh-output-styles/actions/workflows/ci.yml/badge.svg)](https://github.com/PerryLink/dsh-output-styles/actions/workflows/ci.yml)
9
- [![npm version](https://img.shields.io/npm/v/dsh-output-styles)](https://www.npmjs.com/package/dsh-output-styles)
10
- [![npm downloads](https://img.shields.io/npm/dm/dsh-output-styles)](https://www.npmjs.com/package/dsh-output-styles)
11
- [![Node](https://img.shields.io/badge/node-%5E22.19%20%7C%7C%20%3E%3D24-brightgreen.svg)](#)
12
- [![DSH](https://img.shields.io/badge/deepseek--harness-0.1.0--rc.6-4d6bfe.svg)](#)
13
- [![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178c6.svg)](#)
14
-
15
- ๐ŸŒ [English](README.md) ยท [ไธญๆ–‡](README.zh.md) ยท [ๆ—ฅๆœฌ่ชž](README.ja.md) ยท [ํ•œ๊ตญ์–ด](README.ko.md) ยท [Espaรฑol](README.es.md)
16
-
17
- </div>
18
-
19
- ---
20
-
21
- `/style concise` โ€”โ€” ์ด์ œ๋ถ€ํ„ฐ ๋ชจ๋“  ๋‹ต๋ณ€์ด ๊ฐ„๊ฒฐํ•ด์ง‘๋‹ˆ๋‹ค. `/style step-by-step` โ€”โ€” ๋ชจ๋ธ์ด ๋ฒˆํ˜ธ ๋งค๊ธด ๋‹จ๊ณ„๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. `/style off` โ€”โ€” ํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ณต๊ท€ํ•ฉ๋‹ˆ๋‹ค. ์„ธ์…˜๋‹น ๋ช…๋ น ํ•˜๋‚˜, ์žฌ์‹œ์ž‘์—๋„ ์œ ์ง€๋˜๋ฉฐ agent loop ๋ณ€๊ฒฝ์€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.
22
-
23
- ## โœจ ๊ธฐ๋Šฅ
24
-
25
- | | |
26
- |---|---|
27
- | ๐Ÿ—‚๏ธ **์Šคํƒ€์ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ** | ์Šคํƒ€์ผ๋‹น Markdown ํŒŒ์ผ ํ•˜๋‚˜(`styles/*.md`). frontmatter์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ, ๋ณธ๋ฌธ์€ ๋ชจ๋ธ ์ง€์‹œ๋ฌธ์ž…๋‹ˆ๋‹ค. `name`์€ ๊ธฐ๋ณธ๊ฐ’์ด ํŒŒ์ผ๋ช…์ด๋ฉฐ ๊ณต๋ฐฑ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(`Diagrams first`). ๋‚ด์žฅ ์Šคํƒ€์ผ 6์ข…์ด ํ•จ๊ป˜ ์ œ๊ณต๋˜๋ฉฐ, Claude Code์™€ ๋™๋“ฑํ•œ `proactive`์™€ `learning`์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. |
28
- | โŒจ๏ธ **`/style` ๋ช…๋ น** | ์ธ์ž ์—†์ด ์‹คํ–‰ํ•˜๋ฉด ์Šคํƒ€์ผ ๋ชฉ๋ก(์„ค๋ช… ํฌํ•จ) + ํ˜„์žฌ ์„ ํƒ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. `/style <name>`์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ  `/style off`๋กœ ํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ๊ฐ’์„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. `/style` ๋’ค์˜ ๋‚˜๋จธ์ง€ ์ „์ฒด๊ฐ€ ์Šคํƒ€์ผ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. |
29
- | ๐Ÿ’พ **์„ธ์…˜ ๋ฒ”์œ„ ์˜์†ํ™”** | ์„ ํƒ์€ `output_style` ์ €์žฅ์†Œ ๋„๋ฉ”์ธ์— sessionId๋ฅผ ํ‚ค๋กœ ์ €์žฅ๋˜์–ด, ๋‘ ์„ธ์…˜์ด ์„œ๋กœ ๊ฐ„์„ญํ•˜์ง€ ์•Š๊ณ  ์„ ํƒ์€ ์žฌ์‹œ์ž‘ ํ›„์—๋„ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. |
30
- | ๐Ÿงฉ **์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์ฃผ์ž…** | `systemPrompt.section()` ๊ธฐ์—ฌ(order 90)๊ฐ€ ๋งค ์กฐ๋ฆฝ๋งˆ๋‹ค ํ˜„์žฌ ์„ธ์…˜์˜ ์Šคํƒ€์ผ ๋ณธ๋ฌธ์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์€ ์„ค์ • ๊ฐ€๋Šฅํ•œ ์˜ˆ์‚ฐ์œผ๋กœ ์ž˜๋ฆฝ๋‹ˆ๋‹ค. |
31
- | ๐ŸŽญ **Claude Code `keep-coding-instructions`** | `keep-coding-instructions: false`(Claude Code์™€ ๊ฐ™์€ ๊ธฐ๋ณธ๊ฐ’)์ธ ์Šคํƒ€์ผ์€ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์ „์ฒด๋ฅผ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค โ€”โ€” ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ์Šคํƒ€์ผ์šฉ์ž…๋‹ˆ๋‹ค. |
32
- | ๐Ÿ“Œ **๊ฐ•์ œ ์Šคํƒ€์ผ** | Claude Code์˜ `force-for-plugin`(๋ณ„์นญ `force`)์ด ์„ธ์…˜ ์„ ํƒ์„ ๋ฌด์‹œํ•˜๊ณ  ๋ฌด์กฐ๊ฑด ์Šคํƒ€์ผ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ•์ œ ์Šคํƒ€์ผ์ด ๋‘˜์ด๋ฉด ๋กœ๋“œ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. |
33
- | ๐Ÿ” **Claude Code ํ˜ธํ™˜์„ฑ** | `outputStyles` JSON ์ปฌ๋ ‰์…˜(`{ name, description, prompt }`)์„ ๋กœ๋“œํ•˜๋ฉฐ, ๋‹จ์ผ ํ•ญ๋ชฉ ๋˜๋Š” `settings.json` ์Šคํƒ€์ผ ๋ฐฐ์—ด์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํ•ด์„ ๋ถˆ๊ฐ€ ํ•ญ๋ชฉ์€ ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. |
34
- | ๐Ÿ“š **๊ณ„์ธตํ™”๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ** | `stylesDir`์€ ๋ชฉ๋ก์ด๋ฉฐ ๋’ค์ชฝ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์•ž์ชฝ์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค(๋‚ด์žฅ `styles/`๊ฐ€ ์ตœํ•˜์œ„ ๊ณ„์ธต, `includeBuiltins: false`๋กœ ๋น„ํ™œ์„ฑํ™”). |
35
- | ๐Ÿ”„ **ํ•ซ ๋ฆฌ๋กœ๋“œ** | ์Šคํƒ€์ผ ํŒŒ์ผ ๋ณ€๊ฒฝ์ด ์žฌ์‹œ์ž‘ ์—†์ด ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค(`watchStyles: false`๋กœ ํ•ด์ œ). |
36
- | โš™๏ธ **์„ค์ •๊ณผ ํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ๊ฐ’** | ํ•œ ๋ฒˆ๋„ ์„ ํƒํ•˜์ง€ ์•Š์€ ์„ธ์…˜์€ DSH ์„ค์ •์˜ `output-style.style`, ๊ทธ๋‹ค์Œ `defaultStyle`๋กœ ํด๋ฐฑํ•ฉ๋‹ˆ๋‹ค. |
37
- | ๐Ÿ–ฑ๏ธ **์›น ํ”ผ์ปค** | `dsh.client` ํ•ญ๋ชฉ(`dsh-output-styles/client`)์ด ํ˜ธ์ŠคํŠธ์˜ `/style` ๋ช…๋ น์„ ํ”„๋กœ์ ์…˜ ๊ธฐ๋ฐ˜ ํŒ์—… ํ”ผ์ปค๋กœ ๊พธ๋ฐ‰๋‹ˆ๋‹ค. |
38
- | ๐Ÿ“Š **์„ธ์…˜ ํ”„๋กœ์ ์…˜** | Web UI์šฉ `style` ํ”„๋กœ์ ์…˜(`{ options, currentValue }`)์œผ๋กœ, ์„ธ์…˜ ๋กœ๊ทธ์—์„œ ํ™•์ •๋œ ๋ช…๋ น์œผ๋กœ๋ถ€ํ„ฐ ํด๋”ฉ๋ฉ๋‹ˆ๋‹ค. |
39
- | ๐Ÿงฏ **๋ช…ํ™•ํ•œ ์‹คํŒจ, ๊น”๋”ํ•œ ๊ฑด๋„ˆ๋œ€** | ์ž˜๋ชป๋œ ์„ค์ •์€ ๋กœ๋“œ ์‹œ ์˜ˆ์™ธ๋ฅผ ๋˜์ง‘๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์Šคํƒ€์ผ ํŒŒ์ผ์€ ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ๊ฑด๋„ˆ๋›ฐ๋ฉฐ ํ”„๋กœํ•„์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. |
40
- | ๐ŸŒ **5๊ฐœ ์–ธ์–ด ๋ฌธ์„œ** | EN ยท ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด ยท Espaรฑol. |
41
-
42
- ## ๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘
43
-
44
- ```sh
45
- # 1. ์„ค์น˜ โ€” ์ด ํŒจํ‚ค์ง€๋Š” ๋ฒˆ๋“ค ๋ ˆ์ด์–ด์ด๋ฏ€๋กœ ํ•œ ๋ช…๋ น์œผ๋กœ
46
- # storage + storage-json + storage-domain + ํ”Œ๋Ÿฌ๊ทธ์ธ ํ–‰์ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:
47
- dsh plugin --profile <name> add dsh-output-styles
48
-
49
- # 2. ๋ถ€ํŒ…ํ•˜๊ณ  ์ „ํ™˜
50
- dsh --profile <name>
51
- /style # โ†’ output style off, ๊ทธ๋‹ค์Œ ์Šคํƒ€์ผ๋ณ„ ํ•œ ์ค„
52
- /style concise # โ†’ switched to concise
53
- /style Diagrams first # โ†’ ๊ณต๋ฐฑ ํฌํ•จ ์ด๋ฆ„๋„ ๋™์ž‘
54
- /style off # โ†’ ํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ณต๊ท€
55
- ```
56
-
57
- ์ด ๋ ˆ์ด์–ด๋Š” ์›น ํ”„๋กœํ•„์— ๋Œ€ํ•ด ๋ฉฑ๋“ฑ์ ์ž…๋‹ˆ๋‹ค(id ๊ธฐ์ค€ ์‚ฝ์ž…์ด ๋™์ผ id ํ–‰์„ ๋Œ€์ฒด). ์›น ํ”„๋กœํ•„์€ `storage`๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์›น ํ”ผ์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ”„๋กœํ•„์— ํด๋ผ์ด์–ธํŠธ ํ–‰์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”:
58
-
59
- ```yaml
60
- - id: output-styles-client
61
- name: 'dsh-output-styles/client'
62
- ```
63
-
64
- ## ๐ŸŽฌ ๋ฐ๋ชจ
65
-
66
- ```
67
- You > /style
68
- output style off
69
- concise โ€” Terse, direct answers โ€” minimal prose, no preamble. (Daily coding work, tool-heavy sessions, or when prompt length matters.)
70
- explanatory โ€” Educational answers with short "Insights" that teach as you work. (Learning a codebase, onboarding, โ€ฆ)
71
- formal โ€” Formal, precise prose with complete sentences and defined terms. (Reports, documentation, release notes, โ€ฆ)
72
- learning โ€” Collaborative learn-by-doing mode with short "Insights" and small hands-on steps for the user. (Pairing, onboarding, โ€ฆ)
73
- proactive โ€” Execute immediately, assume reasonable defaults, and prefer action over planning. (Routine multi-step work, โ€ฆ)
74
- step-by-step โ€” Numbered reasoning steps with explicit intermediate results. (Debugging, design decisions, โ€ฆ)
75
-
76
- You > /style concise
77
- switched to concise
78
-
79
- You > ํ•œ ๋ฌธ์žฅ์œผ๋กœ๋งŒ ์ž๊ธฐ์†Œ๊ฐœํ•ด ์ฃผ์„ธ์š”.
80
- AI > ์ €๋Š” DeepSeek Harness ํ”Œ๋Ÿฌ๊ทธ์ธ ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰๋˜๊ณ  deepseek-v4-pro ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์ž…๋‹ˆ๋‹ค.
81
- ```
82
-
83
- ## ๐Ÿง  ๋™์ž‘ ๋ฐฉ์‹
84
-
85
- ```mermaid
86
- flowchart LR
87
- U[/style concise ์ž…๋ ฅ] --> C[๋ช…๋ น ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ]
88
- C -->|command/run ๊ธฐ๋ก| L[(์„ธ์…˜ ๋กœ๊ทธ)]
89
- C -->|put {style, source}| D[(output_style ๋„๋ฉ”์ธ)]
90
- D --> R[OutputStyleRuntime]
91
- R -->|๋งค ์กฐ๋ฆฝ๋งˆ๋‹ค ๋ณธ๋ฌธ ์ฃผ์ž…| S[systemPrompt ์„น์…˜ order 90]
92
- S --> M[๋ชจ๋ธ ์š”์ฒญ]
93
- M -->|์ „์ฒด ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ| H[request/header ๊ธฐ๋ก]
94
- ```
95
-
96
- ๋ชจ๋ธ์ด ๋ณด๋Š” ๋ชจ๋“  ๊ฒƒ์€ ์„ธ์…˜ ๋กœ๊ทธ์—์„œ ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ€”โ€” ์ƒˆ๋กœ์šด ์„ธ์…˜ ์ด๋ฒคํŠธ ํƒ€์ž…๋„, agent-loop ๋ณ€๊ฒฝ๋„ ์—†์Šต๋‹ˆ๋‹ค. ์Šคํƒ€์ผ ์ด๋ฆ„์€ `command/run`์—์„œ, ์ฃผ์ž…๋œ ์ •ํ™•ํ•œ ํ…์ŠคํŠธ๋Š” `request/header`์—์„œ ๋‚˜์˜ค๋ฉฐ, ์ถœ์ฒ˜ ๋งˆ์ปค `{ kind: 'plugin', plugin: 'dsh-output-styles' }`๋Š” ๋„๋ฉ”์ธ ๋ ˆ์ฝ”๋“œ์— ๋‚จ์Šต๋‹ˆ๋‹ค. ์Šคํƒ€์ผ์€ ๋ฉ”์ธ ๋Œ€ํ™”์—๋งŒ ์ ์šฉ๋˜๋ฉฐ, ํ•˜์œ„ ์—์ด์ „ํŠธ ์„ธ์…˜์€ ์ž์ฒด ํ”„๋กฌํ”„ํŠธ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค(Claude Code์™€ ์ผ์น˜).
97
-
98
- ## โš™๏ธ ์„ค์ •
99
-
100
- ๋ชจ๋“  ์กฐ์ • ๊ฐ’์€ ๊ฒ€์ฆ๋œ Schemastery `Config` ํ•„๋“œ์ž…๋‹ˆ๋‹ค(์ž˜๋ชป๋œ ๊ฐ’์€ ๋กœ๋“œ ์‹คํŒจ):
101
-
102
- | ํ•„๋“œ | ๊ธฐ๋ณธ๊ฐ’ | ์˜๋ฏธ |
103
- |---|---|---|
104
- | `stylesDir` | `[]` | ์Šคํƒ€์ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””๋ ‰ํ„ฐ๋ฆฌ. cwd ๊ธฐ์ค€์œผ๋กœ ํ•ด์„๋˜๋ฉฐ ๋’ค์ชฝ ํ•ญ๋ชฉ์ด ์•ž์ชฝ์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. `[]` = ๋‚ด์žฅ `styles/`๋งŒ. ๋‹จ์ˆœ ๋ฌธ์ž์—ด์€ ๋‹จ์ผ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. |
105
- | `maxStyleChars` | `4000` | ์Šคํƒ€์ผ ๋ณธ๋ฌธ ์˜ˆ์‚ฐ(์ฝ”๋“œ ํฌ์ธํŠธ, โ‰ฅ 1). ๋” ๊ธด ๋ณธ๋ฌธ์€ ๋งˆ์ปค์™€ ํ•จ๊ป˜ ์ž˜๋ฆฝ๋‹ˆ๋‹ค. |
106
- | `defaultStyle` | `''` | ํ•œ ๋ฒˆ๋„ ์„ ํƒํ•˜์ง€ ์•Š์€ ์„ธ์…˜(์„ค์ • ๊ธฐ๋ณธ๊ฐ’๋„ ์—†์Œ)์— ์ ์šฉํ•  ์Šคํƒ€์ผ. `''` = ์Šคํƒ€์ผ ์—†์Œ. |
107
- | `compatJson` | `true` | Claude Code `outputStyles` JSON ํ•ญ๋ชฉ(๋‹จ์ผ ๊ฐ์ฒด ๋˜๋Š” ๋ฐฐ์—ด)์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. |
108
- | `sectionOrder` | `90` | ์ฃผ์ž… ์„น์…˜์˜ ์ˆœ์„œ(0 = persona, 100โ€“199 = ๋„๊ตฌ ์ง€์นจ). |
109
- | `truncationMarker` | `"\n\n[style truncated]"` | ์ž˜๋ฆฐ ์ง€์ ์— ์ถ”๊ฐ€๋˜๋Š” ๋งˆ์ปค. |
110
- | `includeBuiltins` | `true` | ํŒจํ‚ค์ง€ ๋‚ด์žฅ `styles/`๋ฅผ ์ตœ์ € ์šฐ์„ ์ˆœ์œ„ ๊ณ„์ธต์œผ๋กœ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. |
111
- | `watchStyles` | `true` | ๋””์Šคํฌ์—์„œ ์Šคํƒ€์ผ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. |
112
- | `rules` | `[]` | ์„ธ์…˜/๋„๊ตฌ๋ณ„ ๋ Œ๋” ๊ทœ์น™๏ผš`[{ match: { tool?, contentType?, session? }, style, priority? }]`โ€”โ€”`style` ์€ ๋ Œ๋”๋Ÿฌ id๏ผˆ๋‚ด์žฅ์€ ์Šคํƒ€์ผ๊ณผ ๋™๋ช…๏ผ‰ใ€‚ |
113
- | `enableExport` | `true` | `/export` ๋ช…๋ น ๋“ฑ๋ก๏ผˆMarkdown/HTML ์„ธ์…˜ ๋‚ด๋ณด๋‚ด๊ธฐใ€๋ Œ๋”๋Ÿฌ ์ธ์‹๏ผ‰ใ€‚ |
114
-
115
- ## ๐ŸŽจ ๋ Œ๋”๋Ÿฌ ํ”„๋กœํ† ์ฝœ
116
-
117
- `output.render.*` ํ”„๋กœํ† ์ฝœ์€ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต์„ ํ™•์žฅ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹คใ€‚๋ Œ๋”๋Ÿฌ๋Š” **์ˆœ์ˆ˜ presenter**โ€”โ€”`presenter(text, context)` ๊ฐ€ ์ธ์ž๋ฅผ ํ‘œ์‹œ ๋ฐ์ดํ„ฐ๋กœ ๋งคํ•‘ํ•˜๊ณ  DOM ์—๋Š” ์†๋Œ€์ง€ ์•Š์Šต๋‹ˆ๋‹คโ€”โ€”๋„๊ตฌ ์ด๋ฆ„๊ณผ ์ฝ˜ํ…์ธ  ํƒ€์ž…์œผ๋กœ ๋งค์นญ๋˜๊ณ  ์šฐ์„ ์ˆœ์œ„๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹คใ€‚์„œ๋“œํŒŒํ‹ฐ๋Š” `ctx.outputRenderers.register({ id, match, priority, presenter })` ๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค๏ผˆregister ๋Š” disposer ๋ฅผ ๋ฐ˜ํ™˜ใ€ํ˜ธ์ถœ์ž์˜ ctx.effect ์†Œ์œ ๏ผ‰ใ€‚๋ชจ๋“  ๋ Œ๋”๋Š” ๋จผ์ € `output.render/before` waterfall๏ผˆ๋ฆฌ์Šค๋„ˆ๋Š” ๋ฐ˜๋“œ์‹œ `next()`๏ผ‰์„ ๊ฑฐ์นœ ๋’ค ๊ทœ์น™ํ‘œ๏ผˆ์„ธ์…˜/๋„๊ตฌ๋ณ„๏ผš`rules: [{ match: { tool: 'bash' }, style: 'concise' }]`ใ€์„ค์ • ํŽ˜์ด์ง€ `output-style-rules` ์—์„œ ํŽธ์ง‘๏ผ‰๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹คใ€‚๋‚ด์žฅ ๋ Œ๋”๋Ÿฌ๋Š” `concise`๏ผˆ๊ณต๋ฐฑ ์••์ถ• + ์˜ˆ์‚ฐ ์ ˆ๋‹จ๏ผ‰์™€ `step-by-step`๏ผˆ๋‹จ๊ณ„ ์ผ๋ จ๋ฒˆํ˜ธ๏ผ‰์ž…๋‹ˆ๋‹คใ€‚๊ฐ์‚ฌ ๊ฐ€๋Šฅ๏ผš๋ชจ๋“  ๊ฒฐ๊ณผ๋Š” `{ original, rendered, rendererId, changed }` ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์›๋ฌธ์€ ์„ธ์…˜ ๋กœ๊ทธ ๊ทธ ์ž์ฒด๋กœ ๊ฒฐ์ •์ ์œผ๋กœ ์žฌ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹คใ€‚`/export [markdown|html] [--renderer=<id>]` ๋Š” ๊ฐ™์€ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ํ˜„์žฌ ์„ธ์…˜์„ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹คใ€‚์ „์ฒด ๊ทœ๊ฒฉ๏ผšdocs/renderer-protocol.md๏ผˆ์˜์–ด๏ผ‰/ docs/renderer-protocol.zh.mdใ€‚
118
- ## ๐Ÿ“š ์Šคํƒ€์ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
119
-
120
- <details>
121
- <summary><code>styles/concise.md</code></summary>
122
-
123
- ```markdown
124
- ---
125
- name: concise
126
- description: Terse, direct answers โ€” minimal prose, no preamble.
127
- whenToUse: Daily coding work, tool-heavy sessions, or when prompt length matters.
128
- keep-coding-instructions: true
129
- ---
130
-
131
- You are in the concise output style for this conversation.
132
- - Lead with the direct answer; skip preamble, restatements, and filler.
133
- - ๅ›ž็ญ”่ฏญ่จ€่ทŸ้š็”จๆˆท่ฏญ่จ€๏ผšไธญๆ–‡ๆ้—ฎ็”จไธญๆ–‡ๅ›ž็ญ”๏ผŒ่‹ฑๆ–‡ๆ้—ฎ็”จ่‹ฑๆ–‡ๅ›ž็ญ”ใ€‚
134
- ```
135
-
136
- </details>
137
-
138
- frontmatter ํ•„๋“œ:
139
-
140
- | ํ•„๋“œ | ๊ธฐ๋ณธ๊ฐ’ | ์˜๋ฏธ |
141
- |---|---|---|
142
- | `name` | ํŒŒ์ผ๋ช… | ์ „ํ™˜ ๋Œ€์ƒ. ๋ฌธ์ž, ์ˆซ์ž, ๊ณต๋ฐฑ, ํ•˜์ดํ”ˆ(์„ ํ–‰/ํ›„ํ–‰ ๊ณต๋ฐฑ ์—†์Œ. `off`๋Š” ์˜ˆ์•ฝ๋จ). |
143
- | `description` | โ€”(ํ•„์ˆ˜) | ๋ชฉ๋ก๊ณผ ํ”ผ์ปค์— ํ‘œ์‹œ๋˜๋Š” ํ•œ ๋ฌธ์žฅ. |
144
- | `whenToUse` | โ€” | ๋ชฉ๋ก์— ๋ง๋ถ™์ด๋Š” ์„ ํƒ์  ์•ˆ๋‚ด. |
145
- | `keep-coding-instructions` | `false` | `true`๋ฉด ํ•˜๋„ค์Šค ํ”„๋กฌํ”„ํŠธ(์ •์ฒด์„ฑ, persona, ๋„๊ตฌ ์ง€์นจ)๋ฅผ ์œ ์ง€ํ•˜๊ณ , `false`๋ฉด ์™„์ „ํžˆ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค(Claude Code ์˜๋ฏธ๋ก ). |
146
- | `force-for-plugin` | `false` | Claude Code ๊ณต์‹ ํ•„๋“œ: ์„ธ์…˜ ์„ ํƒ์„ ๋ฌด์‹œํ•˜๊ณ  ๋ฌด์กฐ๊ฑด ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. `force`๋Š” ๋ณ„์นญ์ด๋ฉฐ ์ตœ๋Œ€ ํ•œ ์Šคํƒ€์ผ๋งŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |
147
-
148
- <details>
149
- <summary>Claude Code <code>outputStyles</code> JSON(<code>compatJson: true</code>)</summary>
150
-
151
- ```json
152
- { "name": "explain", "description": "Explain like a teacher.", "prompt": "Teach in small steps." }
153
- ```
154
-
155
- ํ•ญ๋ชฉ์€ Claude Code๊ฐ€ ์“ฐ๋Š” ๊ทธ๋Œ€๋กœ `keep-coding-instructions`์™€ `force-for-plugin` ํ•„๋“œ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋ ˆ๊ฑฐ์‹œ `settings.json` ๋ฐฐ์—ด(`[{ โ€ฆ }, { โ€ฆ }]`)์€ ๊ทธ๋Œ€๋กœ ๋กœ๋“œ๋˜๊ณ , ์ž˜๋ชป๋œ ํ•ญ๋ชฉ์€ ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.
156
-
157
- </details>
158
-
159
- ## โŒจ๏ธ ๋ช…๋ น ๋ ˆํผ๋Ÿฐ์Šค
160
-
161
- | ์ž…๋ ฅ | ๊ฒฐ๊ณผ |
162
- |---|---|
163
- | `/style` | ํ˜„์žฌ ์„ ํƒ + ์Šคํƒ€์ผ๋ณ„ ํ•œ ์ค„(name โ€” description) ๋‚˜์—ด |
164
- | `/style concise` | ์ „ํ™˜(์˜๊ตฌ ๊ธฐ๋ก), `switched to concise` |
165
- | `/style Diagrams first` | ์—ฌ๋Ÿฌ ๋‹จ์–ด ์ด๋ฆ„์€ ๋‚˜๋จธ์ง€ ์ „์ฒด |
166
- | `/style off` | ํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ๊ฐ’ ๋ณต์›(์„ค์ • ๊ธฐ๋ณธ๊ฐ’, ๊ทธ๋‹ค์Œ `defaultStyle`) |
167
- | `/style nope` | `error: unknown output style "nope" (available: โ€ฆ)` |
168
-
169
- ## ๐Ÿ–ฑ๏ธ ์›น ํ”ผ์ปค
170
-
171
- `dsh.client` ํ•ญ๋ชฉ์€ ํ˜ธ์ŠคํŠธ `/style` ๋ช…๋ น์˜ ์ธ์ž ์—†๋Š” ํ˜ธ์ถœ์„ ํŒ์—… ํ”ผ์ปค๋กœ ๊พธ๋ฐ‰๋‹ˆ๋‹ค: ใ€Œoffใ€ ํ–‰ + ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์Šคํƒ€์ผ๋ณ„ ํ•œ ํ–‰(`description ยท whenToUse`), ํ™œ์„ฑ ํ–‰์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์„ ํƒํ•˜๋ฉด ๋ช…๋ น Remote๋ฅผ ํ†ตํ•ด `/style <name>`์„ ์ œ์ถœํ•˜๋ฏ€๋กœ, ๋ชจ๋“  ์ „ํ™˜์ด ํ˜ธ์ŠคํŠธ์˜ ์˜๊ตฌ์ ์ธ ๋ช…๋ น ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ์œ ์ง€ํ•˜๊ณ  `style` ํ”„๋กœ์ ์…˜์ด ์œ ์ผํ•˜๊ฒŒ ํ‘œ์‹œ๋˜๋Š” ์‚ฌ์‹ค๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค. ํ”ผ์ปค ๋ฌธ๊ตฌ๋Š” Web UI์— ๋‚ด์žฅ๋œ `zh`/`en` ์–ธ์–ด ์Œ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
172
-
173
- ## ๐Ÿ” ์ถฉ๋Œ ๊ฒ€์‚ฌ
174
-
175
- ๊ฐœ๋ฐœ ์ „ DSH ์ƒํƒœ๊ณ„๋ฅผ ์กฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค(2026-08 ์Šค๋ƒ…์ƒท): [topic:dsh-plugin](https://github.com/topics/dsh-plugin) ์•„๋ž˜ `style`/`output-style` ์ €์žฅ์†Œ ์—†์Œ, 4๋Œ€ [awesome ๋ชฉ๋ก](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin)์— output-style ์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ, [dsh-hub ์นดํƒˆ๋กœ๊ทธ](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+๋กœ ์—ฐ๊ธฐ)์€ ์ธ์ ‘ํ•˜์ง€๋งŒ ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
176
-
177
- ## ๐Ÿ†š Claude Code์™€์˜ ์ฐจ์ด
178
-
179
- | | Claude Code | dsh-output-styles |
180
- |---|---|---|
181
- | ์Šคํƒ€์ผ ํŒŒ์ผ | ์‚ฌ์šฉ์ž/ํ”„๋กœ์ ํŠธ/๊ด€๋ฆฌ ๊ณ„์ธต์˜ `.claude/output-styles` | `stylesDir` ๋””๋ ‰ํ„ฐ๋ฆฌ + ๋‚ด์žฅ `styles/`, ๋’ค์ชฝ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์šฐ์„  |
182
- | ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํƒ€์ผ | Markdown, frontmatter `name`/`description`/`keep-coding-instructions`/`force-for-plugin` | ๋™์ผ ํ•„๋“œ(`force-for-plugin` ๊ทธ๋Œ€๋กœ ์ˆ˜์šฉ, `force`๋Š” ๋ณ„์นญ) + `whenToUse` |
183
- | ๋ ˆ๊ฑฐ์‹œ JSON | `settings.json`์˜ `outputStyles` ๋ฐฐ์—ด | ๊ทธ๋Œ€๋กœ ๋กœ๋“œ(`compatJson: true`) |
184
- | ์ ์šฉ ์‹œ์  | `/clear` ํ›„ ๋˜๋Š” ์ƒˆ ์„ธ์…˜ | ์ฆ‰์‹œ โ€” ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์š”์ฒญ๋งˆ๋‹ค ์žฌ์กฐ๋ฆฝ |
185
- | ํ•˜์œ„ ์—์ด์ „ํŠธ | ์Šคํƒ€์ผ ๋ฏธ์ ์šฉ | ๋™์ผ โ€” ํ•˜์œ„ ์—์ด์ „ํŠธ ์„ธ์…˜์€ ์ž์ฒด ํ”„๋กฌํ”„ํŠธ ์œ ์ง€ |
186
- | ์ „ํ™˜ | `/config` ๋ฉ”๋‰ด ๋˜๋Š” `outputStyle` ์„ค์ •(`/output-style` ๋ช…๋ น์€ v2.1.91์—์„œ ์ œ๊ฑฐ) | `/style` ๋ช…๋ น + ์›น ํ”ผ์ปค + ์„ค์ • `output-style.style` |
187
-
188
- ## ๐Ÿงช ๊ฐœ๋ฐœ
189
-
190
- ```sh
191
- pnpm install
192
- pnpm run typecheck # ๋‘ tsc ํ”„๋กœ์ ํŠธ
193
- pnpm test # vitest โ€” 93 ํ…Œ์ŠคํŠธ
194
- pnpm run verify # typecheck + ํ…Œ์ŠคํŠธ + ์ž์ฒด ํฌํ•จ ๊ฒ€์‚ฌ(prepublishOnly ๊ฒŒ์ดํŠธ)
195
- pnpm run build # lib/ ์‚ฐ์ถœ๋ฌผ(ํ˜ธ์ŠคํŠธ + ํด๋ผ์ด์–ธํŠธ ๋ฒˆ๋“ค)
196
- pnpm pack # dsh plugin add์šฉ tarball
197
- ```
198
-
199
- ๋ฆด๋ฆฌ์Šค: `package.json` ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•˜๋Š” ์ ‘๋ฏธ์‚ฌ๋ฅผ ๊ฐ€์ง„ `v*` ํƒœ๊ทธ๋ฅผ pushํ•˜๋ฉด Publish ์›Œํฌํ”Œ๋กœ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค โ€” ์ „์ฒด ๊ฒ€์ฆ ํ›„ npm ๊ฒŒ์‹œ(provenance ํฌํ•จ). ๋ชจ๋“  `npm publish`๋„ `prepublishOnly`๋ฅผ ํ†ตํ•ด `verify` ๊ฒŒ์ดํŠธ๋ฅผ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.
200
-
201
- ๊ตฌ์กฐ๋Š” [omdsh-dev/plugin-template](https://github.com/omdsh-dev/plugin-template)๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค: `src/index.ts`(ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ), `src/config.ts`(์Šคํ‚ค๋งˆ), `src/runtime.ts`(๋Ÿฐํƒ€์ž„ ์„œ๋น„์Šค + ํ™œ์„ฑํ™”), `src/invariant.ts`(๋ถˆ๋ณ€์‹), `src/client/`(์›น ํ”ผ์ปค), `styles/`(๋‚ด์žฅ ์Šคํƒ€์ผ).
202
-
203
- ## ๐Ÿ‘ฅ ๊ธฐ์—ฌ์ž
204
-
205
- ์ด ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•ด ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค:
206
-
207
- - [@PerryLink](https://github.com/PerryLink) โ€” ์ž‘์„ฑ์ž์ด์ž ๋ฉ”์ธํ…Œ์ด๋„ˆ: ํ”Œ๋Ÿฌ๊ทธ์ธ ์•„ํ‚คํ…์ฒ˜, ์Šคํƒ€์ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋ฒˆ๋“ค ์„ค์น˜, ์›น ํ”ผ์ปค, 5๊ฐœ ์–ธ์–ด ๋ฌธ์„œ, CI/๋ฆด๋ฆฌ์Šค ๋„๊ตฌ.
208
-
209
- ๋ฒ„๊ทธ๋‚˜ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์œผ์‹ ๊ฐ€์š”? [issue](https://github.com/PerryLink/dsh-output-styles/issues) ๋˜๋Š” [pull request](https://github.com/PerryLink/dsh-output-styles/pulls)๋ฅผ ๋ณด๋‚ด ์ฃผ์„ธ์š”. ์–ด๋–ค ์–ธ์–ด์˜ ๊ธฐ์—ฌ๋“  ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.
210
-
211
- ## ๐Ÿ“„ ๋ผ์ด์„ ์Šค
212
-
213
- [Apache-2.0](LICENSE) ยฉ 2026 dsh-output-styles contributors
214
-
215
- ---
216
-
217
- <sub>Topics: `dsh` ยท `dsh-plugin` ยท `deepseek-harness` ยท `output-styles` ยท `claude-code`</sub>