dsh-codebase-chat 0.21.0 → 0.23.0

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.md CHANGED
@@ -1,27 +1,20 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/shinzarou-eng/dsh-codebase-chat/main/docs/assets/logo.png" width="110" height="110" alt="dsh-codebase-chat logo">
3
- </p>
4
-
5
- <h1 align="center">dsh-codebase-chat</h1>
6
-
7
- <p align="center">
8
- <strong>Local-first codebase intelligence — chat, audit, refactor, and report on any repository.</strong><br>
9
- DeepSeek Harness plugin &nbsp;·&nbsp; standalone MCP server &nbsp;·&nbsp; CLI
2
+ <a href="https://shinzarou-eng.github.io/dsh-codebase-chat">
3
+ <img src="https://raw.githubusercontent.com/shinzarou-eng/dsh-codebase-chat/main/docs/assets/social-preview.png" alt="dsh-codebase-chat — Your codebase, fully understood" width="100%">
4
+ </a>
10
5
  </p>
11
6
 
12
7
  <p align="center">
13
- <a href="https://www.npmjs.com/package/dsh-codebase-chat"><img src="https://img.shields.io/npm/v/dsh-codebase-chat?logo=npm&label=plugin&color=7cc7ff" alt="npm plugin"></a>
14
- <a href="https://www.npmjs.com/package/dsh-codebase-chat-mcp"><img src="https://img.shields.io/npm/v/dsh-codebase-chat-mcp?logo=npm&label=mcp&color=b08cff" alt="npm mcp"></a>
15
- <a href="https://github.com/shinzarou-eng/dsh-codebase-chat/blob/main/LICENSE"><img src="https://img.shields.io/github/license/shinzarou-eng/dsh-codebase-chat?color=97a3b0" alt="license"></a>
16
- <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E%3D20-5fed83?logo=nodedotjs" alt="node >= 20"></a>
17
- <a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-compatible-39c5cf" alt="MCP compatible"></a>
18
- <a href="https://github.com/shinzarou-eng/dsh-codebase-chat/stargazers"><img src="https://img.shields.io/github/stars/shinzarou-eng/dsh-codebase-chat?style=social" alt="stars"></a>
8
+ <a href="https://www.npmjs.com/package/dsh-codebase-chat"><img src="https://img.shields.io/npm/v/dsh-codebase-chat?logo=npm&label=plugin&color=6ec2ff" alt="npm plugin"></a>
9
+ <a href="https://www.npmjs.com/package/dsh-codebase-chat-mcp"><img src="https://img.shields.io/npm/v/dsh-codebase-chat-mcp?logo=npm&label=mcp&color=a78bfa" alt="npm mcp"></a>
10
+ <a href="https://github.com/shinzarou-eng/dsh-codebase-chat/blob/main/LICENSE"><img src="https://img.shields.io/github/license/shinzarou-eng/dsh-codebase-chat?color=93a1b5" alt="license"></a>
11
+ <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E%3D20-4ade80?logo=nodedotjs" alt="node >= 20"></a>
12
+ <a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-compatible-22d3ee" alt="MCP compatible"></a>
19
13
  </p>
20
14
 
21
15
  <p align="center">
22
16
  <a href="https://shinzarou-eng.github.io/dsh-codebase-chat"><strong>Website</strong></a> ·
23
- <a href="#quick-start">Quick start</a> ·
24
- <a href="#tool-suite">Tools</a> ·
17
+ <a href="mcp/README.md">MCP docs</a> ·
25
18
  <a href="ROADMAP.md">Roadmap</a> ·
26
19
  <a href="CHANGELOG.md">Changelog</a> ·
27
20
  <a href="CONTRIBUTING.md">Contributing</a>
@@ -29,74 +22,134 @@
29
22
 
30
23
  <br>
31
24
 
25
+ ## Get started
26
+
27
+ ```bash
28
+ npx dsh-codebase-chat-mcp setup
29
+ ```
30
+
31
+ The wizard detects **Claude, Cursor, Windsurf and VS Code**, writes the MCP config, done.
32
+ No JSON to edit — and **no API key**: in `promptOnly` mode your host model does the thinking.
33
+
34
+ Other paths — DeepSeek Harness plugin · CLI · from source · manual config: **[Reference](#reference)**.
35
+
32
36
  <p align="center">
33
- <img src="docs/assets/demo.gif" alt="dsh-codebase-chat CLI demo" width="820"><br>
34
- <em>Real terminal output — <a href="docs/assets/demo-mcp.gif">MCP session</a> · <a href="docs/assets/demo-fr.gif">French mode</a></em>
37
+ <img src="docs/assets/demo.gif" alt="dsh-codebase-chat CLI demo" width="840"><br>
38
+ <em>Live terminal capture — <a href="docs/assets/demo-mcp.gif">MCP session</a> · <a href="docs/assets/demo-fr.gif">French mode</a></em>
35
39
  </p>
36
40
 
37
- ---
41
+ ## What a real session looks like
38
42
 
39
- ## In plain words
43
+ Run on this repository — the exact text the tools return:
40
44
 
41
- > **New here?** Point it at a folder of code on your computer. Ask questions in plain
42
- > language *"How does login work?"*, *"Is there a hardcoded password?"*, *"What should
43
- > I fix first?"* — in French or English. Every answer cites the exact file and line it
44
- > came from, so you can verify it in seconds. Nothing is uploaded anywhere.
45
+ ```console
46
+ $ npx dsh-codebase-chat --project . --health
45
47
 
46
- | Term | Meaning |
47
- | --- | --- |
48
- | **MCP server** | A plug format that lets AI assistants (Claude, Cursor…) use extra tools. Install once, your IDE can "see" your code. |
49
- | **Index** | Like the index at the back of a book — a map of every function and file, so answers are instant. |
50
- | **Prompt-only mode** | The tool prepares the context; your existing AI writes the answer. No extra API key, no extra cost. |
51
- | **Deterministic analysis** | Checks computed directly from your code — same input, same result, every time. No guessing. |
48
+ == STATIC ANALYSIS dsh-codebase-chat ==
49
+ Health score: 52/100 (D) · 33 files analyzed · 65 local imports
52
50
 
53
- <details>
54
- <summary><strong>🇫🇷 En termes simples</strong></summary>
51
+ ● Circular dependencies (0)
52
+ none
55
53
 
56
- <br>
54
+ ● Unused files (candidates) (1)
55
+ lib/client.js
57
56
 
58
- Pointez-le vers un dossier de code sur votre ordinateur. Posez des questions en langage
59
- clair*« Comment fonctionne la connexion ? », « Y a-t-il un mot de passe codé en dur ? »,
60
- « Que devrais-je réparer en premier ? »* en français ou en anglais. Chaque réponse cite
61
- exactement le fichier et la ligne d'où elle vient, donc vous pouvez vérifier en quelques
62
- secondes. Rien n'est envoyé sur internet.
57
+ Unused exports (candidates) (45)
58
+ lib/cache.js:21cachePath
59
+ lib/index.js:2952normalizeLabels
60
+ lib/index.js:2952 getProjectName
61
+
63
62
 
64
- </details>
63
+ ● Duplicate code blocks (2)
64
+ 12 lines × 2 files — lib/index.js, src/project.ts
65
+ 6 lines × 2 files — src/indexer.ts, src/retriever.ts
65
66
 
66
- ---
67
+ ● Complexity hotspots (13)
68
+ lib/index.js — score 418
69
+ src/analysis.ts — score 81
70
+ lib/client.js — score 55
71
+
72
+ ```
67
73
 
68
- ## Why dsh-codebase-chat?
74
+ ```console
75
+ $ npx dsh-codebase-chat --project . --search "health score computation"
69
76
 
70
- Most codebase assistants are slow, paywalled, or require uploading your source to the cloud.
71
- **dsh-codebase-chat** runs entirely on your machine: it indexes your repository, retrieves the
72
- chunks that matter, and assembles a **sourced prompt** — every answer comes back with
73
- `[source: file:line]` citations, confidence scores, and severity labels.
77
+ --- src/analysis.ts :: formatHealthReportMd (FUNCTION) [source: src/analysis.ts:285-353] ---
78
+ --- src/analysis.ts :: analyzeProject (FUNCTION) [source: src/analysis.ts:149-232] ---
79
+ --- src/analysis.ts :: HealthReport (TYPE) [source: src/analysis.ts:15-26] ---
74
80
 
75
- - **Local-first** indexing, retrieval, and prompt building never leave your machine.
76
- - **Bilingual** — every prompt, report, and UI string in French and English.
77
- - **Everywhere** — DeepSeek Harness plugin, standalone MCP server (Cursor, Claude, Windsurf…), and a plain CLI.
78
- - **Decision-grade output** — not just answers: CTO briefs, audits, TASKS.md plans, board reports.
81
+ $ npx dsh-codebase-chat --project . --ask "how is the index cached?"
79
82
 
80
- ---
83
+ > dsh-codebase-chat · prompt-only mode (no API key)
84
+ > Chunks: 81 · Tokens: 59,934 → handed to the host model
85
+ > Cite every technical claim with [source: relative/path:line].
86
+ ```
87
+
88
+ `codebase_health` runs fully offline — deterministic, no LLM, same input → same score.
89
+ Every answer from `codebase_chat` arrives with `[source: file:line]` receipts you can verify in seconds.
90
+
91
+ ## Why it wins
92
+
93
+ | | Paste into a chat | Hosted assistant | **dsh-codebase-chat** |
94
+ | --- | :-: | :-: | :-: |
95
+ | Sees your **whole** repo, not one file | ❌ | ✅ | ✅ |
96
+ | `[source: file:line]` citations | ❌ | ~ | ✅ |
97
+ | Code stays on your machine | ❌ | ❌ | ✅ |
98
+ | Inside Claude / Cursor / Windsurf | ❌ | ~ | ✅ |
99
+ | Deterministic health score, no LLM | ❌ | ❌ | ✅ |
100
+ | Free — no API key, no account | ~ | ❌ | ✅ |
101
+
102
+ ## How it works
103
+
104
+ <p align="center">
105
+ <img src="docs/assets/how-it-works.png" alt="Pipeline: source → AST index → retrieval → briefing → host model → cited answer, all local-first" width="100%">
106
+ </p>
107
+
108
+ `/codebase-apply` writes safely — **dry-run** · **`.dsh-backups/`** before overwrite · **protected paths** · never outside the project.
109
+
110
+ ## The 12 tools
111
+
112
+ | Understand | Decide | Act | Explore |
113
+ | --- | --- | --- | --- |
114
+ | `codebase_chat` | `codebase_intelligence` | `codebase_refactor` | `codebase_player` |
115
+ | `codebase_search` | `codebase_audit` | `codebase_tasks` | `codebase_crea` |
116
+ | `codebase_explain` | `codebase_report` | | |
117
+ | `codebase_health` | `codebase_ceo` | | |
81
118
 
82
- ## Quick start
119
+ Same engine, three surfaces: **MCP tools** in your IDE, **slash commands** in DeepSeek Harness, **CLI flags** anywhere. Every tool takes `lang` (`fr`/`en`), `embed`, `promptOnly`, `maxTokens`.
83
120
 
84
- ### Option A — DeepSeek Harness plugin
121
+ ## Reference
122
+
123
+ <details>
124
+ <summary><strong>Install — all paths</strong></summary>
125
+ <br>
126
+
127
+ **DeepSeek Harness plugin**
85
128
 
86
129
  ```bash
87
130
  dsh plugin --profile web add dsh-codebase-chat
88
- # without a global dsh install:
89
- npx -p @deepseek-ai/dsh dsh plugin --profile web add dsh-codebase-chat
90
131
  ```
91
132
 
92
- Then restart `dsh web`, open `http://127.0.0.1:3080` and click the **Codebase Pro** button in the sidebar.
133
+ Then restart `dsh web` `http://127.0.0.1:3080` **Codebase Pro** button.
93
134
 
94
- ### Option B — MCP server (Cursor, Claude, Windsurf…)
135
+ **CLI**
95
136
 
96
137
  ```bash
97
- npx dsh-codebase-chat-mcp
138
+ npx dsh-codebase-chat --project C:\my-app --ask "how is auth handled?"
139
+ npx dsh-codebase-chat --project C:\my-app --health # offline, no LLM
140
+ npx dsh-codebase-chat --project C:\my-app --health --diff main # only what changed
141
+ npx dsh-codebase-chat --project C:\my-app --watch # index stays hot while you code
98
142
  ```
99
143
 
144
+ **From source**
145
+
146
+ ```bash
147
+ git clone https://github.com/shinzarou-eng/dsh-codebase-chat.git
148
+ cd dsh-codebase-chat && pnpm install && pnpm build
149
+ ```
150
+
151
+ **Manual MCP config**
152
+
100
153
  ```json
101
154
  {
102
155
  "mcpServers": {
@@ -108,58 +161,13 @@ npx dsh-codebase-chat-mcp
108
161
  }
109
162
  ```
110
163
 
111
- > **No API key needed.** Without `DEEPSEEK_API_KEY` / `OPENAI_API_KEY`, the server runs in
112
- > `promptOnly` mode and hands the assembled context to your host model. See
113
- > [`mcp/README.md`](mcp/README.md) for direct-LLM configuration.
114
-
115
- ### Option C — CLI
116
-
117
- ```bash
118
- npx dsh-codebase-chat --project C:\my-app --ask "how is auth handled?"
119
- npx dsh-codebase-chat --project C:\my-app --search "rate limiting"
120
- npx dsh-codebase-chat --project C:\my-app --file src/auth.ts
121
- npx dsh-codebase-chat --project C:\my-app --stats
122
- npx dsh-codebase-chat --project C:\my-app --health # deterministic static analysis, no LLM
123
- ```
124
-
125
- `--health` runs entirely offline: circular dependencies, unused files/exports, duplicated
126
- blocks, complexity hotspots, and a health score — handy as a quick quality gate.
127
-
128
- The first run builds a cached index under `CODEBASE_CACHE_DIR`; subsequent runs are incremental.
129
-
130
- ### From source
131
-
132
- ```bash
133
- git clone https://github.com/shinzarou-eng/dsh-codebase-chat.git
134
- cd dsh-codebase-chat
135
- pnpm install && pnpm build
136
- ```
164
+ Without `DEEPSEEK_API_KEY` / `OPENAI_API_KEY` the server runs `promptOnly`. Set either key for direct-LLM calls — see [`mcp/README.md`](mcp/README.md).
137
165
 
138
- ---
139
-
140
- ## Tool suite
141
-
142
- Every capability is exposed as a DSH tool, a slash command, and an MCP tool.
166
+ </details>
143
167
 
144
- | Tool | What it does |
145
- | --- | --- |
146
- | `codebase_chat` | Q&amp;A on your project with cited sources |
147
- | `codebase_search` | Find symbols, terms, and usages across the repo |
148
- | `codebase_explain` | Explain a file or symbol — fallback symbol search included |
149
- | `codebase_refactor` | Propose a concrete refactor with Before/After diff |
150
- | `codebase_intelligence` | Full CTO brief: architecture, debt, security, roadmap |
151
- | `codebase_audit` | Tech-debt and non-conformity scan with severity |
152
- | `codebase_report` | Strategic board report — SWOT, risks, opportunities |
153
- | `codebase_ceo` | One-page executive brief |
154
- | `codebase_tasks` | Generate a sprinted `TASKS.md` action plan |
155
- | `codebase_player` | UX / playthrough brief from a user's point of view |
156
- | `codebase_crea` | Creative and marketing angles extracted from the code |
157
- | `codebase_health` | **Deterministic** static analysis — circular deps, dead code, duplication, complexity, health score. No LLM needed |
158
-
159
- Common parameters: `projectPath`, `lang` (`fr`/`en`), `embed` (local semantic embeddings),
160
- `promptOnly` (MCP), `style` (reports).
161
-
162
- ### Slash commands (DeepSeek Harness)
168
+ <details>
169
+ <summary><strong>Slash commands (DeepSeek Harness)</strong></summary>
170
+ <br>
163
171
 
164
172
  ```powershell
165
173
  dsh --profile headless '/codebase "how is auth handled?" --project C:\my-app'
@@ -174,38 +182,11 @@ dsh --profile headless '/codebase-build --project C:\my-app'
174
182
  dsh --profile headless '/codebase-git --project C:\my-app'
175
183
  ```
176
184
 
177
- ---
178
-
179
- ## How it works
180
-
181
- ```mermaid
182
- graph LR
183
- A[Query] --> B[Index]
184
- B --> C[Retrieve]
185
- C --> D[Prompt]
186
- D --> E[LLM]
187
- E --> F[Cited answer]
188
- ```
189
-
190
- 1. **Index** — real AST extraction (Babel for JS/TS, tree-sitter WASM for Python, Go, Rust, Java, C# and PHP, regex fallback elsewhere) builds a symbol-level index, cached on disk and refreshed incrementally (mtime/size based — no full re-reads).
191
- 2. **Retrieve** — lexical scoring plus optional local multilingual embeddings (`Xenova/paraphrase-multilingual-MiniLM-L12-v2`) select the most relevant chunks inside a token budget.
192
- 3. **Prompt** — a language-aware prompt is assembled with module graphs, metrics, debt signals, and file excerpts.
193
- 4. **Answer** — the model responds with `[source: file:line]` citations, `[Confidence: X%]`, and `[Severity: …]` labels.
194
-
195
- ### Safe apply pipeline
196
-
197
- `/codebase-apply` and `/codebase-apply-tasks` support dry-run, create `.dsh-backups/` copies
198
- before overwriting, enforce protected paths, and never write outside the selected project.
199
-
200
- ---
201
-
202
- ## Configuration
203
-
204
- ### `.codebase-chat.json` — per-project settings
185
+ </details>
205
186
 
206
- Drop this file at the project root to tune indexing, prompts and safety. Every key
207
- is optional; explicit CLI flags and tool arguments always take precedence, and a
208
- missing or malformed file falls back to built-in defaults.
187
+ <details>
188
+ <summary><strong><code>.codebase-chat.json</code> per-project settings</strong></summary>
189
+ <br>
209
190
 
210
191
  ```json
211
192
  {
@@ -220,28 +201,49 @@ missing or malformed file falls back to built-in defaults.
220
201
 
221
202
  | Key | Effect |
222
203
  | --- | --- |
223
- | `lang` | Default prompt language (`en` or `fr`) for the CLI, MCP tools and slash commands |
224
- | `maxTokens` | Default context budget when the caller passes none |
225
- | `ignoreDirs` | Extra directory names skipped by indexing, `codebase_health` and the file tree |
226
- | `ignoreFiles` | Extra file names skipped the same way |
227
- | `ignoreGlobs` | Globs on project-relative paths `**` spans directories, `*` one segment, `?` one char |
228
- | `protectedPaths` | Extra paths the apply pipeline can never patch (adds to `DSH_PROTECTED_PATHS` and built-ins) |
204
+ | `lang` | Default prompt language (`en`/`fr`) CLI, MCP tools, slash commands |
205
+ | `maxTokens` | Context budget when the caller passes none |
206
+ | `ignoreDirs` / `ignoreFiles` | Extra names skipped by indexing, `codebase_health`, file tree |
207
+ | `ignoreGlobs` | Globs on project-relative paths `**` spans dirs, `*` one segment |
208
+ | `protectedPaths` | Paths the apply pipeline can never patch |
229
209
 
230
- ### Environment variables
210
+ </details>
211
+
212
+ <details>
213
+ <summary><strong>Environment variables</strong></summary>
214
+ <br>
231
215
 
232
216
  | Variable | Default | Purpose |
233
217
  | --- | --- | --- |
234
218
  | `CODEBASE_CACHE_DIR` | OS cache dir | Where the index cache lives |
235
- | `DSH_PROJECT_ALIASES` | — | Extra `name=path` project aliases (`;`-separated) |
236
- | `DSH_DAKO_PROJECT` | — | Override the built-in `dako` alias target |
219
+ | `DSH_PROJECT_ALIASES` | — | Extra `name=path` aliases (`;`-separated) |
220
+ | `DSH_DAKO_PROJECT` | — | Override the built-in `dako` alias |
237
221
  | `DSH_PROTECTED_PATHS` | built-in list | Extra paths that can never be patched |
238
- | `DEEPSEEK_API_KEY` / `OPENAI_API_KEY` | — | MCP direct-LLM mode only |
222
+ | `DEEPSEEK_API_KEY` / `OPENAI_API_KEY` | — | Direct-LLM mode only |
239
223
  | `DEEPSEEK_BASE_URL` / `OPENAI_BASE_URL` | `https://api.deepseek.com/v1` | Custom endpoint |
240
224
  | `CODEBASE_MODEL` | `deepseek-chat` | Model for direct-LLM mode |
241
225
 
242
- ---
226
+ </details>
227
+
228
+ <details>
229
+ <summary><strong>Plain words — 🇫🇷 inside</strong></summary>
230
+ <br>
243
231
 
244
- ## Project layout
232
+ Point it at a folder of code. Ask questions like a human — *"How does login work?"*, *"What should I fix first?"* — in French or English. Every answer cites the exact file and line it came from. **Nothing is uploaded anywhere.**
233
+
234
+ *Pointez-le vers un dossier de code. Posez vos questions en langage clair. Chaque réponse cite le fichier et la ligne exacts. **Rien n'est envoyé sur internet.***
235
+
236
+ | Term | Meaning |
237
+ | --- | --- |
238
+ | **MCP server** | A plug format that lets AI assistants use extra tools. Install once — your IDE can "see" your code. |
239
+ | **Prompt-only** | The tool prepares the context; your existing AI writes the answer. No extra key, no extra cost. |
240
+ | **Deterministic** | Computed directly from your code — same input, same result, every time. |
241
+
242
+ </details>
243
+
244
+ <details>
245
+ <summary><strong>Project layout & dev</strong></summary>
246
+ <br>
245
247
 
246
248
  ```
247
249
  ├── lib/ DeepSeek Harness plugin (index.js) + Codebase Pro UI (client.js)
@@ -252,75 +254,60 @@ missing or malformed file falls back to built-in defaults.
252
254
  └── dist/ Build output (tsup)
253
255
  ```
254
256
 
255
- ### Development
256
-
257
257
  ```bash
258
- pnpm install # install workspace deps
259
- pnpm build # tsup → dist/
260
- pnpm test # vitest run
261
- pnpm typecheck # tsc --noEmit
258
+ pnpm install && pnpm build && pnpm test && pnpm typecheck
262
259
  ```
263
260
 
264
- ---
265
-
266
- ## FAQ
267
-
268
- <details>
269
- <summary><strong>Does it send my code to the cloud?</strong></summary>
270
- <br>
271
- No. Indexing, retrieval, and prompt building run on your machine. In MCP prompt-only mode, nothing leaves your machine at all — the host model reads the assembled context directly.
272
261
  </details>
273
262
 
274
263
  <details>
275
- <summary><strong>Do I need an API key?</strong></summary>
264
+ <summary><strong>FAQ</strong></summary>
276
265
  <br>
277
- Not for the MCP server — without a key it returns the built prompt to the host model. A <code>DEEPSEEK_API_KEY</code> or <code>OPENAI_API_KEY</code> is only needed for direct LLM calls. Inside DeepSeek Harness, the plugin uses your configured model.
278
- </details>
279
266
 
280
- <details>
281
- <summary><strong>Which languages are supported?</strong></summary>
282
- <br>
283
- French and English out of the box via the <code>lang</code> parameter on every tool and command. The prompt builders are designed to be extended.
284
- </details>
267
+ **Does it send my code to the cloud?**
268
+ No. Indexing, retrieval, and prompt building run on your machine. In prompt-only mode, nothing leaves it at all.
285
269
 
286
- <details>
287
- <summary><strong>Is applying patches safe?</strong></summary>
288
- <br>
289
- Yes. Apply workflows support dry-run, create backups before overwriting, enforce protected paths, and keep all writes inside the selected project.
290
- </details>
270
+ **Do I need an API key?**
271
+ Not for the MCP server — without a key it returns the built prompt to the host model. A key is only needed for direct LLM calls. Inside DeepSeek Harness, the plugin uses your configured model.
291
272
 
292
- <details>
293
- <summary><strong>Troubleshooting: EADDRINUSE on port 3080</strong></summary>
294
- <br>
273
+ **Which languages are supported?**
274
+ French and English via `lang` on every tool. Source-side, AST covers JS/TS, Python, Go, Rust, Java, C#, PHP — the rest is indexed line by line.
295
275
 
276
+ **Is applying patches safe?**
277
+ Yes. Dry-run, backups before overwrite, protected paths, writes stay inside the project.
278
+
279
+ **EADDRINUSE on port 3080?**
296
280
  ```powershell
297
281
  Get-NetTCPConnection -LocalPort 3080 | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }
298
282
  ```
283
+ Then restart `dsh --profile web`.
299
284
 
300
- Then restart <code>dsh --profile web</code>.
301
285
  </details>
302
286
 
303
- ---
287
+ <details>
288
+ <summary><strong>Roadmap</strong></summary>
289
+ <br>
304
290
 
305
- ## Roadmap
291
+ | | |
292
+ | --- | --- |
293
+ | **Shipped** | tree-sitter AST (7 languages), deterministic health score, MCP setup wizard, `.codebase-chat.json`, `--diff` scoping, `--watch` mode |
294
+ | **Next** | GitHub Issues export from TASKS.md, prompt language packs (ES/DE/PT) |
295
+ | **Planned** | VS Code extension, HTTP/SSE transport, PR review mode, report export |
296
+ | **Exploring** | multi-repo workspaces, shared team index cache, CI bot |
306
297
 
307
- Highlights see [ROADMAP.md](ROADMAP.md) for the full plan:
298
+ <sub>Full detail: <a href="ROADMAP.md">ROADMAP.md</a></sub>
308
299
 
309
- - **Next**: tree-sitter parsing (Python, Go, Rust, Java), watch mode, GitHub Issues export
310
- - **Planned**: VS Code extension, HTTP/SSE transport, PR review mode, report export (HTML/PDF)
311
- - **Exploring**: multi-repo workspaces, shared team index cache, CI bot
300
+ </details>
312
301
 
313
302
  ---
314
303
 
315
- ## Contributing
316
-
317
- Contributions are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md). Run `pnpm typecheck && pnpm test` before opening a PR.
318
-
319
- ## Support
320
-
321
- - [Open an issue](https://github.com/shinzarou-eng/dsh-codebase-chat/issues)
322
- - [SUPPORT.md](SUPPORT.md)
323
-
324
- ## License
325
-
326
- [MIT](LICENSE) — Built and maintained by [shinzarou-eng](https://github.com/shinzarou-eng).
304
+ <p align="center">
305
+ <strong>If this project helps you — <a href="https://github.com/shinzarou-eng/dsh-codebase-chat">star it on GitHub</a> ⭐</strong>
306
+ <br><br>
307
+ <a href="https://shinzarou-eng.github.io/dsh-codebase-chat">Website</a> ·
308
+ <a href="https://github.com/shinzarou-eng/dsh-codebase-chat/issues">Issues</a> ·
309
+ <a href="SUPPORT.md">Support</a> ·
310
+ <a href="SECURITY.md">Security</a>
311
+ <br><br>
312
+ <sub><a href="LICENSE">MIT License</a> — built and maintained by <a href="https://github.com/shinzarou-eng">shinzarou-eng</a></sub>
313
+ </p>