返回 DeepSeek-TUI-2026
index.html
根目录 / website / index.html
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>DeepSeek TUI — Terminal-native coding agent</title>
7 <link rel="alternate" hreflang="zh" href="./zh/">
8 <style>
9 :root {
10 --bg: #0a0e14;
11 --bg-elevated: #111820;
12 --bg-card: #0f151c;
13 --border: #1e2a36;
14 --border-light: #263545;
15 --text: #b8c5d6;
16 --text-muted: #5e7a94;
17 --text-bright: #e8f0f8;
18 --accent: #4dabf7;
19 --accent-dim: #1971c2;
20 --accent-glow: rgba(77, 171, 247, 0.15);
21 --success: #51cf66;
22 --warning: #ffd43b;
23 --font-mono: ui-monospace, "SF Mono", "SFMono-Regular", Menlo, Consolas, "Liberation Mono", monospace;
24 --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
25 --font-zh: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
26 }
27
28 * { box-sizing: border-box; margin: 0; padding: 0; }
29
30 html { scroll-behavior: smooth; }
31
32 body {
33 background: var(--bg);
34 color: var(--text);
35 font-family: var(--font-sans);
36 line-height: 1.65;
37 -webkit-font-smoothing: antialiased;
38 }
39
40 /* Background grid */
41 body::before {
42 content: "";
43 position: fixed;
44 inset: 0;
45 background-image:
46 linear-gradient(rgba(77,171,247,0.03) 1px, transparent 1px),
47 linear-gradient(90deg, rgba(77,171,247,0.03) 1px, transparent 1px);
48 background-size: 60px 60px;
49 mask-image: radial-gradient(ellipse 80% 60% at 50% 0%, black 40%, transparent 100%);
50 pointer-events: none;
51 z-index: 0;
52 }
53
54 a { color: var(--accent); text-decoration: none; transition: color 0.15s; }
55 a:hover { color: #74c0fc; text-decoration: underline; }
56
57 .container {
58 max-width: 860px;
59 margin: 0 auto;
60 padding: 0 1.5rem;
61 position: relative;
62 z-index: 1;
63 }
64
65 /* Nav */
66 nav {
67 border-bottom: 1px solid var(--border);
68 background: rgba(10,14,20,0.75);
69 backdrop-filter: blur(12px) saturate(1.2);
70 position: sticky;
71 top: 0;
72 z-index: 20;
73 }
74 nav .container {
75 display: flex;
76 align-items: center;
77 justify-content: space-between;
78 height: 3.75rem;
79 }
80 .nav-brand {
81 font-weight: 700;
82 color: var(--text-bright);
83 font-family: var(--font-mono);
84 font-size: 0.95rem;
85 letter-spacing: -0.02em;
86 }
87 .nav-brand span { color: var(--accent); }
88 .nav-links {
89 display: flex;
90 align-items: center;
91 gap: 1.5rem;
92 list-style: none;
93 font-size: 0.875rem;
94 font-weight: 500;
95 }
96 .nav-links a { color: var(--text-muted); }
97 .nav-links a:hover { color: var(--text-bright); text-decoration: none; }
98 .lang-switch {
99 display: inline-flex;
100 align-items: center;
101 gap: 0.35rem;
102 padding: 0.3rem 0.6rem;
103 border-radius: 6px;
104 border: 1px solid var(--border);
105 font-size: 0.8rem;
106 color: var(--text-muted);
107 transition: all 0.15s;
108 }
109 .lang-switch:hover {
110 border-color: var(--border-light);
111 color: var(--text-bright);
112 text-decoration: none;
113 }
114
115 /* Hero */
116 .hero {
117 padding: 5rem 0 3.5rem;
118 text-align: center;
119 }
120 .hero-badge {
121 display: inline-flex;
122 align-items: center;
123 gap: 0.5rem;
124 padding: 0.35rem 0.9rem;
125 border-radius: 999px;
126 border: 1px solid var(--border);
127 background: var(--bg-elevated);
128 font-size: 0.8rem;
129 color: var(--text-muted);
130 margin-bottom: 1.5rem;
131 }
132 .hero-badge .dot {
133 width: 7px;
134 height: 7px;
135 border-radius: 50%;
136 background: var(--success);
137 box-shadow: 0 0 8px rgba(81,207,102,0.4);
138 }
139 .hero h1 {
140 font-family: var(--font-mono);
141 font-size: clamp(1.7rem, 4.5vw, 2.6rem);
142 color: var(--text-bright);
143 line-height: 1.2;
144 margin-bottom: 1.25rem;
145 letter-spacing: -0.02em;
146 }
147 .hero h1 .accent {
148 background: linear-gradient(135deg, var(--accent) 0%, #74c0fc 100%);
149 -webkit-background-clip: text;
150 -webkit-text-fill-color: transparent;
151 background-clip: text;
152 }
153 .hero .lead {
154 font-size: 1.15rem;
155 color: var(--text-muted);
156 max-width: 560px;
157 margin: 0 auto 2.5rem;
158 line-height: 1.6;
159 }
160
161 /* Terminal window */
162 .terminal {
163 max-width: 540px;
164 margin: 0 auto 2rem;
165 border-radius: 12px;
166 border: 1px solid var(--border-light);
167 background: #060a10;
168 overflow: hidden;
169 box-shadow:
170 0 0 0 1px rgba(77,171,247,0.08),
171 0 20px 50px -10px rgba(0,0,0,0.5),
172 0 0 80px -20px var(--accent-glow);
173 }
174 .terminal-header {
175 display: flex;
176 align-items: center;
177 gap: 0.5rem;
178 padding: 0.65rem 1rem;
179 background: rgba(255,255,255,0.02);
180 border-bottom: 1px solid var(--border);
181 }
182 .terminal-header .win-dot {
183 width: 11px;
184 height: 11px;
185 border-radius: 50%;
186 }
187 .win-dot.red { background: #ff5f56; }
188 .win-dot.yellow { background: #ffbd2e; }
189 .win-dot.green { background: #27c93f; }
190 .terminal-header .title {
191 margin-left: 0.5rem;
192 font-size: 0.75rem;
193 color: var(--text-muted);
194 font-family: var(--font-mono);
195 }
196 .terminal-body {
197 padding: 1.1rem 1.25rem;
198 font-family: var(--font-mono);
199 font-size: 0.95rem;
200 color: var(--text-bright);
201 text-align: left;
202 display: flex;
203 align-items: center;
204 gap: 0.6rem;
205 }
206 .terminal-body .prompt { color: var(--success); }
207 .terminal-body .cursor {
208 display: inline-block;
209 width: 8px;
210 height: 1.15em;
211 background: var(--accent);
212 animation: blink 1s step-end infinite;
213 vertical-align: text-bottom;
214 margin-left: 2px;
215 }
216 @keyframes blink { 50% { opacity: 0; } }
217 .btn-copy {
218 margin-left: auto;
219 background: transparent;
220 color: var(--text-muted);
221 border: 1px solid var(--border);
222 border-radius: 6px;
223 padding: 0.3rem 0.7rem;
224 font-family: var(--font-sans);
225 font-size: 0.75rem;
226 font-weight: 600;
227 cursor: pointer;
228 transition: all 0.15s;
229 white-space: nowrap;
230 }
231 .btn-copy:hover {
232 border-color: var(--border-light);
233 color: var(--text-bright);
234 }
235 .btn-copy.copied {
236 border-color: var(--success);
237 color: var(--success);
238 }
239
240 .hero-actions {
241 display: flex;
242 gap: 0.75rem;
243 justify-content: center;
244 flex-wrap: wrap;
245 }
246 .btn {
247 display: inline-flex;
248 align-items: center;
249 gap: 0.4rem;
250 padding: 0.6rem 1.2rem;
251 border-radius: 8px;
252 font-size: 0.9rem;
253 font-weight: 600;
254 transition: all 0.15s;
255 cursor: pointer;
256 border: none;
257 }
258 .btn-primary {
259 background: linear-gradient(135deg, var(--accent-dim) 0%, var(--accent) 100%);
260 color: #fff;
261 box-shadow: 0 4px 16px rgba(25,113,194,0.25);
262 }
263 .btn-primary:hover {
264 transform: translateY(-1px);
265 box-shadow: 0 6px 20px rgba(25,113,194,0.35);
266 text-decoration: none;
267 color: #fff;
268 }
269 .btn-secondary {
270 background: var(--bg-elevated);
271 color: var(--text);
272 border: 1px solid var(--border);
273 }
274 .btn-secondary:hover {
275 border-color: var(--border-light);
276 color: var(--text-bright);
277 text-decoration: none;
278 }
279
280 /* Screenshot */
281 .screenshot-wrap {
282 margin: 3rem 0;
283 border-radius: 14px;
284 overflow: hidden;
285 border: 1px solid var(--border);
286 background: var(--bg-card);
287 box-shadow: 0 30px 60px -20px rgba(0,0,0,0.6);
288 }
289 .screenshot-wrap img {
290 width: 100%;
291 height: auto;
292 display: block;
293 }
294
295 /* Sections */
296 section {
297 padding: 3rem 0;
298 border-top: 1px solid var(--border);
299 }
300 section h2 {
301 font-family: var(--font-mono);
302 font-size: 1.1rem;
303 color: var(--text-bright);
304 margin-bottom: 1.25rem;
305 display: flex;
306 align-items: center;
307 gap: 0.5rem;
308 }
309 section h2 .icon {
310 color: var(--accent);
311 }
312 section p, section li {
313 color: var(--text-muted);
314 font-size: 0.95rem;
315 margin-bottom: 0.75rem;
316 }
317 section ul { padding-left: 1.25rem; }
318 section li { margin-bottom: 0.5rem; }
319 section li strong { color: var(--text); font-weight: 600; }
320
321 pre {
322 background: #060a10;
323 border: 1px solid var(--border);
324 border-radius: 10px;
325 padding: 1rem 1.25rem;
326 overflow-x: auto;
327 font-family: var(--font-mono);
328 font-size: 0.82rem;
329 color: var(--text-bright);
330 margin: 0.75rem 0 1.25rem;
331 line-height: 1.6;
332 }
333 pre code { background: none; padding: 0; border: none; }
334 code {
335 font-family: var(--font-mono);
336 font-size: 0.88em;
337 background: var(--bg-elevated);
338 padding: 0.15rem 0.4rem;
339 border-radius: 4px;
340 border: 1px solid var(--border);
341 color: var(--text-bright);
342 }
343
344 /* Details / collapsible */
345 details {
346 background: var(--bg-card);
347 border: 1px solid var(--border);
348 border-radius: 10px;
349 padding: 1rem 1.25rem;
350 margin-bottom: 0.75rem;
351 }
352 summary {
353 font-weight: 600;
354 color: var(--text-bright);
355 cursor: pointer;
356 user-select: none;
357 display: flex;
358 align-items: center;
359 gap: 0.5rem;
360 font-size: 0.95rem;
361 }
362 summary::marker { display: none; }
363 details[open] summary { margin-bottom: 0.75rem; }
364 details pre { margin-bottom: 0; }
365
366 /* Feature grid */
367 .feature-grid {
368 display: grid;
369 grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
370 gap: 1rem;
371 margin-top: 1rem;
372 }
373 .feature-card {
374 background: var(--bg-card);
375 border: 1px solid var(--border);
376 border-radius: 10px;
377 padding: 1.25rem;
378 transition: border-color 0.15s, transform 0.15s;
379 }
380 .feature-card:hover {
381 border-color: var(--border-light);
382 transform: translateY(-2px);
383 }
384 .feature-card h3 {
385 font-size: 0.9rem;
386 color: var(--text-bright);
387 margin-bottom: 0.4rem;
388 font-family: var(--font-mono);
389 }
390 .feature-card p {
391 font-size: 0.85rem;
392 margin: 0;
393 line-height: 1.55;
394 }
395
396 /* Footer */
397 footer {
398 border-top: 1px solid var(--border);
399 padding: 2.5rem 0 3.5rem;
400 text-align: center;
401 font-size: 0.85rem;
402 color: var(--text-muted);
403 }
404 footer .footer-links {
405 display: flex;
406 gap: 1.25rem;
407 justify-content: center;
408 flex-wrap: wrap;
409 margin-bottom: 1.25rem;
410 font-weight: 500;
411 }
412 .disclaimer {
413 font-style: italic;
414 opacity: 0.7;
415 margin-top: 0.75rem;
416 }
417
418 @media (max-width: 640px) {
419 .hero { padding: 3rem 0 2.5rem; }
420 .nav-links { gap: 0.9rem; font-size: 0.8rem; }
421 .terminal-body { font-size: 0.85rem; flex-wrap: wrap; }
422 .feature-grid { grid-template-columns: 1fr; }
423 }
424 </style>
425 </head>
426 <body>
427
428 <nav>
429 <div class="container">
430 <div class="nav-brand">deepseek<span>-tui</span></div>
431 <ul class="nav-links">
432 <li><a href="#install">Install</a></li>
433 <li><a href="https://github.com/Hmbown/DeepSeek-TUI" target="_blank" rel="noopener">GitHub</a></li>
434 <li><a href="https://github.com/Hmbown/DeepSeek-TUI/tree/main/docs" target="_blank" rel="noopener">Docs</a></li>
435 <li><a href="https://github.com/Hmbown/DeepSeek-TUI/issues" target="_blank" rel="noopener">Community</a></li>
436 <li><a href="./zh/" class="lang-switch" title="切换到简体中文">中</a></li>
437 </ul>
438 </div>
439 </nav>
440
441 <main class="container">
442
443 <div class="hero" id="install">
444 <div class="hero-badge"><span class="dot"></span>v0.8.10 available now</div>
445 <h1>A terminal-native coding agent<br>for <span class="accent">DeepSeek&nbsp;V4</span></h1>
446 <p class="lead">1M-token context. Thinking-mode streaming. Single binary, zero dependencies — ships an MCP client, sandbox, and durable task queue out of the box.</p>
447
448 <div class="terminal">
449 <div class="terminal-header">
450 <span class="win-dot red"></span>
451 <span class="win-dot yellow"></span>
452 <span class="win-dot green"></span>
453 <span class="title">bash — zsh</span>
454 </div>
455 <div class="terminal-body">
456 <span class="prompt">$</span>
457 <span>npm i -g deepseek-tui</span>
458 <span class="cursor"></span>
459 <button class="btn-copy" onclick="copyInstall()" id="copyBtn">Copy</button>
460 </div>
461 </div>
462
463 <div class="hero-actions">
464 <a class="btn btn-primary" href="https://github.com/Hmbown/DeepSeek-TUI" target="_blank" rel="noopener">View on GitHub</a>
465 <a class="btn btn-secondary" href="https://www.buymeacoffee.com/hmbown" target="_blank" rel="noopener">Support</a>
466 </div>
467 </div>
468
469 <div class="screenshot-wrap">
470 <img src="https://raw.githubusercontent.com/Hmbown/DeepSeek-TUI/main/assets/screenshot.png" alt="DeepSeek TUI screenshot" loading="lazy">
471 </div>
472
473 <section>
474 <h2><span class="icon">▸</span>What you get</h2>
475 <div class="feature-grid">
476 <div class="feature-card">
477 <h3>1M context</h3>
478 <p>Built for DeepSeek V4 with intelligent compaction and prefix-cache-aware cost optimization.</p>
479 </div>
480 <div class="feature-card">
481 <h3>Thinking stream</h3>
482 <p>Watch the model's chain-of-thought unfold in real time before the final answer arrives.</p>
483 </div>
484 <div class="feature-card">
485 <h3>Native RLM</h3>
486 <p>Fan out 1–16 cheap children in parallel for batched analysis and parallel reasoning.</p>
487 </div>
488 <div class="feature-card">
489 <h3>Full tool suite</h3>
490 <p>File ops, shell, git, web search, apply-patch, sub-agents, and MCP servers.</p>
491 </div>
492 <div class="feature-card">
493 <h3>Three modes</h3>
494 <p>Plan (read-only), Agent (interactive), and YOLO (auto-approved) for any workflow.</p>
495 </div>
496 <div class="feature-card">
497 <h3>Durable sessions</h3>
498 <p>Save, resume, and rollback workspace state without touching your repo's .git.</p>
499 </div>
500 </div>
501 </section>
502
503 <section id="china">
504 <h2><span class="icon">◎</span>China / mirror-friendly install</h2>
505 <p>If downloads from GitHub or npm are slow from mainland China, use one of these paths:</p>
506
507 <details open>
508 <summary>npm via 淘宝镜像 (fastest)</summary>
509 <pre><code>npm config set registry https://registry.npmmirror.com
510 npm install -g deepseek-tui</code></pre>
511 <p style="font-size:0.85rem;margin-bottom:0;">The npm wrapper itself will still download the binary from GitHub Releases during <code>postinstall</code>. If that step is slow, set a mirror for the binary download:</p>
512 <pre style="margin-top:0.5rem;margin-bottom:0;"><code>DEEPSEEK_TUI_RELEASE_BASE_URL=https://your-mirror.example.com \
513 npm install -g deepseek-tui</code></pre>
514 </details>
515
516 <details>
517 <summary>Cargo via 清华 TUNA mirror</summary>
518 <p>Add to <code>~/.cargo/config.toml</code>:</p>
519 <pre><code>[source.crates-io]
520 replace-with = "tuna"
521
522 [source.tuna]
523 registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"</code></pre>
524 <p>Then install both binaries:</p>
525 <pre><code>cargo install deepseek-tui-cli --locked # provides `deepseek`
526 cargo install deepseek-tui --locked # provides `deepseek-tui`
527 deepseek --version</code></pre>
528 </details>
529
530 <details>
531 <summary>Rustup mirror (for building from source)</summary>
532 <pre><code>export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup
533 export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup
534 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh</code></pre>
535 </details>
536
537 <p style="margin-top:1rem;font-size:0.875rem;">Full platform guide: <a href="https://github.com/Hmbown/DeepSeek-TUI/blob/main/docs/INSTALL.md" target="_blank" rel="noopener">docs/INSTALL.md</a> · <a href="../README.zh-CN.md">简体中文 README</a></p>
538 </section>
539
540 </main>
541
542 <footer>
543 <div class="container">
544 <div class="footer-links">
545 <a href="https://github.com/Hmbown/DeepSeek-TUI" target="_blank" rel="noopener">GitHub</a>
546 <a href="https://github.com/Hmbown/DeepSeek-TUI/tree/main/docs" target="_blank" rel="noopener">Docs</a>
547 <a href="https://github.com/Hmbown/DeepSeek-TUI/issues" target="_blank" rel="noopener">Issues</a>
548 <a href="https://www.buymeacoffee.com/hmbown" target="_blank" rel="noopener">Support</a>
549 <a href="mailto:hunter@shannonlabs.dev">Contact</a>
550 </div>
551 <p class="disclaimer">Not affiliated with DeepSeek Inc.</p>
552 <p style="margin-top:0.75rem;">&copy; DeepSeek TUI contributors. MIT License.</p>
553 </div>
554 </footer>
555
556 <script>
557 function copyInstall() {
558 navigator.clipboard.writeText('npm i -g deepseek-tui').then(() => {
559 const btn = document.getElementById('copyBtn');
560 btn.textContent = 'Copied';
561 btn.classList.add('copied');
562 setTimeout(() => { btn.textContent = 'Copy'; btn.classList.remove('copied'); }, 1800);
563 });
564 }
565 </script>
566
567 </body>
568 </html>
569
569 lines HTML