Initial dstalk project: core DLL + CLI + BearSSL TLS
- Core DLL: AI API client (DeepSeek/OpenAI compatible), HTTP(S) via Boost.Beast - BearSSL vendored as TLS backend (MIT license, replacing OpenSSL) - CLI frontend with ANSI colors, /help /model /file /save /load commands - WinHTTP alternative HTTP client for Windows - GPLv3 license with linking exception - Build: CMake + Ninja + Clang, dependencies via Conan2 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
312
README.md
Normal file
312
README.md
Normal file
@@ -0,0 +1,312 @@
|
||||
# dstalk
|
||||
|
||||
> 基于 DeepSeek V4 大模型、兼容 OpenAI / Anthropic API 的 AI 编程 CLI
|
||||
>
|
||||
> 官网: [dstalk.top](https://dstalk.top)
|
||||
|
||||
---
|
||||
|
||||
## 这是什么?
|
||||
|
||||
dstalk 是一款 AI 编程助手命令行工具。通过调用 DeepSeek V4 大模型(兼容 OpenAI 和 Anthropic API),在终端里用自然语言完成代码编写、重构、调试和文件操作。功能对标 Claude Code、OpenCode、KiloCode。
|
||||
|
||||
核心设计为 **CDLL + 多前端解耦**:
|
||||
|
||||
```text
|
||||
┌───────────────────────────────────────────────────────────┐
|
||||
│ 前端层 (Frontends) │
|
||||
│ ┌──────────────────┐ ┌──────────────────────────┐ │
|
||||
│ │ dstalk-cli │ │ dstalk-gui │ │
|
||||
│ │ ANSI 终端 UI │ │ SDL3 图形化 UI │ │
|
||||
│ │ exe → dstalk.dll│ │ exe → dstalk.dll │ │
|
||||
│ └────────┬─────────┘ └─────────────┬─────────────┘ │
|
||||
│ │ │ │
|
||||
│ └──────────────┬───────────────┘ │
|
||||
│ │ C ABI │
|
||||
└──────────────────────────┼─────────────────────────────────┘
|
||||
│
|
||||
┌──────────────────────────▼─────────────────────────────────┐
|
||||
│ 核心层 (dstalk-core.dll) │
|
||||
│ ┌────────────┐ ┌────────────┐ ┌──────────────────────┐ │
|
||||
│ │ 网络通讯 │ │ 文件读写 │ │ AI 接口适配 │ │
|
||||
│ │ Boost.Asio │ │ C++ 标准库 │ │ DeepSeek / OpenAI │ │
|
||||
│ │ + OpenSSL │ │ │ │ / Anthropic │ │
|
||||
│ └────────────┘ └────────────┘ └──────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
- **`dstalk-core`** —— C11/C++20 高性能核心 DLL,负责网络通信、AI 接口调用、文件 I/O。
|
||||
- **`dstalk-cli`** —— 命令行前端,ANSI 转义码实现,调用 `dstalk.dll`。
|
||||
- **`dstalk-gui`** —— 图形化前端,SDL3 跨平台窗口,调用 `dstalk.dll`。
|
||||
|
||||
核心与界面完全解耦,可以轻松编写自己的前端,或把 AI 能力嵌入到现有工具中。
|
||||
|
||||
---
|
||||
|
||||
## 为什么用 C/C++ 实现?
|
||||
|
||||
| 维度 | dstalk (C/C++) | 典型竞品 (TypeScript/Node.js) |
|
||||
|------|----------------|------------------------------|
|
||||
| 启动速度 | 毫秒级 | 秒级 |
|
||||
| 内存占用 | 数十 MB | 数百 MB 起 |
|
||||
| 运行时依赖 | 零(单文件 DLL) | 需要 Node.js 运行时 |
|
||||
| 嵌入能力 | 任意语言通过 C ABI 调用 | 困难 |
|
||||
| GC 影响 | 无 GC 停顿 | 可能内存膨胀 |
|
||||
|
||||
AI 编程助手需要长期驻留、频繁交互,性能特征值得用系统级语言重新思考。
|
||||
|
||||
---
|
||||
|
||||
## 与竞品的差异化
|
||||
|
||||
| 特性 | dstalk | Claude Code | OpenCode | KiloCode |
|
||||
|------|--------|-------------|----------|----------|
|
||||
| 实现语言 | C11 / C++20 | TypeScript | TypeScript | TypeScript |
|
||||
| 运行时 | 零依赖 CDLL | Node.js | Node.js | Node.js |
|
||||
| 前端形态 | CLI + GUI 双前端 | 终端集成 | VS Code 插件 | VS Code 插件 |
|
||||
| 模型 | DeepSeek / OpenAI / Anthropic | Claude | 多模型 | 多模型 |
|
||||
| 嵌入第三方 | C ABI,极易 | 困难 | 困难 | 困难 |
|
||||
|
||||
### DLL 架构优势
|
||||
|
||||
- **语言无关** —— C ABI 意味着 C/C++、Python、Rust、C#、Go 都能直接调用
|
||||
- **进程内集成** —— 无需 HTTP 通信、零 IPC 开销,直接函数调用
|
||||
- **前端零状态** —— CLI 和 GUI 不持有业务逻辑,只负责渲染和输入
|
||||
|
||||
---
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 安装工具链(全自动,存入 tools\,不依赖系统环境)
|
||||
|
||||
```bash
|
||||
cd tools
|
||||
setup.bat # 下载 CMake + Ninja + LLVM/Clang + Conan2 到当前目录
|
||||
```
|
||||
|
||||
> 网络不畅时可手动下载放入对应目录:[Conan2](https://conan.org.cn/downloads) | [Ninja](https://github.com/ninja-build/ninja/releases) | [CMake](https://cmake.org/download/) | [LLVM](https://github.com/llvm/llvm-project/releases)
|
||||
>
|
||||
> 目录结构要求: `tools/cmake/bin/cmake.exe` / `tools/ninja/ninja.exe` / `tools/llvm/bin/clang.exe` / `tools/conan2/conan.exe`
|
||||
|
||||
### 2. 编译
|
||||
|
||||
```bash
|
||||
build.bat # 一键: Conan拉依赖 → CMake配置 → Ninja编译
|
||||
```
|
||||
|
||||
### 3. 运行
|
||||
|
||||
```bash
|
||||
build/dstalk-cli/dstalk-cli.exe # 命令行模式
|
||||
build/dstalk-gui/dstalk-gui.exe # 图形模式
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 使用示例
|
||||
|
||||
```text
|
||||
$ dstalk-cli
|
||||
|
||||
dstalk v0.1.0 | 模型: deepseek-v4 | /help 查看帮助
|
||||
|
||||
> 帮我写一个读取 CSV 并计算平均值的 C 程序
|
||||
|
||||
[dstalk] 正在思考...
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
fprintf(stderr, "用法: %s <csv文件>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
FILE *fp = fopen(argv[1], "r");
|
||||
if (!fp) { perror("fopen"); return 1; }
|
||||
|
||||
double sum = 0.0;
|
||||
int count = 0;
|
||||
char line[1024];
|
||||
while (fgets(line, sizeof(line), fp)) {
|
||||
sum += atof(line);
|
||||
count++;
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
printf("平均值: %.2f (共 %d 行)\n", sum / count, count);
|
||||
return 0;
|
||||
}
|
||||
|
||||
已写入 csv_avg.c。需要我帮你编译测试吗?
|
||||
|
||||
> 把这段代码改成支持表头的
|
||||
|
||||
[dstalk] 已更新 csv_avg.c——跳过第一行表头,增加列选择功能。
|
||||
|
||||
> /edit csv_avg.c:15 把 atof 改成 strtod
|
||||
|
||||
[dstalk] 已应用修改。
|
||||
```
|
||||
|
||||
### 常用命令
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `/file list` | 列出当前会话关联的文件 |
|
||||
| `/file show <path>` | 查看文件内容(语法高亮) |
|
||||
| `/edit <path>:<line> <描述>` | 让 AI 修改指定位置 |
|
||||
| `/model` | 切换 AI 模型 |
|
||||
| `/clear` | 清空会话上下文 |
|
||||
| `/help` | 显示帮助 |
|
||||
|
||||
---
|
||||
|
||||
## 工程结构
|
||||
|
||||
```text
|
||||
dstalk2026/
|
||||
├── deps/
|
||||
│ └── conanfile.txt # Conan2 依赖声明
|
||||
├── dstalk-core/ # 核心 DLL
|
||||
│ ├── include/dstalk/
|
||||
│ │ └── dstalk_api.h # 公开 C API 头文件
|
||||
│ ├── src/
|
||||
│ │ ├── api.cpp # API 实现
|
||||
│ │ ├── net/ # 网络通信 (HTTP/HTTPS)
|
||||
│ │ ├── ai/ # AI 接口适配
|
||||
│ │ └── file/ # 文件读写
|
||||
│ └── CMakeLists.txt
|
||||
├── dstalk-cli/ # 命令行前端 (ANSI)
|
||||
│ ├── src/main.cpp
|
||||
│ └── CMakeLists.txt
|
||||
├── dstalk-gui/ # 图形化前端 (SDL3)
|
||||
│ ├── src/main.cpp
|
||||
│ └── CMakeLists.txt
|
||||
├── tests/ # 单元测试
|
||||
│ └── CMakeLists.txt
|
||||
├── CMakeLists.txt # 根 CMake
|
||||
└── README.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 公开 API
|
||||
|
||||
头文件: [dstalk-core/include/dstalk/dstalk_api.h](dstalk-core/include/dstalk/dstalk_api.h)
|
||||
|
||||
```c
|
||||
/* 初始化与销毁 */
|
||||
int dstalk_init(const char* config_path);
|
||||
void dstalk_destroy(void);
|
||||
|
||||
/* AI 对话 */
|
||||
int dstalk_chat(const char* input, char** output);
|
||||
void dstalk_free_string(char* str);
|
||||
|
||||
/* 文件操作 */
|
||||
int dstalk_file_read(const char* path, char** content);
|
||||
int dstalk_file_write(const char* path, const char* content);
|
||||
```
|
||||
|
||||
**调用约定:**
|
||||
|
||||
- 所有字符串均为 UTF-8 编码
|
||||
- `dstalk_chat` / `dstalk_file_read` 分配的内存由调用方通过 `dstalk_free_string` 释放
|
||||
- 返回 `0` 成功,负数表示错误码
|
||||
|
||||
**跨语言调用示例:**
|
||||
|
||||
```c
|
||||
#include "dstalk/dstalk_api.h"
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void) {
|
||||
if (dstalk_init("config.json") != 0) {
|
||||
fprintf(stderr, "初始化失败\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
char* reply = NULL;
|
||||
if (dstalk_chat("解释这段代码", &reply) == 0) {
|
||||
printf("AI: %s\n", reply);
|
||||
dstalk_free_string(reply);
|
||||
}
|
||||
|
||||
dstalk_destroy();
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## FAQ
|
||||
|
||||
**Q: 为什么不用 Rust?**
|
||||
A: 团队对 C/C++ 生态更熟悉,C++20 的现代特性已能让我们写出安全高效的代码。且 CDLL 需要稳定的 C ABI,C/C++ 最直接。
|
||||
|
||||
**Q: 支持哪些模型?**
|
||||
A: 主要支持 DeepSeek V4,同时兼容 OpenAI GPT 系列和 Anthropic Claude 系列的 API。通过配置文件切换 API 基地址和密钥即可。
|
||||
|
||||
**Q: 为什么同时做 CLI 和 GUI?**
|
||||
A: CLI 适合终端/SSH/CI 环境,GUI 适合需要富文本和鼠标交互的场景。两者共享同一核心 DLL,功能一致。
|
||||
|
||||
**Q: 如何配置 API Key?**
|
||||
A: 首次运行提示输入,或手动创建 `~/.config/dstalk/config.toml`:
|
||||
|
||||
```toml
|
||||
[api]
|
||||
provider = "deepseek"
|
||||
base_url = "https://api.deepseek.com/v1"
|
||||
api_key = "sk-xxxxxxxx"
|
||||
model = "deepseek-v4"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 路线图
|
||||
|
||||
| 阶段 | 内容 |
|
||||
|------|------|
|
||||
| **Phase 1** (当前) | 项目骨架、CMake 构建、DLL 导出、前端主循环 |
|
||||
| **Phase 2** | HTTPS 网络层、DeepSeek API 对接、基本对话 |
|
||||
| **Phase 3** | 流式输出、多轮会话、文件读写工具、CLI 体验对齐 |
|
||||
| **Phase 4** | SDL3 GUI 完善、插件系统、LSP 集成 |
|
||||
|
||||
---
|
||||
|
||||
## 贡献指南
|
||||
|
||||
1. Fork 仓库并克隆到本地
|
||||
2. 创建分支: `git checkout -b feature/功能名`
|
||||
3. 编码: C 代码 K&R 风格,C++ 代码 LLVM 风格
|
||||
4. 确保 `cmake --build build` 通过
|
||||
5. 提交 PR,描述改动内容和动机
|
||||
|
||||
### 代码规范
|
||||
|
||||
- C: C11 标准,头文件 `#pragma once`
|
||||
- C++: C++20 标准,优先标准库,必要时引入 Boost
|
||||
- 内存: C++ 优先 RAII;C 代码显式管理
|
||||
- 对外接口: `extern "C"` 纯 C 函数,不抛异常
|
||||
|
||||
---
|
||||
|
||||
## 技术风险与对策
|
||||
|
||||
| 风险 | 对策 |
|
||||
|------|------|
|
||||
| C++ 开发效率低于脚本语言 | Boost 库弥补;核心 API 稳定后开发速度不会慢于竞品 |
|
||||
| OpenSSL 跨版本兼容性 | Conan2 锁定版本,消除环境差异 |
|
||||
| SDL3 仍在迭代 | 锁定具体版本 (3.2.10),升级前充分测试 |
|
||||
| AI API 协议变更 | 适配层独立模块,变更时只改一处 |
|
||||
|
||||
---
|
||||
|
||||
## 许可证
|
||||
|
||||
MIT License. Copyright (c) 2026 dstalk contributors.
|
||||
|
||||
---
|
||||
|
||||
[dstalk.top](https://dstalk.top) | [GitHub](https://github.com/dstalk/dstalk) | [Issue 反馈](https://github.com/dstalk/dstalk/issues)
|
||||
Reference in New Issue
Block a user