dsh-codebase-chat 0.22.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,75 +22,133 @@
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 setup # detects Claude/Cursor/Windsurf/VS Code and writes the config
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
 
100
- Or configure manually:
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**
101
152
 
102
153
  ```json
103
154
  {
@@ -110,58 +161,13 @@ Or configure manually:
110
161
  }
111
162
  ```
112
163
 
113
- > **No API key needed.** Without `DEEPSEEK_API_KEY` / `OPENAI_API_KEY`, the server runs in
114
- > `promptOnly` mode and hands the assembled context to your host model. See
115
- > [`mcp/README.md`](mcp/README.md) for direct-LLM configuration.
116
-
117
- ### Option C — CLI
118
-
119
- ```bash
120
- npx dsh-codebase-chat --project C:\my-app --ask "how is auth handled?"
121
- npx dsh-codebase-chat --project C:\my-app --search "rate limiting"
122
- npx dsh-codebase-chat --project C:\my-app --file src/auth.ts
123
- npx dsh-codebase-chat --project C:\my-app --stats
124
- npx dsh-codebase-chat --project C:\my-app --health # deterministic static analysis, no LLM
125
- ```
126
-
127
- `--health` runs entirely offline: circular dependencies, unused files/exports, duplicated
128
- blocks, complexity hotspots, and a health score — handy as a quick quality gate.
129
-
130
- The first run builds a cached index under `CODEBASE_CACHE_DIR`; subsequent runs are incremental.
131
-
132
- ### From source
133
-
134
- ```bash
135
- git clone https://github.com/shinzarou-eng/dsh-codebase-chat.git
136
- cd dsh-codebase-chat
137
- pnpm install && pnpm build
138
- ```
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).
139
165
 
140
- ---
141
-
142
- ## Tool suite
143
-
144
- Every capability is exposed as a DSH tool, a slash command, and an MCP tool.
166
+ </details>
145
167
 
146
- | Tool | What it does |
147
- | --- | --- |
148
- | `codebase_chat` | Q&amp;A on your project with cited sources |
149
- | `codebase_search` | Find symbols, terms, and usages across the repo |
150
- | `codebase_explain` | Explain a file or symbol — fallback symbol search included |
151
- | `codebase_refactor` | Propose a concrete refactor with Before/After diff |
152
- | `codebase_intelligence` | Full CTO brief: architecture, debt, security, roadmap |
153
- | `codebase_audit` | Tech-debt and non-conformity scan with severity |
154
- | `codebase_report` | Strategic board report — SWOT, risks, opportunities |
155
- | `codebase_ceo` | One-page executive brief |
156
- | `codebase_tasks` | Generate a sprinted `TASKS.md` action plan |
157
- | `codebase_player` | UX / playthrough brief from a user's point of view |
158
- | `codebase_crea` | Creative and marketing angles extracted from the code |
159
- | `codebase_health` | **Deterministic** static analysis — circular deps, dead code, duplication, complexity, health score. No LLM needed |
160
-
161
- Common parameters: `projectPath`, `lang` (`fr`/`en`), `embed` (local semantic embeddings),
162
- `promptOnly` (MCP), `style` (reports).
163
-
164
- ### Slash commands (DeepSeek Harness)
168
+ <details>
169
+ <summary><strong>Slash commands (DeepSeek Harness)</strong></summary>
170
+ <br>
165
171
 
166
172
  ```powershell
167
173
  dsh --profile headless '/codebase "how is auth handled?" --project C:\my-app'
@@ -176,38 +182,11 @@ dsh --profile headless '/codebase-build --project C:\my-app'
176
182
  dsh --profile headless '/codebase-git --project C:\my-app'
177
183
  ```
178
184
 
179
- ---
180
-
181
- ## How it works
182
-
183
- ```mermaid
184
- graph LR
185
- A[Query] --> B[Index]
186
- B --> C[Retrieve]
187
- C --> D[Prompt]
188
- D --> E[LLM]
189
- E --> F[Cited answer]
190
- ```
191
-
192
- 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).
193
- 2. **Retrieve** — lexical scoring plus optional local multilingual embeddings (`Xenova/paraphrase-multilingual-MiniLM-L12-v2`) select the most relevant chunks inside a token budget.
194
- 3. **Prompt** — a language-aware prompt is assembled with module graphs, metrics, debt signals, and file excerpts.
195
- 4. **Answer** — the model responds with `[source: file:line]` citations, `[Confidence: X%]`, and `[Severity: …]` labels.
196
-
197
- ### Safe apply pipeline
198
-
199
- `/codebase-apply` and `/codebase-apply-tasks` support dry-run, create `.dsh-backups/` copies
200
- before overwriting, enforce protected paths, and never write outside the selected project.
201
-
202
- ---
203
-
204
- ## Configuration
205
-
206
- ### `.codebase-chat.json` — per-project settings
185
+ </details>
207
186
 
208
- Drop this file at the project root to tune indexing, prompts and safety. Every key
209
- is optional; explicit CLI flags and tool arguments always take precedence, and a
210
- 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>
211
190
 
212
191
  ```json
213
192
  {
@@ -222,28 +201,49 @@ missing or malformed file falls back to built-in defaults.
222
201
 
223
202
  | Key | Effect |
224
203
  | --- | --- |
225
- | `lang` | Default prompt language (`en` or `fr`) for the CLI, MCP tools and slash commands |
226
- | `maxTokens` | Default context budget when the caller passes none |
227
- | `ignoreDirs` | Extra directory names skipped by indexing, `codebase_health` and the file tree |
228
- | `ignoreFiles` | Extra file names skipped the same way |
229
- | `ignoreGlobs` | Globs on project-relative paths `**` spans directories, `*` one segment, `?` one char |
230
- | `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 |
209
+
210
+ </details>
231
211
 
232
- ### Environment variables
212
+ <details>
213
+ <summary><strong>Environment variables</strong></summary>
214
+ <br>
233
215
 
234
216
  | Variable | Default | Purpose |
235
217
  | --- | --- | --- |
236
218
  | `CODEBASE_CACHE_DIR` | OS cache dir | Where the index cache lives |
237
- | `DSH_PROJECT_ALIASES` | — | Extra `name=path` project aliases (`;`-separated) |
238
- | `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 |
239
221
  | `DSH_PROTECTED_PATHS` | built-in list | Extra paths that can never be patched |
240
- | `DEEPSEEK_API_KEY` / `OPENAI_API_KEY` | — | MCP direct-LLM mode only |
222
+ | `DEEPSEEK_API_KEY` / `OPENAI_API_KEY` | — | Direct-LLM mode only |
241
223
  | `DEEPSEEK_BASE_URL` / `OPENAI_BASE_URL` | `https://api.deepseek.com/v1` | Custom endpoint |
242
224
  | `CODEBASE_MODEL` | `deepseek-chat` | Model for direct-LLM mode |
243
225
 
244
- ---
226
+ </details>
227
+
228
+ <details>
229
+ <summary><strong>Plain words — 🇫🇷 inside</strong></summary>
230
+ <br>
231
+
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>
245
243
 
246
- ## Project layout
244
+ <details>
245
+ <summary><strong>Project layout & dev</strong></summary>
246
+ <br>
247
247
 
248
248
  ```
249
249
  ├── lib/ DeepSeek Harness plugin (index.js) + Codebase Pro UI (client.js)
@@ -254,75 +254,60 @@ missing or malformed file falls back to built-in defaults.
254
254
  └── dist/ Build output (tsup)
255
255
  ```
256
256
 
257
- ### Development
258
-
259
257
  ```bash
260
- pnpm install # install workspace deps
261
- pnpm build # tsup → dist/
262
- pnpm test # vitest run
263
- pnpm typecheck # tsc --noEmit
258
+ pnpm install && pnpm build && pnpm test && pnpm typecheck
264
259
  ```
265
260
 
266
- ---
267
-
268
- ## FAQ
269
-
270
- <details>
271
- <summary><strong>Does it send my code to the cloud?</strong></summary>
272
- <br>
273
- 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.
274
261
  </details>
275
262
 
276
263
  <details>
277
- <summary><strong>Do I need an API key?</strong></summary>
264
+ <summary><strong>FAQ</strong></summary>
278
265
  <br>
279
- 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.
280
- </details>
281
266
 
282
- <details>
283
- <summary><strong>Which languages are supported?</strong></summary>
284
- <br>
285
- 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.
286
- </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.
287
269
 
288
- <details>
289
- <summary><strong>Is applying patches safe?</strong></summary>
290
- <br>
291
- Yes. Apply workflows support dry-run, create backups before overwriting, enforce protected paths, and keep all writes inside the selected project.
292
- </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.
293
272
 
294
- <details>
295
- <summary><strong>Troubleshooting: EADDRINUSE on port 3080</strong></summary>
296
- <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.
297
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?**
298
280
  ```powershell
299
281
  Get-NetTCPConnection -LocalPort 3080 | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }
300
282
  ```
283
+ Then restart `dsh --profile web`.
301
284
 
302
- Then restart <code>dsh --profile web</code>.
303
285
  </details>
304
286
 
305
- ---
287
+ <details>
288
+ <summary><strong>Roadmap</strong></summary>
289
+ <br>
306
290
 
307
- ## 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 |
308
297
 
309
- Highlights see [ROADMAP.md](ROADMAP.md) for the full plan:
298
+ <sub>Full detail: <a href="ROADMAP.md">ROADMAP.md</a></sub>
310
299
 
311
- - **Next**: tree-sitter parsing (Python, Go, Rust, Java), watch mode, GitHub Issues export
312
- - **Planned**: VS Code extension, HTTP/SSE transport, PR review mode, report export (HTML/PDF)
313
- - **Exploring**: multi-repo workspaces, shared team index cache, CI bot
300
+ </details>
314
301
 
315
302
  ---
316
303
 
317
- ## Contributing
318
-
319
- Contributions are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md). Run `pnpm typecheck && pnpm test` before opening a PR.
320
-
321
- ## Support
322
-
323
- - [Open an issue](https://github.com/shinzarou-eng/dsh-codebase-chat/issues)
324
- - [SUPPORT.md](SUPPORT.md)
325
-
326
- ## License
327
-
328
- [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>