free-code-dotnet/docs/总体概述与技术选型/总体概述与技术选型.md
应文浩wenhao.ying@xiaobao100.com e25ac591a7 init easy-code
2026-04-06 07:24:24 +08:00

253 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 总体概述与技术选型
> **文档版本**: 1.0
> **日期**: 2026-04-05
> **所属部分**: 第一部分
> **原始设计来源**: `DESIGN-NET10.md` 第一部分(第 1-4 节及附录)
---
## 目录
- [1. 项目概述](#1-项目概述)
- [2. 技术栈映射](#2-技术栈映射)
- [3. 顶层架构设计](#3-顶层架构设计)
- [4. 解决方案结构](#4-解决方案结构)
- [5. 关键设计决策](#5-关键设计决策)
- [模块覆盖对照表](#模块覆盖对照表)
- [参考文档](#参考文档)
---
## 1. 项目概述
free-code 是 Anthropic Claude Code CLI 的社区 fork一个终端原生 AI 编码代理。本次重写目标是将整个项目从 TypeScript/Bun/React+Ink 技术栈完整迁移至 .NET 10同时保持 100% 功能对等。
**原始版本规模**: v2.1.87,包含 200+ 个 TS/TSX 源文件、50+ 个 Agent 工具、70+ 个 Slash 命令、5 个 LLM 提供商接入。
### 核心功能清单
- **交互式 REPL**: 终端 AI 对话界面,流式响应、工具调用可视化、权限审批
- **50+ Agent 工具**: 文件读写编辑、Bash 执行、代码搜索、Web 访问、子代理生成
- **70+ Slash 命令**: 配置、会话管理、OAuth、插件、主题等
- **5 个 LLM 提供商**: Anthropic、OpenAI Codex、AWS Bedrock、Google Vertex AI、Anthropic Foundry
- **MCP/LSP 协议**: 外部工具集成 + 语言服务器
- **IDE 桥接**: VS Code/JetBrains 远程会话控制
- **技能/插件系统**: 可扩展 prompt 模板 + 功能包
- **后台任务、会话记忆、语音输入、远程会话、同伴系统**
### 重写目标
| 目标 | 描述 |
|------|------|
| 功能对等 | 100% 覆盖所有功能 |
| 性能提升 | .NET 10 AOT 编译,启动速度与内存双优化 |
| 类型安全 | C# 13 强类型替代 TypeScript 运行时校验 |
| 原生集成 | 更深度的 OS 集成(进程、文件系统、沙箱) |
| 可维护性 | 清晰模块边界、DI、接口驱动设计 |
> .NET 10 平台特性详见: [./reference/.NET-10-平台介绍.md](reference/.NET-10-平台介绍.md)
---
## 2. 技术栈映射
将 TypeScript 生态的每个技术点一一对应至 .NET 10 生态选型原则是成熟度优先、官方方案优先、AOT 兼容性优先。
| 层级 | 原始 (TS/Bun) | .NET 10 替代 | 理由 |
|------|-------------|-------------|------|
| 运行时 | Bun >= 1.3.11 | .NET 10 + AOT | 单一二进制,跨平台 |
| 语言 | TypeScript 6 ESM | C# 13 | record types, pattern matching |
| 终端 UI | React 19 + Ink 6 | **Terminal.Gui v2** | 唯一成熟 .NET TUI组件模型接近 React |
| 输出渲染 | Ink 内置 | **Spectre.Console** | 表格/面板/进度条/富文本 |
| CLI 解析 | Commander.js | **System.CommandLine v2** | 官方框架,子命令/选项/补全 |
| Schema 校验 | Zod v4 | **FluentValidation** + **JsonSchema.Net** | POCO 校验 + JSON Schema |
| 代码搜索 | ripgrep (bundled) | ripgrep via Process wrapper | 保持 ripgrep 性能 |
| LSP 客户端 | vscode-languageserver-protocol | **OmniSharp.Extensions.LanguageServer** | 最成熟 .NET LSP 库 |
| MCP 协议 | @modelcontextprotocol/sdk | **自研 MCP SDK** | 社区无成熟方案 |
| HTTP | Bun fetch | **HttpClient + Refit** | 强类型 REST流式支持 |
| OAuth | 自定义 client | **MSAL.NET + IdentityModel.OidcClient** | 成熟 OAuth/OIDC |
| WebSocket | ws (npm) | **System.Net.WebSockets + SignalR** | 内建 + 高层抽象 |
| 进程管理 | Bun spawn | **System.Diagnostics.Process** | 内建跨平台 |
| JSON | JSON.parse/stringify | **System.Text.Json** | 高性能 AOT 友好 |
| 后台任务 | 自定义 | **BackgroundService + Channels** | .NET 标准模式 |
| 插件加载 | 动态 import() | **AssemblyLoadContext** | 运行时程序集隔离 |
| DI | 无 | **Microsoft.Extensions.DependencyInjection** | 标准 DI |
| 日志 | console | **Microsoft.Extensions.Logging** | 结构化日志 |
> 每个映射条目的详细说明,以及完整 NuGet 包版本清单,见: [./reference/技术栈映射说明.md](reference/技术栈映射说明.md)
---
## 3. 顶层架构设计
系统分五层,从下往上依次为基础层、基础设施层、核心服务层、应用层、表现层。
```
┌─────────────────────────────────────────────────────────────────┐
│ Presentation Layer │
│ Terminal.Gui v2 (REPL) │ System.CommandLine (CLI) │
├─────────────────────────────────────────────────────────────────┤
│ Application Layer │
│ REPL Controller │ Command Dispatcher │ QueryEngine │
├─────────────────────────────────────────────────────────────────┤
│ Core Services Layer │
│ ToolSystem(50+) │ PermissionEngine │ FeatureFlags │
│ AgentSpawner │ Memory/Context │ PromptBuilder │
├─────────────────────────────────────────────────────────────────┤
│ Infrastructure Layer │
│ ApiProviderRouter │ McpClientManager │ LspClientManager │
│ OAuthService │ BackgroundTasks │ IDE Bridge │
│ SkillLoader │ PluginLoader │ RemoteSessions │
│ RateLimitService │ NotificationSvc │ VoiceService │
├─────────────────────────────────────────────────────────────────┤
│ Foundation Layer │
│ AppState Store │ Config System │ Logging │ DI Container │
└─────────────────────────────────────────────────────────────────┘
```
**核心数据流**: 用户输入 → CLI/REPL → QueryEngine → PromptBuilder → ApiProvider → LLM 响应 → ToolUse 循环 → 渲染输出
每一层仅依赖其下层,不允许跨层向上依赖。基础设施层中的 MCP SDK 是自研实现,因为社区目前没有成熟的 .NET 方案,详见: [./reference/mcp-sdk-implement.md](reference/mcp-sdk-implement.md)
---
## 4. 解决方案结构
整个项目组织为一个 .sln 文件管理 17 个 C# 项目,加上 9 个测试项目。
```
FreeCode.sln
├── src/
│ ├── FreeCode/ # 主可执行 (Console App, AOT)
│ ├── FreeCode.Core/ # 核心接口 + 模型 (25+ 接口, 20+ 模型)
│ ├── FreeCode.Engine/ # QueryEngine + PromptBuilder
│ ├── FreeCode.Tools/ # 50+ Agent 工具
│ │ ├── FileSystem/ (Read, Edit, Write, Glob, Grep, NotebookEdit)
│ │ ├── Shell/ (Bash, PowerShell)
│ │ ├── Agent/ (Agent, Skill, Task* tools)
│ │ ├── Web/ (WebFetch, WebSearch)
│ │ ├── Mcp/ (ListMcpResources, ReadMcpResource, ToolSearch)
│ │ ├── UserInteraction/ (AskUserQuestion, Brief)
│ │ ├── PlanMode/ (EnterPlan, ExitPlan)
│ │ ├── AgentSwarms/ (SendMessage, TeamCreate, TeamDelete)
│ │ └── Worktree/ (EnterWorktree, ExitWorktree)
│ ├── FreeCode.Commands/ # 70+ Slash 命令
│ ├── FreeCode.ApiProviders/ # 5 LLM 提供商
│ ├── FreeCode.Mcp/ # MCP 协议 (Transport + Protocol + ToolWrapper)
│ ├── FreeCode.Lsp/ # LSP 集成
│ ├── FreeCode.Bridge/ # IDE 桥接
│ ├── FreeCode.Services/ # 业务服务 (Auth/Memory/Voice/Remote/Notification/...)
│ ├── FreeCode.Tasks/ # 后台任务管理
│ ├── FreeCode.Skills/ # 技能系统
│ ├── FreeCode.Plugins/ # 插件系统 (AssemblyLoadContext)
│ ├── FreeCode.Features/ # 特性开关
│ ├── FreeCode.State/ # 状态管理 (AppState record)
│ └── FreeCode.TerminalUI/ # Terminal.Gui 组件 (REPL/Components/Theme/Keybindings)
├── tests/ # 9 个测试项目
└── scripts/ # build.ps1, build.sh, publish.sh
```
> 每个项目的职责边界、依赖关系图和 `Directory.Build.props` 共享配置,详见: [./reference/解决方案结构说明.md](reference/解决方案结构说明.md)
---
## 5. 关键设计决策
这些决策在整个设计方案中一以贯之,影响所有模块的实现方式。
| 决策点 | 选择 | 理由 |
|--------|------|------|
| 终端 UI 框架 | Terminal.Gui v2 | .NET 生态内唯一成熟的 TUI 方案 |
| CLI 解析框架 | System.CommandLine v2 | 官方库v2 已稳定,子命令/选项/自动补全齐备 |
| MCP 协议客户端 | 自研 SDK | 社区目前没有成熟的 .NET 实现 |
| 插件隔离方式 | AssemblyLoadContext | .NET 原生支持,程序集可卸载 |
| 状态管理模式 | Record + Event | 不可变状态 + 事件驱动,类似 Redux/Elm |
| AOT 兼容策略 | Source Generator 优先 | 尽量避免反射,确保 AOT 编译不裁剪 |
| 代码搜索 | ripgrep 进程包装 | 保持原有 ripgrep 的搜索性能 |
---
## 模块覆盖对照表
> 说明:
> - ✅ 已覆盖:已有独立设计文档
> - ↗️ 归属:作为其他文档的小节或附属内容覆盖
> - 📋 空目录/stub当前快照为空目录、占位文件或仅剩 stub不单独出文档
| 原始 ../../src/ 目录 | 文件数 | docs/ 覆盖文档 | 状态 |
|------|------:|------|------|
| `entrypoints` | 11 | [核心模块设计 — CLI启动与解析](../核心模块设计/核心模块设计-CLI启动与解析.md) | ✅ 已覆盖 |
| `screens` | 3 | [核心模块设计 — CLI启动与解析](../核心模块设计/核心模块设计-CLI启动与解析.md) | ↗️ 归属 |
| `QueryEngine.ts` | 1 | [核心模块设计 — 查询引擎 (QueryEngine)](../核心模块设计/核心模块设计-查询引擎-QueryEngine.md) | ✅ 已覆盖 |
| `tools.ts``tools/` | 210 | [核心模块设计 — 工具系统](../核心模块设计/核心模块设计-工具系统.md) | ✅ 已覆盖 |
| `commands.ts``commands/` | 218 | [核心模块设计 — 命令系统](../核心模块设计/核心模块设计-命令系统.md) | ✅ 已覆盖 |
| `services/api/` | 39 | [核心模块设计 — API 多提供商路由](../核心模块设计/核心模块设计-API提供商路由.md) | ✅ 已覆盖 |
| `services/lsp/` | 7 | [基础设施设计 — LSP集成](../基础设施设计/基础设施设计-LSP集成.md) | ✅ 已覆盖 |
| `services/mcp/` | 22 | [基础设施设计 — MCP协议集成](../基础设施设计/基础设施设计-MCP协议集成.md) | ✅ 已覆盖 |
| `services/oauth/` | 7 | [服务子系统设计 — 认证与OAuth](../服务子系统设计/服务子系统设计-认证与OAuth.md) | ✅ 已覆盖 |
| `services/SessionMemory/` | 3 | [服务子系统设计 — 会话记忆与上下文](../服务子系统设计/服务子系统设计-会话记忆与上下文.md) | ✅ 已覆盖 |
| `services/contextCollapse/` | 3 | [服务子系统设计 — 会话记忆与上下文](../服务子系统设计/服务子系统设计-会话记忆与上下文.md) | ↗️ 归属 |
| `services/extractMemories/` | 2 | [服务子系统设计 — 会话记忆与上下文](../服务子系统设计/服务子系统设计-会话记忆与上下文.md) | ↗️ 归属 |
| `services/teamMemorySync/` | 5 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | ↗️ 归属 |
| `services/autoDream/` | 4 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | ↗️ 归属 |
| `services/plugins/` | 3 | [UI与扩展设计 — 插件系统](../UI与扩展设计/UI与扩展设计-插件系统.md) | ✅ 已覆盖 |
| `services/PromptSuggestion/` | 2 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | ↗️ 归属 |
| `services/policyLimits/` | 2 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | ↗️ 归属 |
| `services/tips/` | 3 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | ↗️ 归属 |
| `services/analytics/` | 8 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | ↗️ 归属 |
| `services/voice*` | 3 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | ↗️ 归属 |
| `services/settingsSync/` | 2 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | ↗️ 归属 |
| `services/bootstrap/` | 1 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | ↗️ 归属 |
| `bridge/` | 32 | [基础设施设计 — IDE桥接](../基础设施设计/基础设施设计-IDE桥接.md) | ✅ 已覆盖 |
| `tasks/` | 14 | [基础设施设计 — 后台任务管理](../基础设施设计/基础设施设计-后台任务管理.md) | ✅ 已覆盖 |
| `state/` | 6 | [基础设施设计 — 状态管理](../基础设施设计/基础设施设计-状态管理.md) | ✅ 已覆盖 |
| `skills/` | 50 | [UI与扩展设计 — 技能系统](../UI与扩展设计/UI与扩展设计-技能系统.md) | ✅ 已覆盖 |
| `plugins/` | 2 | [UI与扩展设计 — 插件系统](../UI与扩展设计/UI与扩展设计-插件系统.md) | ✅ 已覆盖 |
| `coordinator/` | 2 | [核心模块设计 — 多代理协调器 (Coordinator)](../核心模块设计/核心模块设计-多代理协调.md) | ✅ 已覆盖 |
| `assistant/` | 5 | [核心模块设计 — 多代理协调器 (Coordinator)](../核心模块设计/核心模块设计-多代理协调.md) | ↗️ 归属 |
| `context/` | 9 | [基础设施设计 — 状态管理](../基础设施设计/基础设施设计-状态管理.md) | ↗️ 归属 |
| `hooks/` | 104 | [UI与扩展设计 — Terminal-Gui 终端UI](../UI与扩展设计/UI与扩展设计-Terminal-Gui终端UI.md) | ↗️ 归属 |
| `components/` | 400 | [UI与扩展设计 — Terminal-Gui 终端UI](../UI与扩展设计/UI与扩展设计-Terminal-Gui终端UI.md) | ↗️ 归属 |
| `ink/` | 98 | [UI与扩展设计 — Terminal-Gui 终端UI](../UI与扩展设计/UI与扩展设计-Terminal-Gui终端UI.md) | ↗️ 归属 |
| `ink.ts` | 1 | [UI与扩展设计 — Terminal-Gui 终端UI](../UI与扩展设计/UI与扩展设计-Terminal-Gui终端UI.md) | ↗️ 归属 |
| `keybindings/` | 14 | [UI与扩展设计 — Terminal-Gui 终端UI](../UI与扩展设计/UI与扩展设计-Terminal-Gui终端UI.md) | ↗️ 归属 |
| `constants/` | 22 | [总体概述与技术选型](总体概述与技术选型.md) / 各子模块引用 | ↗️ 归属 |
| `utils/` | 577 | 各模块与基础设施文档的公共支撑 | ↗️ 归属 |
| `types/` | 12 | 各模块与基础设施文档的公共支撑 | ↗️ 归属 |
| `remote/` | 4 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | ↗️ 归属 |
| `daemon/` | 2 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | ↗️ 归属 |
| `proactive/` | 2 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | ↗️ 归属 |
| `server/` | 11 | [基础设施设计 — 其他基础设施子系统](reference/解决方案结构说明.md) | ↗️ 归属 |
| `vim/` | 5 | [UI与扩展设计 — Terminal-Gui 终端UI](../UI与扩展设计/UI与扩展设计-Terminal-Gui终端UI.md) | ↗️ 归属 |
| `memdir/` | 9 | [服务子系统设计 — 会话记忆与上下文](../服务子系统设计/服务子系统设计-会话记忆与上下文.md) | ↗️ 归属 |
| `migrations/` | 11 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | 📋 空目录/stub |
| `bootstrap/` | 1 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | 📋 空目录/stub |
| `buddy/` | 6 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | 📋 空目录/stub |
| `cli/` | 21 | [核心模块设计 — CLI启动与解析](../核心模块设计/核心模块设计-CLI启动与解析.md) | ↗️ 归属 |
| `query/` | 4 | [核心模块设计 — 查询引擎 (QueryEngine)](../核心模块设计/核心模块设计-查询引擎-QueryEngine.md) | ↗️ 归属 |
| `self-hosted-runner/` | 1 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | 📋 空目录/stub |
| `ssh/` | 1 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | 📋 空目录/stub |
| `native-ts/` | 4 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | 📋 空目录/stub |
| `upstreamproxy/` | 2 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | 📋 空目录/stub |
| `environment-runner/` | 1 | [服务子系统设计 — 其他服务子系统](../服务子系统设计/服务子系统设计-其他服务子系统.md) | 📋 空目录/stub |
| `jobs/` | 1 | [基础设施设计 — 后台任务管理](../基础设施设计/基础设施设计-后台任务管理.md) | ↗️ 归属 |
| `moreright/` | 1 | [UI与扩展设计 — 插件系统](../UI与扩展设计/UI与扩展设计-插件系统.md) | 📋 空目录/stub |
### 备注
- `services/*` 采用“核心子系统 + 其他服务子系统”组合覆盖,避免为每个轻量子目录单独出文档。
- `constants/``types/``utils/` 属于横切支撑层,通常作为被引用内容而非独立模块文档。
- `migrations/``bootstrap/``buddy/``daemon/``proactive/``remote/` 等目录在当前重写文档体系中主要作为其他模块的实现细节归属,不单独展开。
---
## 参考文档
| 文档 | 内容 |
|------|------|
| [.NET 10 平台介绍](reference/.NET-10-平台介绍.md) | AOT、C# 13、核心 API 特性 |
| [技术栈映射说明](reference/技术栈映射说明.md) | TS → .NET 完整映射 + NuGet 清单 |
| [解决方案结构说明](reference/解决方案结构说明.md) | 17 个项目职责与依赖关系 |
| [MCP SDK 实现](reference/mcp-sdk-implement.md) | 自研 MCP SDK 协议与传输层设计 |