- Revised meta description to include multi-endpoint routing and decoupled frontends. - Updated Open Graph description to reflect the addition of endpoint management in plugins. - Changed lead paragraph to highlight the new ten functional plugins and their capabilities. - Adjusted project statistics to indicate the inclusion of Web frontend and endpoint management plugin. - Enhanced architecture section to clarify the role of ten functional plugins and the new web frontend. - Updated command list to include new commands for multi-endpoint management and file operations. - Revised public C API documentation to reflect the addition of the ai_endpoint_mgr service. - Expanded roadmap to include the Boost.Beast Web frontend and multi-endpoint capabilities. - Improved contribution guidelines to reflect the current state of the project and encourage community involvement.
488 lines
38 KiB
HTML
488 lines
38 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="description" content="dstalk is a C/C++ AI coding CLI compatible with OpenAI-style APIs and Anthropic APIs, built around a dstalk_core.dll plugin host, multi-endpoint routing, and decoupled CLI/GUI/Web frontends.">
|
|
<meta name="theme-color" content="#0b1020">
|
|
<meta property="og:title" content="dstalk — C/C++ AI Coding CLI">
|
|
<meta property="og:description" content="OpenAI-compatible / Anthropic powered, C ABI embeddable. dstalk_core.dll is a plugin host with 10 functional plugins covering AI, endpoint management, networking, sessions, LSP, and tools.">
|
|
<meta property="og:type" content="website">
|
|
<link rel="alternate" hreflang="zh-CN" href="https://dstalk.top/">
|
|
<link rel="alternate" hreflang="en" href="https://dstalk.top/en.html">
|
|
<link rel="icon" href="data:image/svg+xml,%3Csvg%20id%3D%22b8933227-ee10-4b8b-aa3f-4d0252add8f0%22%20data-name%3D%22Layer%201%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20467.49%20156.25%22%3E%3Cdefs%3E%3Cstyle%3E.b2b6d799-07c9-401d-bf7c-05fa2b138761%7Bfill%3A%23036eb8%3B%7D.a1ce0134-56a6-4bb1-8507-28f21bc08e8e%7Bfill%3A%23fff%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cpath%20class%3D%22b2b6d799-07c9-401d-bf7c-05fa2b138761%22%20d%3D%22M71.66%2C440.73S69.51%2C430%2C69.83%2C423.44s1.23-16.87%2C7.9-25.76%2C8.76-10.53%2C15-14.84%2C14.79-8.38%2C23.65-8.86%2C16.53-.14%2C23.22%2C2.3%2C12.77%2C5.54%2C17.88%2C14.77S162%2C406.69%2C162%2C406.69s.72%2C12.93-1.73%2C19.8-3.74%2C7.61-5.61%2C10.53-9.5%2C8.69-10.35%2C10.8-1%2C13.92-3.26%2C13.77-6.87-8.47-10.53-10.07-9.53-.3-14.58-.91a34.86%2C34.86%2C0%2C0%2C1-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%2C37.21%2C0%2C0%2C1-1-7.71%2C23.43%2C23.43%2C0%2C0%2C1%2C.71-7.27c.49-1.9%2C2.34-6.88%2C2.34-6.88.17%2C0%2C3.57-8.11%2C3.24-8.88s-3.81%2C3.1-5.73%2C6.05-4.78%2C7-6%2C10.78-2.54%2C6.74-2.68%2C12%2C0%2C12.58%2C2%2C17.56A41.48%2C41.48%2C0%2C0%2C0%2C86.9%2C454.2a41.46%2C41.46%2C0%2C0%2C0%2C12.34%2C7.95c3.65%2C1.35%2C6.05%2C2.48%2C10.2%2C3.12s5.28.68%2C9%2C1%2C10.56.25%2C10.56.25l12.79%2C13.25a4.08%2C4.08%2C0%2C0%2C0%2C2.86%2C1.5c1.7%2C0%2C2.49-2%2C2.49-2L153.05%2C460s7.18-4.13%2C10.34-7.58%2C5.24-4.95%2C9.17-12.29%2C6.05-19.23%2C6-19.6c.19-.78%2C0-34.45%2C0-34.45l-.35-53.83a23.52%2C23.52%2C0%2C0%2C0-1.89-3.67%2C14.51%2C14.51%2C0%2C0%2C0-4.35-3%2C8.32%2C8.32%2C0%2C0%2C0-6%2C0%2C8.49%2C8.49%2C0%2C0%2C0-3.32%2C2.63%2C45.13%2C45.13%2C0%2C0%2C0-2.15%2C4.2l.27%2C36.93s-2.22-2.91-8.85-5.91a55%2C55%2C0%2C0%2C0-19.51-5.14%2C77.52%2C77.52%2C0%2C0%2C0-22.39.9%2C60.73%2C60.73%2C0%2C0%2C0-14.38%2C4.36%2C69.24%2C69.24%2C0%2C0%2C0-11.38%2C6.76%2C75.69%2C75.69%2C0%2C0%2C0-9.54%2C9.19c-2%2C2.49-5.41%2C6.3-8.46%2C15.93s-2.35%2C18.16-1.76%2C23.81.64%2C5.69%2C2.42%2C11.63A32.73%2C32.73%2C0%2C0%2C0%2C71.66%2C440.73Z%22%20transform%3D%22translate%28-63.94%20-325.04%29%22%2F%3E%3Ccircle%20class%3D%22b2b6d799-07c9-401d-bf7c-05fa2b138761%22%20cx%3D%2245.84%22%20cy%3D%2289.15%22%20r%3D%228.17%22%2F%3E%3Ccircle%20class%3D%22b2b6d799-07c9-401d-bf7c-05fa2b138761%22%20cx%3D%2270.14%22%20cy%3D%2289.15%22%20r%3D%228.17%22%2F%3E%3Cpath%20class%3D%22a1ce0134-56a6-4bb1-8507-28f21bc08e8e%22%20d%3D%22M423.12%2C414.19%22%20transform%3D%22translate%28-63.94%20-325.04%29%22%2F%3E%3Cpath%20class%3D%22b2b6d799-07c9-401d-bf7c-05fa2b138761%22%20d%3D%22M210.43%2C418c0-19.47%2C12.16-31.23%2C24.69-31.23%2C6.57%2C0%2C10.58%2C2.45%2C14.6%2C6.21l-.64-9V363.69h17.64v84.07H252.33l-1.27-5.9h-.44c-4.2%2C4.2-10.09%2C7.34-15.84%2C7.34C220%2C449.2%2C210.43%2C437.45%2C210.43%2C418Zm38.65%2C11.42V405a14.45%2C14.45%2C0%2C0%2C0-9.85-3.76c-5.71%2C0-10.72%2C5.27-10.72%2C16.59%2C0%2C11.69%2C4%2C16.95%2C10.86%2C16.95C243.13%2C434.76%2C246.16%2C433.34%2C249.08%2C429.43Z%22%20transform%3D%22translate%28-63.94%20-325.04%29%22%2F%3E%3Cpath%20class%3D%22b2b6d799-07c9-401d-bf7c-05fa2b138761%22%20d%3D%22M277%2C440.88l7.94-11c5.39%2C4.08%2C10.37%2C6.26%2C15.35%2C6.26%2C5.25%2C0%2C7.52-2%2C7.52-5.12%2C0-3.93-5.9-5.7-12-8.1-7.3-2.83-15.76-7.67-15.76-17.51%2C0-11.08%2C9-18.64%2C22.75-18.64%2C9.12%2C0%2C15.91%2C3.69%2C21%2C7.54l-7.89%2C10.59c-4.24-3.07-8.42-5.08-12.54-5.08-4.56%2C0-6.8%2C1.79-6.8%2C4.76%2C0%2C3.79%2C5.57%2C5.25%2C11.74%2C7.49%2C7.54%2C2.79%2C16%2C7%2C16%2C17.92s-8.5%2C19.2-24.45%2C19.2A38.65%2C38.65%2C0%2C0%2C1%2C277%2C440.88Z%22%20transform%3D%22translate%28-63.94%20-325.04%29%22%2F%3E%3Cpath%20class%3D%22b2b6d799-07c9-401d-bf7c-05fa2b138761%22%20d%3D%22M335.4%2C426.11V402.06h-8.13V388.9l9.12-.68%2C2.06-15.81H353v15.81h14.27v13.84H353V425.9c0%2C6.75%2C3.06%2C9.46%2C7.71%2C9.46a17.85%2C17.85%2C0%2C0%2C0%2C5.66-1.13L369.19%2C447A42.05%2C42.05%2C0%2C0%2C1%2C356%2C449.2C341.25%2C449.2%2C335.4%2C439.91%2C335.4%2C426.11Z%22%20transform%3D%22translate%28-63.94%20-325.04%29%22%2F%3E%3Cpath%20class%3D%22b2b6d799-07c9-401d-bf7c-05fa2b138761%22%20d%3D%22M373.84%2C431.25c0-12.55%2C10-19.34%2C33.52-21.82-.35-5.21-2.95-8.61-9.41-8.61-5%2C0-10%2C2.1-15.75%2C5.38l-6.27-11.58c7.55-4.62%2C16.06-7.84%2C25.42-7.84%2C15.22%2C0%2C23.65%2C8.7%2C23.65%2C26.94v34H410.61l-1.27-6.1h-.44c-5%2C4.4-10.63%2C7.54-17.32%2C7.54C380.73%2C449.2%2C373.84%2C441.27%2C373.84%2C431.25Zm33.52-.79v-10.4c-12.54%2C1.69-16.63%2C5.28-16.63%2C9.78%2C0%2C3.84%2C2.64%2C5.71%2C6.83%2C5.71C401.55%2C435.55%2C404.23%2C433.58%2C407.36%2C430.46Z%22%20transform%3D%22translate%28-63.94%20-325.04%29%22%2F%3E%3Cpath%20class%3D%22b2b6d799-07c9-401d-bf7c-05fa2b138761%22%20d%3D%22M439.81%2C429.26V363.69h17.64V430c0%2C3.78%2C1.75%2C5%2C3.19%2C5a7.68%2C7.68%2C0%2C0%2C0%2C2.16-.24l2.11%2C13a22.9%2C22.9%2C0%2C0%2C1-8.86%2C1.47C444%2C449.2%2C439.81%2C441.3%2C439.81%2C429.26Z%22%20transform%3D%22translate%28-63.94%20-325.04%29%22%2F%3E%3Cpath%20class%3D%22b2b6d799-07c9-401d-bf7c-05fa2b138761%22%20d%3D%22M474.13%2C363.69h17.25v48.16h.44l18.88-23.63h19.15L509%2C412.76l22.43%2C35H512.32l-13.39-23.22-7.55%2C8.56v14.66H474.13Z%22%20transform%3D%22translate%28-63.94%20-325.04%29%22%2F%3E%3C%2Fsvg%3E" type="image/svg+xml">
|
|
<title>dstalk — OpenAI-compatible / Anthropic AI Coding 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:108px;
|
|
height:36px;
|
|
filter:drop-shadow(0 0 22px rgba(88,166,255,.28));
|
|
}
|
|
.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="Main navigation">
|
|
<div class="container nav-inner">
|
|
<a class="brand" href="#top" aria-label="dstalk home"><svg class="brand-mark" aria-hidden="true" focusable="false" id="b8933227-ee10-4b8b-aa3f-4d0252add8f0" data-name="Layer 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></a>
|
|
<div class="nav-links">
|
|
<a href="#features">Features</a>
|
|
<a href="#quickstart">Quick Start</a>
|
|
<a href="#architecture">Architecture</a>
|
|
<a href="#commands">Commands</a>
|
|
<a href="#roadmap">Roadmap</a>
|
|
<a href="#contribute">Contribute</a>
|
|
<a href="index.html" lang="zh-CN">中文</a>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<header id="top" class="container hero">
|
|
<div>
|
|
<div class="eyebrow">dstalk.top is the official website for the dstalk project</div>
|
|
<h1><span>ds</span>talk</h1>
|
|
<p class="lead">An AI coding CLI compatible with OpenAI-style APIs and Anthropic APIs. The core is written in C11 / C++20 and ships dstalk_core.dll as a plugin host that exposes a stable C ABI. Ten functional plugins (AI, endpoint management, networking, LSP, sessions, files, tools, and more) compile to standalone DLLs and plug into the CLI, the SDL3 GUI, the Boost.Beast Web frontend, and any third-party host.</p>
|
|
<div class="actions">
|
|
<a class="btn btn-primary" href="#quickstart">Get Started</a>
|
|
<a class="btn btn-secondary" href="https://git.pulsareon.com/pulsareon/dstalk">View Source</a>
|
|
</div>
|
|
<div class="badges" aria-label="Project tags">
|
|
<span class="badge">v0.1.0</span>
|
|
<span class="badge">C11 / C++20</span>
|
|
<span class="badge">Plugin host + C ABI</span>
|
|
<span class="badge">10 plugins</span>
|
|
<span class="badge">GPL v3.0</span>
|
|
</div>
|
|
<div class="stats" aria-label="Project status">
|
|
<span class="stat"><strong>Core</strong>dstalk_core.dll (plugin host)</span>
|
|
<span class="stat"><strong>Frontends</strong>CLI + SDL3 GUI + Web</span>
|
|
<span class="stat"><strong>Plugins</strong>openai · anthropic · endpoint_mgr · network · lsp · session · context · config · file-io · tools</span>
|
|
</div>
|
|
</div>
|
|
<div class="terminal" aria-label="dstalk command-line example">
|
|
<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/bin/dstalk_cli.exe config.toml
|
|
|
|
dstalk v0.1.0 | OpenAI-compatible / Anthropic | /help for help
|
|
|
|
> Explain the role of dstalk-core
|
|
<span class="dim">thinking...</span>
|
|
AI: dstalk-core is the plugin host. It handles plugin
|
|
loading, service registry, the event bus, and
|
|
configuration. AI, networking, sessions, LSP, and
|
|
file I/O are provided by standalone plugin DLLs;
|
|
frontends only deal with input and rendering.
|
|
|
|
> /file read dstalk-core/include/dstalk/dstalk_host.h
|
|
<span class="dim">--- dstalk-core/include/dstalk/dstalk_host.h ---</span></code></pre>
|
|
</div>
|
|
</header>
|
|
|
|
<main>
|
|
<section id="features" class="container section">
|
|
<div class="section-head">
|
|
<h2>Why rebuild an AI coding assistant in C/C++?</h2>
|
|
<p>dstalk is positioned alongside tools like Claude Code, OpenCode, and KiloCode, but uses a systems-language implementation and a plugin-host architecture to optimize startup time, runtime footprint, embeddability, and long-running terminal workflows.</p>
|
|
</div>
|
|
<div class="cards">
|
|
<article class="card"><div class="icon">C</div><h3>No Node.js runtime</h3><p>The core is built with C11 / C++20 for fast startup and lower memory usage in long-lived terminal sessions.</p></article>
|
|
<article class="card"><div class="icon">ABI</div><h3>Stable C ABI</h3><p>Public host functions such as dstalk_init and dstalk_service_query, plus 9 service vtables (AI, endpoint management, session, HTTP, file I/O, LSP, and more) make it easy to embed from C/C++, Python, Rust, C#, and Go.</p></article>
|
|
<article class="card"><div class="icon">AI</div><h3>Multi-endpoint routing</h3><p>OpenAI-compatible and Anthropic AI plugins ship in the box, while ai_endpoint_mgr manages multiple named endpoints. Frontends route through the active endpoint first, and /status shows sanitized endpoint state.</p></article>
|
|
<article class="card"><div class="icon">CLI</div><h3>CLI, GUI, and Web frontends</h3><p>dstalk-cli is an ANSI terminal UI, dstalk-gui is a cross-platform SDL3 window, and dstalk-web is powered by Boost.Beast + SSE. All three share the same core capabilities.</p></article>
|
|
<article class="card"><div class="icon">PLG</div><h3>Plugin host</h3><p>The core only handles plugin loading, service registry, event bus, and configuration. AI, endpoint management, networking, LSP, and sessions are independent DLLs you can replace or extend.</p></article>
|
|
<article class="card"><div class="icon">OSS</div><h3>Open source and hackable</h3><p>Released under GNU GPL v3.0, with example plugins, unit tests, and tutorial docs. Suitable for learning, customization, and local workflow extensions.</p></article>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="quickstart" class="container section">
|
|
<div class="split">
|
|
<div class="section-head">
|
|
<h2>Quick Start</h2>
|
|
<p>dstalk provides an automated toolchain script and a one-command build script. Keep API keys in local config.toml or a secure environment, and never commit them to the repository.</p>
|
|
<div class="steps">
|
|
<div class="step"><div class="step-num">1</div><div><h3>Install the local toolchain</h3><p>Run setup.bat inside the tools directory to download CMake, Ninja, LLVM/Clang, and Conan2.</p></div></div>
|
|
<div class="step"><div class="step-num">2</div><div><h3>Build dstalk</h3><p>Run build.bat to install Conan dependencies, configure CMake, and build with Ninja.</p></div></div>
|
|
<div class="step"><div class="step-num">3</div><div><h3>Start the CLI</h3><p>Run build/bin/dstalk_cli.exe with config.toml, or let it use the default config lookup.</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"># Install toolchain</span>
|
|
cd tools
|
|
setup.bat
|
|
|
|
<span class="cmd"># Return to repo root and build</span>
|
|
cd ..
|
|
build.bat
|
|
|
|
<span class="cmd"># Legacy single-provider mode</span>
|
|
ai.provider = "ai_openai"
|
|
api.base_url = "https://api.openai.com/v1"
|
|
api.api_key = "sk-xxxxxxxx"
|
|
api.model = "gpt-4o"
|
|
|
|
<span class="cmd"># Multi-endpoint mode</span>
|
|
endpoints.names = "openai_main, anthropic_alt"
|
|
endpoints.active = "openai_main"
|
|
endpoint.openai_main.provider = "ai_openai"
|
|
endpoint.openai_main.api_key = "sk-xxxxxxxx"
|
|
endpoint.openai_main.model = "gpt-4o"
|
|
endpoint.anthropic_alt.provider = "ai_anthropic"
|
|
endpoint.anthropic_alt.api_key = "sk-ant-xxxx"
|
|
endpoint.anthropic_alt.model = "claude-sonnet"
|
|
|
|
<span class="cmd"># Run CLI</span>
|
|
build/bin/dstalk_cli.exe config.toml</code></pre>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="architecture" class="container section">
|
|
<div class="section-head">
|
|
<h2>Plugin host + decoupled multi-frontend architecture</h2>
|
|
<p>dstalk_core.dll acts as a plugin host responsible for plugin loading, service registry, event bus, and configuration. Ten functional plugins — AI, endpoint management, networking, LSP, sessions, files, tools, and more — compile to standalone DLLs, while frontends reach the core only through the C ABI. The GUI and Web frontends are opt-in via DSTALK_BUILD_GUI / DSTALK_BUILD_WEB.</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) dstalk-gui (SDL3) dstalk-web (SSE) │
|
|
└───────────────────────┬─────────────────────────────┘
|
|
│ C ABI
|
|
┌───────────────────────▼─────────────────────────────┐
|
|
│ dstalk_core.dll — Plugin Host │
|
|
│ Plugin Loader · Service Registry · Event Bus · │
|
|
│ Config Manager │
|
|
├───────────────┬───────────────┬─────────────────────┤
|
|
│ openai (ai) │ anthropic (ai)│ endpoint_mgr │
|
|
│ network(http)│ lsp (client) │ session │
|
|
│ context │ config │ file-io · tools │
|
|
└───────────────┴───────────────┴─────────────────────┘
|
|
Boost.JSON · Boost.Asio / Beast · OpenSSL TLS</code></pre>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="container section">
|
|
<div class="section-head">
|
|
<h2>Tech stack and project status</h2>
|
|
<p>The following is based on dstalk's CMake files, Conan configuration, and public API header.</p>
|
|
</div>
|
|
<div class="panel table-wrap">
|
|
<table>
|
|
<tr><th>Module</th><th>Current technology</th><th>Status</th></tr>
|
|
<tr><td>Core library</td><td>C11 / C++20, dstalk_core.dll, plugin host, public C ABI</td><td><span class="ok">Enabled</span></td></tr>
|
|
<tr><td>CLI frontend</td><td>ANSI terminal UI using dstalk/dstalk_host.h</td><td><span class="ok">Enabled</span></td></tr>
|
|
<tr><td>GUI frontend</td><td>SDL3 graphical frontend, enabled via CMake option DSTALK_BUILD_GUI</td><td><span class="todo">Optional build</span></td></tr>
|
|
<tr><td>Web frontend</td><td>Boost.Beast HTTP + SSE streaming frontend, enabled via CMake option DSTALK_BUILD_WEB</td><td><span class="todo">Optional build</span></td></tr>
|
|
<tr><td>Frontend common</td><td>dstalk_frontend_common reuses config discovery, initialization, and service-query logic</td><td><span class="ok">Enabled</span></td></tr>
|
|
<tr><td>Plugins</td><td>10 functional plugins (openai · anthropic · endpoint_mgr · network · lsp · session · context · config · file-io · tools), standalone DLLs</td><td><span class="ok">Enabled</span></td></tr>
|
|
<tr><td>Tests</td><td>11 test targets covering plugin host, event bus, service registry, plugin loader, endpoint manager, and AI plugins, integrated with CTest</td><td><span class="ok">Enabled</span></td></tr>
|
|
<tr><td>Docs</td><td>docs/tutorial, docs/reference (commands, config, plugin-abi), docs/explanation (architecture, plugin-lifecycle, security-logging)</td><td><span class="ok">Published</span></td></tr>
|
|
<tr><td>Examples</td><td>examples/example_plugin shows a plugin template</td><td><span class="ok">Available</span></td></tr>
|
|
<tr><td>Dependencies</td><td>Conan2, boost/1.86.0, openssl/3.4.1</td><td><span class="ok">Configured</span></td></tr>
|
|
<tr><td>Build system</td><td>CMake 3.21+, Ninja, LLVM/Clang, CMakePresets</td><td><span class="ok">Configured</span></td></tr>
|
|
<tr><td>License</td><td>GNU GPL v3.0</td><td><span class="ok">Confirmed</span></td></tr>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="commands" class="container section">
|
|
<div class="section-head">
|
|
<h2>Common CLI commands</h2>
|
|
<p>In addition to natural-language prompts, dstalk-cli provides commands for files, models, and session management.</p>
|
|
</div>
|
|
<div class="panel table-wrap">
|
|
<table>
|
|
<tr><th>Commands</th><th>Description</th><th>Example</th></tr>
|
|
<tr><td>/help / /h</td><td>Show the command list</td><td>/help</td></tr>
|
|
<tr><td>/quit / /q</td><td>Quit the program</td><td>/quit</td></tr>
|
|
<tr><td>/clear</td><td>Clear the current conversation context</td><td>/clear</td></tr>
|
|
<tr><td>/context</td><td>Show the current token count and message count</td><td>/context</td></tr>
|
|
<tr><td>/status</td><td>Show sanitized runtime status without printing the full API key</td><td>/status</td></tr>
|
|
<tr><td>/model <name></td><td>Switch the current model; in multi-endpoint mode it updates the active endpoint</td><td>/model gpt-4o</td></tr>
|
|
<tr><td>/file list [path]</td><td>List directory contents; omit path to list the current directory</td><td>/file list src/</td></tr>
|
|
<tr><td>/file show <path></td><td>Show file content</td><td>/file show README.md</td></tr>
|
|
<tr><td>/file read <path></td><td>Read file content (same as /file show)</td><td>/file read config.toml</td></tr>
|
|
<tr><td>/file write <path> <content></td><td>Write content to a file</td><td>/file write note.txt hello</td></tr>
|
|
<tr><td>/save <path> / /load <path></td><td>Save or restore a session</td><td>/save session.json</td></tr>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="api" class="container section">
|
|
<div class="section-head">
|
|
<h2>Public C API</h2>
|
|
<p>dstalk exposes its capabilities through four public headers: dstalk_host.h manages the host lifecycle and plugins, dstalk_services.h defines 9 service vtables including ai_endpoint_mgr, dstalk_lsp.h provides a standalone LSP client, and dstalk_types.h shares message and event types. Frontends call dstalk_service_query() to obtain a service pointer, then invoke capabilities through function pointers.</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_host.h — host API</span></div>
|
|
<pre><code><span class="dim">// Lifecycle</span>
|
|
int dstalk_init(const char* config_path);
|
|
void dstalk_shutdown(void);
|
|
|
|
<span class="dim">// Plugin management</span>
|
|
int dstalk_plugin_load(const char* path);
|
|
int dstalk_plugin_unload(int plugin_id);
|
|
int dstalk_plugin_list(char** output_json);
|
|
void*dstalk_service_query(const char* name, int min_version);
|
|
|
|
<span class="dim">// Event system</span>
|
|
int dstalk_event_subscribe(int type, dstalk_event_handler_fn fn, void* ud);
|
|
int dstalk_event_emit(int type, const void* data);
|
|
void dstalk_event_unsubscribe(int sub_id);
|
|
|
|
<span class="dim">// Config / memory / diagnostics</span>
|
|
const char* dstalk_config_get(const char* key);
|
|
int dstalk_config_set(const char* key, const char* value);
|
|
void*dstalk_alloc(size_t size);
|
|
void dstalk_free(void* ptr);
|
|
char*dstalk_strdup(const char* s);
|
|
void dstalk_set_diag_callback(dstalk_diag_cb cb);</code></pre>
|
|
</div>
|
|
<div class="terminal" style="margin-top:16px">
|
|
<div class="terminal-top"><span class="dot"></span><span class="dot"></span><span class="dot"></span><span class="terminal-title">dstalk_services.h — service vtable example</span></div>
|
|
<pre><code><span class="dim">// AI service: dstalk_service_query("ai_openai", 1)</span>
|
|
typedef struct {
|
|
int (*configure)(const char* provider, const char* base_url,
|
|
const char* api_key, const char* model,
|
|
int max_tokens, double temperature);
|
|
dstalk_chat_result_t (*chat)(const dstalk_message_t* history,
|
|
int len, const char* input, const char* tools_json);
|
|
dstalk_chat_result_t (*chat_stream)(...);
|
|
void (*free_result)(dstalk_chat_result_t* result);
|
|
} dstalk_ai_service_t;
|
|
|
|
<span class="dim">// endpoint manager: dstalk_service_query("ai_endpoint_mgr", 1)</span>
|
|
<span class="dim">// Same pattern: dstalk_ai_endpoint_mgr_t, dstalk_session_service_t,</span>
|
|
<span class="dim">// dstalk_http_service_t, dstalk_file_io_service_t,</span>
|
|
<span class="dim">// dstalk_config_service_t, dstalk_tools_service_t, dstalk_lsp_service_t</span></code></pre>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="roadmap" class="container section">
|
|
<div class="section-head">
|
|
<h2>Roadmap</h2>
|
|
<p>The plugin host, CLI, SDL3 GUI, Boost.Beast Web frontend, ten core plugins, tests, and documentation are already in place. Future work focuses on deeper capabilities and ecosystem expansion.</p>
|
|
</div>
|
|
<div class="panel table-wrap">
|
|
<table>
|
|
<tr><th>Phase</th><th>Scope</th><th>Status</th></tr>
|
|
<tr><td>Skeleton</td><td>Project skeleton, CMake/Ninja build, Conan dependencies, DLL exports, frontend main loop</td><td><span class="ok">Done</span></td></tr>
|
|
<tr><td>Plugin host</td><td>Plugin loader, service registry, event bus, configuration; 10 core plugins (openai · anthropic · endpoint_mgr · network · lsp · session · context · config · file-io · tools)</td><td><span class="ok">Done</span></td></tr>
|
|
<tr><td>Chat capability</td><td>HTTPS networking, OpenAI-compatible / Anthropic API adapters, streaming output, multi-turn sessions, tool calling, and file I/O</td><td><span class="ok">Available</span></td></tr>
|
|
<tr><td>Multi-endpoint</td><td>ai_endpoint_mgr manages multiple named AI endpoints; frontends route through the active endpoint first and /status returns sanitized state</td><td><span class="ok">Available</span></td></tr>
|
|
<tr><td>GUI / Web frontends</td><td>SDL3 graphical window and Boost.Beast Web + SSE, optional frontends sharing the same plugin host as the CLI</td><td><span class="todo">Optional build</span></td></tr>
|
|
<tr><td>Next phase</td><td>Deeper LSP integration, third-party plugin SDK, cross-platform distribution, ongoing documentation</td><td><span class="todo">Planned</span></td></tr>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="contribute" class="container section">
|
|
<div class="section-head">
|
|
<h2>Open source contributors welcome</h2>
|
|
<p>dstalk is an open project. Developers interested in C/C++, terminal UX, AI API adapters, GUI, documentation, and testing are welcome to participate.</p>
|
|
</div>
|
|
<div class="cards">
|
|
<article class="card"><div class="icon">PR</div><h3>Improve the codebase</h3><p>The core, CLI, SDL3 GUI, Web frontend, and 10 plugins (AI, endpoint management, networking, LSP, sessions, files, tools, and more) all welcome patches; build scripts and cross-platform compatibility have headroom too.</p></article>
|
|
<article class="card"><div class="icon">PLG</div><h3>Build new plugins</h3><p>Use examples/example_plugin and docs/reference/plugin-abi.md as a starting point — register new services through the C ABI to bring your own models, tools, or data sources into dstalk.</p></article>
|
|
<article class="card"><div class="icon">DOC</div><h3>Improve docs and tests</h3><p>docs/tutorial and docs/reference are taking shape; help expand tutorials, command references, plugin-ABI notes, and the coverage of host_api_test / smoke_test.</p></article>
|
|
</div>
|
|
<div class="actions">
|
|
<a class="btn btn-primary" href="https://git.pulsareon.com/pulsareon/dstalk">Go to source repository</a>
|
|
<a class="btn btn-secondary" href="https://git.pulsareon.com/pulsareon/dstalk/issues">Open an Issue</a>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="container cta">
|
|
<h2>Start in the terminal, embed dstalk everywhere</h2>
|
|
<p>dstalk is more than a CLI. It is a local AI coding core that can be reused by multiple frontends. dstalk.top will keep tracking project progress, build instructions, and available capabilities.</p>
|
|
<div class="actions" style="justify-content:center">
|
|
<a class="btn btn-primary" href="#quickstart">View Quick Start</a>
|
|
<a class="btn btn-secondary" href="https://git.pulsareon.com/pulsareon/dstalk">Visit Source Repository</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">Back to top</a>
|
|
<a href="https://dstalk.top">dstalk.top</a>
|
|
<a href="https://git.pulsareon.com/pulsareon/dstalk">Source</a>
|
|
</div>
|
|
</footer>
|
|
</body>
|
|
</html>
|