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>
417 lines
21 KiB
HTML
417 lines
21 KiB
HTML
<!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 查看帮助
|
||
|
||
> 帮我解释 dstalk-core 的职责
|
||
<span class="dim">思考中...</span>
|
||
AI: dstalk-core 负责配置、会话、文件 I/O、HTTP 通信
|
||
和 DeepSeek API 适配,前端只处理输入与渲染。
|
||
|
||
> /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++20,dstalk-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>Conan2,boost/1.86.0,openssl/3.4.1</td><td><span class="ok">已配置</span></td></tr>
|
||
<tr><td>构建系统</td><td>CMake 3.21+,Ninja,LLVM/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 <name></td><td>切换当前模型</td><td>/model deepseek-chat</td></tr>
|
||
<tr><td>/file read <path></td><td>读取文件内容并输出到终端</td><td>/file read README.md</td></tr>
|
||
<tr><td>/file write <path> <content></td><td>写入文件内容</td><td>/file write note.txt hello</td></tr>
|
||
<tr><td>/save <path> / /load <path></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 © 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>
|