Files
dstalk.top/index.html
XiuChengWu 2142fabb79 Use remote dstalk logo asset
Point the favicon and brand image to the shared Pulsareon image repository so the site uses the canonical logo asset.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 20:43:45 +08:00

417 lines
21 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="dstalk 是基于 DeepSeek V4、兼容 OpenAI / Anthropic API 的 C/C++ AI 编程 CLI采用 dstalk-core.dll + 多前端解耦架构。">
<meta name="theme-color" content="#0b1020">
<meta property="og:title" content="dstalk — C/C++ AI 编程 CLI">
<meta property="og:description" content="DeepSeek V4 驱动C ABI 可嵌入CLI 当前可用GUI、插件与 LSP 持续推进。">
<meta property="og:type" content="website">
<link rel="icon" href="https://git.pulsareon.com/Res/Image/src/branch/main/dstalk_logo.svg" type="image/svg+xml">
<title>dstalk — DeepSeek V4 AI 编程 CLI</title>
<style>
:root {
--bg:#070b15;
--card:#111827cc;
--panel:#0d1324;
--border:#263247;
--text:#dbe7ff;
--muted:#8ea2c4;
--subtle:#5f7396;
--cyan:#58a6ff;
--green:#39d98a;
--purple:#a78bfa;
--warning:#facc15;
--shadow:0 24px 80px rgba(0,0,0,.35);
}
* { margin:0; padding:0; box-sizing:border-box; }
html { scroll-behavior:smooth; }
body {
min-height:100vh;
background:
radial-gradient(circle at 10% 0%, rgba(88,166,255,.24), transparent 34rem),
radial-gradient(circle at 92% 6%, rgba(167,139,250,.18), transparent 30rem),
linear-gradient(180deg, #070b15 0%, #0a1020 48%, #070b15 100%);
color:var(--text);
font:16px/1.65 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
}
body::before {
content:"";
position:fixed;
inset:0;
pointer-events:none;
background-image:linear-gradient(rgba(255,255,255,.035) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.035) 1px, transparent 1px);
background-size:48px 48px;
mask-image:linear-gradient(to bottom, #000, transparent 72%);
}
a { color:inherit; text-decoration:none; }
.container { width:min(1120px, calc(100% - 40px)); margin:0 auto; }
.nav {
position:sticky;
top:0;
z-index:10;
border-bottom:1px solid rgba(142,162,196,.16);
background:rgba(7,11,21,.74);
backdrop-filter:blur(18px);
}
.nav-inner { display:flex; align-items:center; justify-content:space-between; min-height:68px; gap:24px; }
.brand { display:flex; align-items:center; gap:10px; font-weight:800; letter-spacing:-.03em; }
.brand-mark {
display:block;
width:36px;
height:36px;
border-radius:11px;
box-shadow:0 0 30px rgba(88,166,255,.35);
}
.nav-links { display:flex; align-items:center; gap:22px; color:var(--muted); font-size:.94rem; }
.nav-links a:hover, .footer a:hover { color:#fff; }
.hero { display:grid; grid-template-columns:minmax(0, 1.06fr) minmax(320px, .94fr); align-items:center; gap:52px; padding:84px 0 72px; }
.hero > *, .split > *, .terminal, .panel { min-width:0; }
.eyebrow {
display:inline-flex;
align-items:center;
gap:8px;
margin-bottom:18px;
padding:7px 12px;
border:1px solid rgba(88,166,255,.32);
border-radius:999px;
color:#b9d8ff;
background:rgba(88,166,255,.09);
font-size:.88rem;
}
.eyebrow::before { content:""; width:8px; height:8px; border-radius:50%; background:var(--green); box-shadow:0 0 18px var(--green); }
h1 { max-width:760px; color:#fff; font-size:clamp(3.2rem, 8vw, 6.4rem); line-height:.95; letter-spacing:-.075em; }
h1 span { color:transparent; background:linear-gradient(135deg, var(--cyan), var(--green)); -webkit-background-clip:text; background-clip:text; }
h2 { color:#fff; font-size:clamp(1.8rem, 4vw, 2.7rem); line-height:1.1; letter-spacing:-.045em; }
h3 { color:#fff; }
.lead { max-width:720px; margin-top:24px; color:#b8c7e6; font-size:clamp(1.05rem, 2vw, 1.34rem); }
.actions { display:flex; flex-wrap:wrap; gap:14px; margin-top:34px; }
.btn {
display:inline-flex;
align-items:center;
justify-content:center;
min-height:46px;
padding:0 20px;
border-radius:12px;
border:1px solid transparent;
font-weight:700;
transition:transform .2s ease, border-color .2s ease, background .2s ease;
}
.btn:hover { transform:translateY(-2px); }
.btn-primary { color:#06111f; background:linear-gradient(135deg, var(--cyan), var(--green)); box-shadow:0 16px 40px rgba(88,166,255,.22); }
.btn-secondary { color:#d7e7ff; background:rgba(17,24,39,.72); border-color:rgba(142,162,196,.3); }
.badges, .stats { display:flex; flex-wrap:wrap; gap:10px; margin-top:30px; }
.badge, .stat { padding:7px 12px; border-radius:999px; color:#cfe1ff; background:rgba(17,24,39,.72); border:1px solid rgba(142,162,196,.22); font-size:.88rem; }
.stat { display:flex; gap:7px; border-radius:14px; }
.stat strong { color:#fff; }
.terminal {
position:relative;
overflow:hidden;
border:1px solid rgba(88,166,255,.28);
border-radius:22px;
background:linear-gradient(180deg, rgba(17,24,39,.94), rgba(8,13,25,.96));
box-shadow:var(--shadow);
}
.terminal::before {
content:"";
position:absolute;
inset:-1px;
pointer-events:none;
background:linear-gradient(135deg, rgba(88,166,255,.24), transparent 42%, rgba(57,217,138,.16));
}
.terminal-top { position:relative; display:flex; align-items:center; gap:8px; padding:16px 18px; border-bottom:1px solid rgba(142,162,196,.18); }
.dot { width:11px; height:11px; border-radius:50%; background:#ff5f56; }
.dot:nth-child(2) { background:#ffbd2e; }
.dot:nth-child(3) { background:#27c93f; }
.terminal-title { margin-left:8px; color:var(--subtle); font-size:.84rem; }
pre { position:relative; overflow-x:auto; padding:24px; color:#cfe1ff; font-size:.92rem; line-height:1.8; }
code { font-family:"Cascadia Code","Fira Code","JetBrains Mono",Consolas,monospace; }
.cmd { color:var(--green); }
.dim { color:var(--subtle); }
.section { padding:50px 0; }
.section-head { max-width:760px; margin-bottom:26px; }
.section-head p { margin-top:12px; color:var(--muted); font-size:1.04rem; }
.cards { display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:16px; }
.card {
position:relative;
overflow:hidden;
min-height:178px;
padding:24px;
border:1px solid rgba(142,162,196,.2);
border-radius:18px;
background:linear-gradient(180deg, rgba(17,24,39,.86), rgba(13,19,36,.78));
}
.card::after {
content:"";
position:absolute;
right:-36px;
top:-36px;
width:110px;
height:110px;
border-radius:50%;
background:rgba(88,166,255,.12);
}
.card h3 { margin-bottom:10px; font-size:1.08rem; }
.card p { color:var(--muted); font-size:.95rem; }
.icon { display:grid; place-items:center; width:40px; height:40px; margin-bottom:18px; border-radius:12px; color:#06111f; background:linear-gradient(135deg, var(--cyan), var(--green)); font-weight:900; }
.split { display:grid; grid-template-columns:.92fr 1.08fr; gap:28px; align-items:start; }
.panel { overflow:hidden; border:1px solid rgba(142,162,196,.2); border-radius:20px; background:rgba(17,24,39,.64); box-shadow:var(--shadow); }
.panel-pad { padding:24px; }
.steps { display:grid; gap:14px; }
.step { display:flex; gap:14px; padding:16px; border:1px solid rgba(142,162,196,.18); border-radius:14px; background:rgba(7,11,21,.34); }
.step-num { flex:0 0 auto; display:grid; place-items:center; width:28px; height:28px; border-radius:9px; color:#06111f; background:var(--green); font-weight:800; font-size:.86rem; }
.step p { color:var(--muted); font-size:.92rem; }
.table-wrap { overflow-x:auto; }
table { width:100%; min-width:720px; border-collapse:collapse; }
th,td { padding:15px 18px; text-align:left; border-bottom:1px solid rgba(142,162,196,.16); vertical-align:top; }
th { color:#fff; font-weight:700; background:rgba(88,166,255,.08); }
td { color:var(--muted); font-size:.95rem; }
tr:last-child td { border-bottom:0; }
.ok { color:var(--green); font-weight:700; }
.todo { color:var(--warning); font-weight:700; }
.architecture { color:#cfe1ff; }
.cta { margin-top:54px; margin-bottom:24px; padding:34px; border:1px solid rgba(88,166,255,.28); border-radius:24px; background:linear-gradient(135deg, rgba(88,166,255,.16), rgba(57,217,138,.09)); text-align:center; }
.cta p { max-width:720px; margin:12px auto 0; color:var(--muted); }
.footer { display:flex; justify-content:space-between; gap:20px; padding:32px 0 44px; color:var(--subtle); font-size:.9rem; border-top:1px solid rgba(142,162,196,.16); }
.footer-links { display:flex; gap:18px; flex-wrap:wrap; }
@media (max-width: 860px) {
.nav-links { display:none; }
.hero, .split { grid-template-columns:1fr; }
.hero { padding-top:56px; }
.cards { grid-template-columns:1fr; }
.footer { flex-direction:column; }
}
@media (max-width: 560px) {
.container { width:min(100% - 28px, 1120px); }
.actions, .footer-links { flex-direction:column; }
.btn { width:100%; }
pre { padding:18px; font-size:.82rem; }
th,td { padding:12px; }
.cta { padding:24px 18px; }
}
</style>
</head>
<body>
<nav class="nav" aria-label="主导航">
<div class="container nav-inner">
<a class="brand" href="#top" aria-label="dstalk 首页"><img class="brand-mark" src="https://git.pulsareon.com/Res/Image/src/branch/main/dstalk_logo.svg" alt="" width="36" height="36"><span>dstalk</span></a>
<div class="nav-links">
<a href="#features">特性</a>
<a href="#quickstart">快速开始</a>
<a href="#architecture">架构</a>
<a href="#commands">命令</a>
<a href="#roadmap">路线图</a>
</div>
</div>
</nav>
<header id="top" class="container hero">
<div>
<div class="eyebrow">dstalk.top 是 dstalk 项目的官方网站</div>
<h1><span>ds</span>talk</h1>
<p class="lead">基于 DeepSeek V4 大模型、兼容 OpenAI / Anthropic API 的 AI 编程 CLI。核心采用 C11 / C++20 编写,以 dstalk-core.dll 暴露稳定 C ABI让 CLI、GUI 和第三方工具共享同一套 AI 编程能力。</p>
<div class="actions">
<a class="btn btn-primary" href="#quickstart">开始使用</a>
<a class="btn btn-secondary" href="https://git.pulsareon.com/pulsareon/dstalk">查看源代码</a>
</div>
<div class="badges" aria-label="项目标签">
<span class="badge">v0.1.0</span>
<span class="badge">C11 / C++20</span>
<span class="badge">CDLL + C ABI</span>
<span class="badge">GPL v3.0</span>
</div>
<div class="stats" aria-label="项目状态">
<span class="stat"><strong>当前阶段</strong>Phase 1</span>
<span class="stat"><strong>核心</strong>dstalk-core.dll</span>
<span class="stat"><strong>前端</strong>CLI 当前可用</span>
</div>
</div>
<div class="terminal" aria-label="dstalk 命令行示例">
<div class="terminal-top"><span class="dot"></span><span class="dot"></span><span class="dot"></span><span class="terminal-title">dstalk-cli</span></div>
<pre><code><span class="cmd">$</span> build/dstalk-cli/dstalk-cli.exe config.toml
dstalk v0.1.0 | DeepSeek V4 | /help 查看帮助
&gt; 帮我解释 dstalk-core 的职责
<span class="dim">思考中...</span>
AI: dstalk-core 负责配置、会话、文件 I/O、HTTP 通信
和 DeepSeek API 适配,前端只处理输入与渲染。
&gt; /file read dstalk-core/src/api.cpp
<span class="dim">--- dstalk-core/src/api.cpp ---</span></code></pre>
</div>
</header>
<main>
<section id="features" class="container section">
<div class="section-head">
<h2>为什么 dstalk 用 C/C++ 重新做 AI 编程助手?</h2>
<p>dstalk 对标 Claude Code、OpenCode、KiloCode但选择系统级实现和 CDLL 架构,重点优化启动速度、运行时依赖、可嵌入能力和长期驻留体验。</p>
</div>
<div class="cards">
<article class="card"><div class="icon">C</div><h3>零 Node.js 运行时</h3><p>核心以 C11 / C++20 构建,目标是毫秒级启动和更低内存占用,适合终端长期交互。</p></article>
<article class="card"><div class="icon">ABI</div><h3>稳定 C ABI</h3><p>公开 dstalk_init、dstalk_chat、dstalk_file_read 等 C 函数,方便 C/C++、Python、Rust、C#、Go 嵌入。</p></article>
<article class="card"><div class="icon">AI</div><h3>多 API 兼容</h3><p>以 DeepSeek V4 为核心,同时兼容 OpenAI / Anthropic 风格接口,通过配置切换 base_url、api_key 与模型。</p></article>
<article class="card"><div class="icon">CLI</div><h3>命令行优先</h3><p>当前 CLI 使用 ANSI 终端 UI支持自然语言对话、模型切换、文件读写、会话保存与恢复。</p></article>
<article class="card"><div class="icon">DLL</div><h3>核心与前端解耦</h3><p>CLI 和 GUI 不持有业务逻辑,统一调用 dstalk-core.dll后续可以扩展更多宿主。</p></article>
<article class="card"><div class="icon">OSS</div><h3>开源可改造</h3><p>项目采用 GNU GPL v3.0,适合学习、二次开发和围绕本地工作流做深度定制。</p></article>
</div>
</section>
<section id="quickstart" class="container section">
<div class="split">
<div class="section-head">
<h2>快速开始</h2>
<p>dstalk 已提供自动工具链脚本和一键构建脚本。API Key 请只保存在本地 config.toml 或安全的环境中,不要提交到仓库。</p>
<div class="steps">
<div class="step"><div class="step-num">1</div><div><h3>安装本地工具链</h3><p>进入 tools 目录运行 setup.bat下载 CMake、Ninja、LLVM/Clang、Conan2。</p></div></div>
<div class="step"><div class="step-num">2</div><div><h3>构建 dstalk</h3><p>运行 build.bat完成 Conan 依赖、CMake 配置和 Ninja 编译。</p></div></div>
<div class="step"><div class="step-num">3</div><div><h3>启动 CLI</h3><p>使用 build/dstalk-cli/dstalk-cli.exe并传入 config.toml 或使用默认配置。</p></div></div>
</div>
</div>
<div class="terminal">
<div class="terminal-top"><span class="dot"></span><span class="dot"></span><span class="dot"></span><span class="terminal-title">quickstart</span></div>
<pre><code><span class="cmd"># 安装工具链</span>
cd tools
setup.bat
<span class="cmd"># 回到项目根目录并编译</span>
cd ..
build.bat
<span class="cmd"># 创建 config.toml</span>
[api]
base_url = "https://api.deepseek.com/v1"
api_key = "sk-xxxxxxxx"
model = "deepseek-chat"
<span class="cmd"># 运行 CLI</span>
build/dstalk-cli/dstalk-cli.exe config.toml</code></pre>
</div>
</div>
</section>
<section id="architecture" class="container section">
<div class="section-head">
<h2>CDLL + 多前端解耦架构</h2>
<p>dstalk-core.dll 提供网络通讯、AI 接口适配、文件读写和会话管理前端层只负责交互体验。GUI 目录已预留,根 CMake 当前先启用 CLI 与核心库。</p>
</div>
<div class="terminal architecture">
<div class="terminal-top"><span class="dot"></span><span class="dot"></span><span class="dot"></span><span class="terminal-title">architecture</span></div>
<pre><code>┌─────────────────────────────────────────────┐
│ Frontends │
│ dstalk-cli (ANSI UI) dstalk-gui (SDL3) │
│ 当前构建启用 路线图推进 │
└───────────────┬─────────────────────────────┘
│ C ABI
┌───────────────▼─────────────────────────────┐
│ dstalk-core.dll │
│ API / Session / File I/O / AI Adapter │
└───────┬──────────────┬──────────────┬────────┘
│ │ │
Boost.JSON HTTP Client OpenSSL TLS
Boost.Asio / Beast</code></pre>
</div>
</section>
<section class="container section">
<div class="section-head">
<h2>技术栈与工程现状</h2>
<p>以下内容根据 dstalk 的 CMake、Conan 配置和公开头文件整理。</p>
</div>
<div class="panel table-wrap">
<table>
<tr><th>模块</th><th>当前技术</th><th>状态</th></tr>
<tr><td>核心库</td><td>C11 / C++20dstalk-core.dll公开 C ABI</td><td><span class="ok">已启用</span></td></tr>
<tr><td>CLI 前端</td><td>ANSI 终端 UI调用 dstalk/dstalk_api.h</td><td><span class="ok">已启用</span></td></tr>
<tr><td>GUI 前端</td><td>SDL3 图形化前端</td><td><span class="todo">路线图</span></td></tr>
<tr><td>依赖管理</td><td>Conan2boost/1.86.0openssl/3.4.1</td><td><span class="ok">已配置</span></td></tr>
<tr><td>构建系统</td><td>CMake 3.21+NinjaLLVM/Clang</td><td><span class="ok">已配置</span></td></tr>
<tr><td>许可证</td><td>GNU GPL v3.0</td><td><span class="ok">已确认</span></td></tr>
</table>
</div>
</section>
<section id="commands" class="container section">
<div class="section-head">
<h2>CLI 常用命令</h2>
<p>除了直接输入自然语言问题dstalk-cli 还提供文件、模型和会话相关命令。</p>
</div>
<div class="panel table-wrap">
<table>
<tr><th>命令</th><th>说明</th><th>示例</th></tr>
<tr><td>/help</td><td>显示帮助</td><td>/help</td></tr>
<tr><td>/clear</td><td>清空当前会话上下文</td><td>/clear</td></tr>
<tr><td>/model &lt;name&gt;</td><td>切换当前模型</td><td>/model deepseek-chat</td></tr>
<tr><td>/file read &lt;path&gt;</td><td>读取文件内容并输出到终端</td><td>/file read README.md</td></tr>
<tr><td>/file write &lt;path&gt; &lt;content&gt;</td><td>写入文件内容</td><td>/file write note.txt hello</td></tr>
<tr><td>/save &lt;path&gt; / /load &lt;path&gt;</td><td>保存或恢复会话</td><td>/save session.json</td></tr>
</table>
</div>
</section>
<section id="api" class="container section">
<div class="section-head">
<h2>公开 C API</h2>
<p>dstalk-core 通过 dstalk-core/include/dstalk/dstalk_api.h 暴露函数,前端和第三方宿主都通过同一组接口调用核心能力。</p>
</div>
<div class="terminal">
<div class="terminal-top"><span class="dot"></span><span class="dot"></span><span class="dot"></span><span class="terminal-title">dstalk_api.h</span></div>
<pre><code>int dstalk_init(const char* config_path);
void dstalk_destroy(void);
void dstalk_set_api_key(const char* api_key);
void dstalk_set_base_url(const char* base_url);
void dstalk_set_model(const char* model);
int dstalk_chat(const char* input, char** output);
int dstalk_chat_stream(const char* input, dstalk_stream_cb cb, void* userdata);
void dstalk_free_string(char* str);
void dstalk_session_clear(void);
int dstalk_session_save(const char* path);
int dstalk_session_load(const char* path);
int dstalk_file_read(const char* path, char** content);
int dstalk_file_write(const char* path, const char* content);</code></pre>
</div>
</section>
<section id="roadmap" class="container section">
<div class="section-head">
<h2>路线图</h2>
<p>官网按 dstalk 当前 README 的阶段说明呈现,避免把规划功能误写成已完成能力。</p>
</div>
<div class="panel table-wrap">
<table>
<tr><th>阶段</th><th>内容</th><th>状态</th></tr>
<tr><td>Phase 1</td><td>项目骨架、CMake 构建、DLL 导出、前端主循环</td><td><span class="ok">当前阶段</span></td></tr>
<tr><td>Phase 2</td><td>HTTPS 网络层、DeepSeek API 对接、基本对话</td><td><span class="todo">推进中</span></td></tr>
<tr><td>Phase 3</td><td>流式输出、多轮会话、文件读写工具、CLI 体验对齐</td><td><span class="todo">计划中</span></td></tr>
<tr><td>Phase 4</td><td>SDL3 GUI 完善、插件系统、LSP 集成</td><td><span class="todo">计划中</span></td></tr>
</table>
</div>
</section>
<section class="container cta">
<h2>从终端开始,把 dstalk 嵌入更多工具</h2>
<p>dstalk 的核心价值不只是一个 CLI而是一个可被多前端复用的本地 AI 编程核心。dstalk.top 会持续同步项目进展、构建方式和可用能力。</p>
<div class="actions" style="justify-content:center">
<a class="btn btn-primary" href="#quickstart">查看快速开始</a>
<a class="btn btn-secondary" href="https://git.pulsareon.com/pulsareon/dstalk">访问源码仓库</a>
</div>
</section>
</main>
<footer class="container footer">
<p>dstalk &copy; 2026. GNU GPL v3.0. Website: dstalk.top.</p>
<div class="footer-links">
<a href="#top">返回顶部</a>
<a href="https://dstalk.top">dstalk.top</a>
<a href="https://git.pulsareon.com/pulsareon/dstalk">源代码</a>
</div>
</footer>
</body>
</html>