Update dstalk landing page
Refresh the site to reflect the current dstalk project positioning and include the new SVG logo asset used by the page. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
1
dstalk_logo.svg
Normal file
1
dstalk_logo.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg id="b8933227-ee10-4b8b-aa3f-4d0252add8f0" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 467.49 156.25"><defs><style>.b2b6d799-07c9-401d-bf7c-05fa2b138761{fill:#036eb8;}.a1ce0134-56a6-4bb1-8507-28f21bc08e8e{fill:#fff;}</style></defs><path class="b2b6d799-07c9-401d-bf7c-05fa2b138761" d="M71.66,440.73S69.51,430,69.83,423.44s1.23-16.87,7.9-25.76,8.76-10.53,15-14.84,14.79-8.38,23.65-8.86,16.53-.14,23.22,2.3,12.77,5.54,17.88,14.77S162,406.69,162,406.69s.72,12.93-1.73,19.8-3.74,7.61-5.61,10.53-9.5,8.69-10.35,10.8-1,13.92-3.26,13.77-6.87-8.47-10.53-10.07-9.53-.3-14.58-.91a34.86,34.86,0,0,1-12-3.37c-3.86-1.83-7.08-3.8-9.17-6.39s-3.74-4.78-5.95-7.78-2.56-4.19-3.32-7.75a37.21,37.21,0,0,1-1-7.71,23.43,23.43,0,0,1,.71-7.27c.49-1.9,2.34-6.88,2.34-6.88.17,0,3.57-8.11,3.24-8.88s-3.81,3.1-5.73,6.05-4.78,7-6,10.78-2.54,6.74-2.68,12,0,12.58,2,17.56A41.48,41.48,0,0,0,86.9,454.2a41.46,41.46,0,0,0,12.34,7.95c3.65,1.35,6.05,2.48,10.2,3.12s5.28.68,9,1,10.56.25,10.56.25l12.79,13.25a4.08,4.08,0,0,0,2.86,1.5c1.7,0,2.49-2,2.49-2L153.05,460s7.18-4.13,10.34-7.58,5.24-4.95,9.17-12.29,6.05-19.23,6-19.6c.19-.78,0-34.45,0-34.45l-.35-53.83a23.52,23.52,0,0,0-1.89-3.67,14.51,14.51,0,0,0-4.35-3,8.32,8.32,0,0,0-6,0,8.49,8.49,0,0,0-3.32,2.63,45.13,45.13,0,0,0-2.15,4.2l.27,36.93s-2.22-2.91-8.85-5.91a55,55,0,0,0-19.51-5.14,77.52,77.52,0,0,0-22.39.9,60.73,60.73,0,0,0-14.38,4.36,69.24,69.24,0,0,0-11.38,6.76,75.69,75.69,0,0,0-9.54,9.19c-2,2.49-5.41,6.3-8.46,15.93s-2.35,18.16-1.76,23.81.64,5.69,2.42,11.63A32.73,32.73,0,0,0,71.66,440.73Z" transform="translate(-63.94 -325.04)"/><circle class="b2b6d799-07c9-401d-bf7c-05fa2b138761" cx="45.84" cy="89.15" r="8.17"/><circle class="b2b6d799-07c9-401d-bf7c-05fa2b138761" cx="70.14" cy="89.15" r="8.17"/><path class="a1ce0134-56a6-4bb1-8507-28f21bc08e8e" d="M423.12,414.19" transform="translate(-63.94 -325.04)"/><path class="b2b6d799-07c9-401d-bf7c-05fa2b138761" d="M210.43,418c0-19.47,12.16-31.23,24.69-31.23,6.57,0,10.58,2.45,14.6,6.21l-.64-9V363.69h17.64v84.07H252.33l-1.27-5.9h-.44c-4.2,4.2-10.09,7.34-15.84,7.34C220,449.2,210.43,437.45,210.43,418Zm38.65,11.42V405a14.45,14.45,0,0,0-9.85-3.76c-5.71,0-10.72,5.27-10.72,16.59,0,11.69,4,16.95,10.86,16.95C243.13,434.76,246.16,433.34,249.08,429.43Z" transform="translate(-63.94 -325.04)"/><path class="b2b6d799-07c9-401d-bf7c-05fa2b138761" d="M277,440.88l7.94-11c5.39,4.08,10.37,6.26,15.35,6.26,5.25,0,7.52-2,7.52-5.12,0-3.93-5.9-5.7-12-8.1-7.3-2.83-15.76-7.67-15.76-17.51,0-11.08,9-18.64,22.75-18.64,9.12,0,15.91,3.69,21,7.54l-7.89,10.59c-4.24-3.07-8.42-5.08-12.54-5.08-4.56,0-6.8,1.79-6.8,4.76,0,3.79,5.57,5.25,11.74,7.49,7.54,2.79,16,7,16,17.92s-8.5,19.2-24.45,19.2A38.65,38.65,0,0,1,277,440.88Z" transform="translate(-63.94 -325.04)"/><path class="b2b6d799-07c9-401d-bf7c-05fa2b138761" d="M335.4,426.11V402.06h-8.13V388.9l9.12-.68,2.06-15.81H353v15.81h14.27v13.84H353V425.9c0,6.75,3.06,9.46,7.71,9.46a17.85,17.85,0,0,0,5.66-1.13L369.19,447A42.05,42.05,0,0,1,356,449.2C341.25,449.2,335.4,439.91,335.4,426.11Z" transform="translate(-63.94 -325.04)"/><path class="b2b6d799-07c9-401d-bf7c-05fa2b138761" d="M373.84,431.25c0-12.55,10-19.34,33.52-21.82-.35-5.21-2.95-8.61-9.41-8.61-5,0-10,2.1-15.75,5.38l-6.27-11.58c7.55-4.62,16.06-7.84,25.42-7.84,15.22,0,23.65,8.7,23.65,26.94v34H410.61l-1.27-6.1h-.44c-5,4.4-10.63,7.54-17.32,7.54C380.73,449.2,373.84,441.27,373.84,431.25Zm33.52-.79v-10.4c-12.54,1.69-16.63,5.28-16.63,9.78,0,3.84,2.64,5.71,6.83,5.71C401.55,435.55,404.23,433.58,407.36,430.46Z" transform="translate(-63.94 -325.04)"/><path class="b2b6d799-07c9-401d-bf7c-05fa2b138761" d="M439.81,429.26V363.69h17.64V430c0,3.78,1.75,5,3.19,5a7.68,7.68,0,0,0,2.16-.24l2.11,13a22.9,22.9,0,0,1-8.86,1.47C444,449.2,439.81,441.3,439.81,429.26Z" transform="translate(-63.94 -325.04)"/><path class="b2b6d799-07c9-401d-bf7c-05fa2b138761" d="M474.13,363.69h17.25v48.16h.44l18.88-23.63h19.15L509,412.76l22.43,35H512.32l-13.39-23.22-7.55,8.56v14.66H474.13Z" transform="translate(-63.94 -325.04)"/></svg>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
449
index.html
449
index.html
@@ -3,115 +3,414 @@
|
||||
<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="dstalk_logo.svg" type="image/svg+xml">
|
||||
<title>dstalk — DeepSeek V4 AI 编程 CLI</title>
|
||||
<style>
|
||||
:root { --bg:#0d1117; --card:#161b22; --border:#30363d; --text:#c9d1d9; --cyan:#58a6ff; --green:#3fb950; }
|
||||
: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; }
|
||||
body { background:var(--bg); color:var(--text); font:16px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif; }
|
||||
a { color:var(--cyan); text-decoration:none; }
|
||||
.container { max-width:900px; margin:0 auto; padding:0 24px; }
|
||||
header { text-align:center; padding:80px 0 60px; }
|
||||
header h1 { font-size:3rem; color:#fff; letter-spacing:-0.5px; }
|
||||
header h1 span { color:var(--cyan); }
|
||||
header p { font-size:1.25rem; color:#8b949e; margin-top:12px; }
|
||||
.badge { display:inline-block; padding:4px 12px; border-radius:20px; font-size:0.8rem; margin:16px 4px 0; background:var(--card); border:1px solid var(--border); }
|
||||
section { margin:60px 0; }
|
||||
h2 { font-size:1.5rem; color:#fff; margin-bottom:20px; padding-bottom:8px; border-bottom:1px solid var(--border); }
|
||||
.cards { display:grid; grid-template-columns:repeat(auto-fit,minmax(250px,1fr)); gap:16px; }
|
||||
.card { background:var(--card); border:1px solid var(--border); border-radius:8px; padding:24px; }
|
||||
.card h3 { color:var(--cyan); margin-bottom:8px; font-size:1rem; }
|
||||
.card p { color:#8b949e; font-size:0.9rem; }
|
||||
pre { background:var(--card); border:1px solid var(--border); border-radius:8px; padding:20px; overflow-x:auto; font-size:0.85rem; }
|
||||
code { font-family:"Cascadia Code","Fira Code",monospace; }
|
||||
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); }
|
||||
table { width:100%; border-collapse:collapse; margin:16px 0; }
|
||||
th,td { padding:10px 14px; text-align:left; border-bottom:1px solid var(--border); }
|
||||
th { color:#fff; font-weight:600; }
|
||||
td { font-size:0.9rem; }
|
||||
footer { text-align:center; padding:40px 0; color:#484f58; font-size:0.8rem; border-top:1px solid var(--border); margin-top:60px; }
|
||||
.btn { display:inline-block; padding:10px 24px; border-radius:6px; background:var(--cyan); color:#fff; font-weight:600; margin:8px; }
|
||||
.btn-outline { background:transparent; border:1px solid var(--cyan); color:var(--cyan); }
|
||||
.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="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 class="container">
|
||||
<header id="top" class="container hero">
|
||||
<div>
|
||||
<div class="eyebrow">dstalk.top 是 dstalk 项目的官方网站</div>
|
||||
<h1><span>ds</span>talk</h1>
|
||||
<p>基于 DeepSeek V4 的下一代 AI 编程 CLI</p>
|
||||
<span class="badge">C++20</span><span class="badge">GPL v3</span><span class="badge">跨平台</span>
|
||||
<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 class="container">
|
||||
|
||||
<section>
|
||||
<h2>功能对标</h2>
|
||||
<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">
|
||||
<div class="card"><h3>Claude Code</h3><p>完整的 AI 编程助手能力</p></div>
|
||||
<div class="card"><h3>OpenCode</h3><p>开源代码生成与理解</p></div>
|
||||
<div class="card"><h3>KiloCode</h3><p>命令行代码编辑工作流</p></div>
|
||||
<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>
|
||||
<h2>技术栈</h2>
|
||||
<table>
|
||||
<tr><th>组件</th><th>技术</th></tr>
|
||||
<tr><td>语言</td><td>C11 / C++20</td></tr>
|
||||
<tr><td>HTTP</td><td>Boost.Beast + BearSSL</td></tr>
|
||||
<tr><td>JSON</td><td>Boost.JSON</td></tr>
|
||||
<tr><td>跨平台</td><td>Boost + CMake + Conan2</td></tr>
|
||||
<tr><td>编译器</td><td>Clang + LLD (LLVM)</td></tr>
|
||||
<tr><td>构建系统</td><td>CMake + Ninja</td></tr>
|
||||
<tr><td>AI 模型</td><td>DeepSeek V4 Pro / Flash</td></tr>
|
||||
<tr><td>许可证</td><td>GNU GPL v3.0</td></tr>
|
||||
</table>
|
||||
</section>
|
||||
|
||||
<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>
|
||||
tools\setup.bat
|
||||
cd tools
|
||||
setup.bat
|
||||
|
||||
<span class="cmd"># 编译</span>
|
||||
<span class="cmd"># 回到项目根目录并编译</span>
|
||||
cd ..
|
||||
build.bat
|
||||
|
||||
<span class="cmd"># 创建配置文件 config.toml</span>
|
||||
<span class="cmd"># 创建 config.toml</span>
|
||||
[api]
|
||||
base_url = "https://api.deepseek.com/v1"
|
||||
api_key = "your-api-key"
|
||||
api_key = "sk-xxxxxxxx"
|
||||
model = "deepseek-chat"
|
||||
|
||||
<span class="cmd"># 运行</span>
|
||||
dstalk-cli.exe config.toml</code></pre>
|
||||
<span class="cmd"># 运行 CLI</span>
|
||||
build/dstalk-cli/dstalk-cli.exe config.toml</code></pre>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>架构</h2>
|
||||
<pre><code> dstalk-cli (ANSI UI) dstalk-gui (SDL3)
|
||||
| |
|
||||
+------- dstalk.dll ---+
|
||||
|
|
||||
+-----------+-----------+
|
||||
| | |
|
||||
AI Client HTTP Client File I/O
|
||||
(DeepSeek) (Beast+BearSSL)</code></pre>
|
||||
<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>
|
||||
<h2>API 支持</h2>
|
||||
<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>DeepSeek 官方</td><td>OpenAI Compatible</td><td>api.deepseek.com</td></tr>
|
||||
<tr><td>Pulsareon</td><td>OpenAI Compatible</td><td>api.ai.pulsareon.com</td></tr>
|
||||
<tr><td>其他兼容</td><td>Anthropic Compatible</td><td>可配置</td></tr>
|
||||
<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">
|
||||
<p>dstalk © 2026 | <a href="https://dstalk.top">dstalk.top</a> | <a href="https://git.pulsareon.com/pulsareon/dstalk2026">源代码</a></p>
|
||||
<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>
|
||||
|
||||
Reference in New Issue
Block a user