基于 SharpDevelop 5.1 架构的现代化 C# IDE,深度集成 Roslyn 语言服务与 Microsoft Agent Framework (MAF) 1.0 AI Agent 能力。
构建一个 C# 原生、开源、支持 AI Agent 的现代 IDE,对标 Zed 的性能与 Copilot Chat 的 AI 体验:
- AddInTree 插件系统(继承自 SharpDevelop 5.1)— XML 声明式扩展点,插件可注册 AI Agent 与 MCP Server
- Roslyn 语言服务(替换废弃的 NRefactory)— 语法高亮、智能补全、诊断、格式化、代码修复、符号导航
- AI Agent 层 — 基于
IAgentBackend抽象的可替换后端:进程内(MAF 1.0IChatClient模型抽象,OpenAI / Azure / Ollama / 任意兼容端点)或外部 Agent CLI 后端(Native AOT 独立进程,二进制协议经 stdin/stdout 通信);工具注册、上下文收集、斜杠命令、内联补全 - .NET 9+ 全链路 — SDK-style 项目、
net9.0-windows目标、Native AOT、现代化构建管线
| 层 | 技术 |
|---|---|
| 编辑器 | AvalonEdit 6.x(ICSharpCode.AvalonEdit) |
| 语言服务 | Roslyn Microsoft.CodeAnalysis 4.12(Common / CSharp / Workspaces / Features / MSBuild) |
| AI Agent(进程内) | Microsoft.Agents.AI 1.17 + Microsoft.Extensions.AI(OpenAI SDK 客户端) |
| AI Agent(外部 CLI) | SharpDevelop.Agent.Cli(net9.0-windows + Native AOT,sd-agent.exe)、Microsoft.Extensions.AI.OpenAI |
| 插件系统 | ICSharpCode.Core AddInTree(SharpDevelop 5.1 遗产,已现代化) |
| 目标框架 | net9.0 / net9.0-windows |
| CI | GitHub Actions |
src/
├── ICSharpCode.Core/ # AddInTree 插件系统 + 服务子系统(SD 5.1 遗产)
├── SharpDevelop.Agent.Protocol/ # Agent 二进制协议(帧编码:握手/配置/消息/会话/心跳/取消)
├── SharpDevelop.Roslyn/ # Roslyn 语言服务
│ ├── SyntaxHighlighting/ # Roslyn 语义语法高亮(SD-P1-T01)
│ ├── Completion/ # 智能补全(SD-P1-T02)
│ ├── Diagnostics/ # 诊断桥接 → 波浪线/Error List(SD-P1-T03)
│ ├── Formatting/ # 格式化服务(SD-P1-T04)
│ ├── CodeActions/ # 代码修复服务(SD-P1-T05)
│ ├── Symbols/ # 符号导航:定义/引用/重命名
│ └── Tools/ # AI 工具桥接(GetDiagnostics/SearchSymbols/...)
├── SharpDevelop.AI/ # AI Agent 层(IAgentBackend 抽象 + MAF 实现)
│ ├── Configuration/ # IChatClient 抽象 + 模型配置(SD-P2-T02)
│ ├── Agents/ # chat-assistant / inline-completer / 工作流(SD-P2-T03/09)
│ ├── Tools/ # 工具框架:ReadFile/WriteFile/ApplyEdit/Git/MCP(SD-P2-T05/08)
│ ├── Context/ # 编辑器上下文收集器(SD-P2-T06)
│ ├── Commands/ # 斜杠命令 /explain /fix /test ...(SD-P2-T07)
│ ├── Prompts/ # Prompt 模板体系(嵌入 prompts/ 目录)
│ └── MCP/ # MCP Client(.mcp.json → stdio 工具桥接)
├── SharpDevelop.Agent.Core/ # 类 Claude Code 代理运行时(AOT 安全):Agent 循环/工具/规划
├── SharpDevelop.Agent.Cli/ # Agent CLI(Native AOT,sd-agent.exe):协议服务端 + run/exec 代理模式
└── SharpDevelop.Host/ # WPF IDE 宿主(可运行)
├── Editor/ # AvalonEdit + Roslyn 高亮/诊断/内联补全(SD-P1/2 UI)
├── AgentCli/ # AgentCliClient:子进程 + 二进制协议 → IAgentBackend
├── Chat/ # AI 聊天面板(流式 + Markdown + 斜杠命令补全,SD-P2-T04/07)
└── Settings/ # 模型设置对话框(SD-P4-T01 基础)
tests/
└── SharpDevelop.AI.Tests/ # xUnit 测试(工具/命令/工作流/提示词/MCP 解析 + AgentCli e2e)
sd-agent(Native AOT 原生可执行)既是 IDE 的外部 Agent 后端,也是独立的
类 Claude Code 交互式编程代理:
# 交互式 REPL(观察→思考→行动循环,/help 查看命令)
sd-agent run
# 单次任务执行
sd-agent exec --task "为 Worker 类补充单元测试" --workdir ./src
# 二进制协议服务端(IDE 集成,无参数启动)
sd-agent能力矩阵(改造路线图):
| 阶段 | 能力 | 状态 |
|---|---|---|
| 1 | ① Agent 循环 ② 工具设计 ③ 显式规划 | ✅ 已实现 |
| 2 | ④ 子代理上下文 ⑤ 知识注入 ⑥ 三层压缩 ⑬ 长程记忆 | ✅ 已实现 |
| 3 | ⑦ 文件任务看板 ⑧ 后台执行 ⑪ WORK/IDLE 自治 | ✅ 已实现 |
| 4 | ⑨ JSONL 团队 ⑩ request_id 协议 FSM ⑫ Worktree 隔离 | ✅ 已实现 |
| 5 | 多进程并发加固(LockedFile 原子存储 / 并发认领零重复) | ✅ 已实现 |
| 6 | 终端命令执行确认机制(Dangerous 恒拒 / Risky 交互确认 + headless 拒绝 / Safe 白名单) | ✅ 已实现 |
| 7 | 网络请求白名单 + fetch_url(SSRF 双防线:内网/IP/元数据恒拒 + 白名单/交互确认 + DNS 解析校验) | ✅ 已实现 |
| 8 | 内容安全门(提示注入防护:未信任数据定界 + 注入检测警示;输出脱敏:密钥打码) | ✅ 已实现 |
| 9 | Azure AD 认证(BearerTokenPolicy:AzureOpenAI 无 API Key 时用 az 令牌 Bearer 认证,DPAPI 落盘) | ✅ 已实现 |
- .NET SDK 9.0+(CI 使用 9.0.x)
- Windows(
ICSharpCode.Core/SharpDevelop.Host使用net9.0-windows,WPF)
# 还原 + 构建整个解决方案
dotnet restore SharpDevelop.slnx
dotnet build SharpDevelop.slnx
# 运行 IDE(编辑器 + AI 聊天面板)
dotnet run --project src/SharpDevelop.Host
# 发布 Release 版本(完整安装包:IDE + sd-agent.exe + 插件,自动后验关键产物)
powershell -ExecutionPolicy Bypass -File scripts/publish-windows.ps1 -Version 6.0.0
# 发布 Agent CLI 为独立原生可执行文件(Native AOT,sd-agent.exe)
dotnet publish src/SharpDevelop.Agent.Cli -c Release -r win-x64
# 运行测试
dotnet test SharpDevelop.slnx
# 检查依赖漏洞
dotnet list SharpDevelop.slnx package --vulnerable --include-transitive启动后在「⚙ 设置」中填写模型信息(OpenAI / Azure / Ollama / 任意 OpenAI 兼容端点),然后:
- 打开任意文件:Roslyn 语义高亮 + 实时诊断波浪线(红=错误,黄=警告)
- 右侧 AI 助手 面板:对话式问答;输入
/触发斜杠命令(/explain/fix/test/doc/review/refactor) - 勾选「内联补全」:打字停顿后光标右侧出现灰色幽灵文本,
Tab接受、Esc取消 - AI 可调用工具:读/写文件、项目搜索、Git 状态、符号查询、
.mcp.json中的 MCP 服务器工具 - sd-agent 斜杠命令:
/tasks/task-create/team/worktree/memory/knowledge/protocol/work等由本机sd-agent.exe直接执行(后端无关、不耗 token、无需配置模型即可查看/操作任务看板);/sd <子命令>可透传任意白名单子命令 - 任务看板面板:「视图 → 任务看板」打开底部停靠面板,可视化 sd-agent 任务(状态 着色、依赖/结果列、5s 自动刷新);工具栏可新建任务(标题/描述/依赖)、标记完成、 刷新;双击任务跳转聊天面板查看详情。后台 worker 认领/完成任务会自动出现在看板上
- 团队状态面板:「视图 → 团队状态」展示队友列表(含收件箱消息数)与协议请求日志 (状态着色,双击查看详情)。收件箱为非破坏性 peek——面板轮询不会抢走智能体消息
- 隔离工作区面板:「视图 → 隔离工作区」列出 sd-agent worktree(每行含该工作区独立 的任务看板统计),可新建/删除,双击查看任务详情。多个工作区并行开发互不干扰
- 标签式工具窗口:任务看板/团队状态/隔离工作区合并为一个底部标签窗口(单选切换, 点标签头或菜单项均可),三个面板共享同一主题化 TabControl 样式
设置中可切换 AI 后端:
- InProcess(默认):进程内 MAF 1.0 agent(
AssistantAgent),随 IDE 加载。 - Cli:外部 Agent CLI 后端(
sd-agent.exe,Native AOT 原生进程)。IDE 经AgentCliClient以子进程 + 二进制协议(stdin/stdout,帧编码见SharpDevelop.Agent.Protocol)通信,模型连接、 会话与流式均在独立进程完成。AgentCliPath可指向官方sd-agent.exe或第三方实现同一协议的可执行文件 (默认取宿主目录下部署的sd-agent.exe)。CLI 独立缓存模型连接,IDE 崩溃不影响其生命周期, 便于独立更新/发布与隔离。
| Phase | 状态 | 说明 |
|---|---|---|
| P0 项目初始化 | ✅ | SharpDevelop 5.1 核心提取、.NET 9 SDK 迁移、NRefactory 移除、Roslyn 引入、CI、文档 |
| P1 核心现代化 | ✅ | Roslyn 高亮/补全/诊断/格式化/CodeFix/符号服务;宿主内语义高亮 + 诊断波浪线 |
| P2 AI Agent 层 | ✅ | MAF 1.0、IChatClient 抽象、工具集(含 Git/MCP)、上下文收集、斜杠命令、内联补全、聊天面板 UI、多 Agent 工作流、外部 Agent CLI 后端(Native AOT + 二进制协议) |
| P3 插件增强 | ✅ | AddInTree /AI/Agents /AI/MCPServers 扩展点、进程沙箱(Job Object)、主题系统(深色/浅色/高对比度)、性能优化 |
| P4 生产化 | 🔶 | 设置持久化/导入导出、遥测(OpenTelemetry)、自动更新、文档已完成;Beta 测试与 v0.1.0 发布(GitHub 远端)待人工 |
// 1. 创建模型配置(OpenAI 示例)
var config = new ModelConfiguration
{
Provider = ModelProvider.OpenAI,
ModelName = "gpt-4o-mini",
ApiKey = "<your-key>"
};
// 2. 构建 Agent
using var factory = new ChatClientFactory();
var tools = new ToolRegistry();
tools.RegisterProvider(new FileSystemToolProvider(@"C:\path\to\project"));
tools.RegisterProvider(new RoslynToolProvider(workspace));
using var assistant = new AssistantAgent(factory, config, tools);
// 3. 对话(带编辑器上下文)
var context = new ContextCollector().Collect(
filePath: "Program.cs", fileContent: code, cursorLine: 12, cursorColumn: 4, selectedText: null);
await foreach (var chunk in assistant.ChatWithContextAsync("/explain", context))
Console.Write(chunk);docs/user-manual.md— 用户手册(入门 / 进阶 / 参考 / 快捷键)docs/faq.md— FAQ / 故障排除docs/plugin-development-guide.md— 插件开发指南(AddInTree + AI 扩展点 + 沙箱)docs/api-reference.md— API 参考(SharpDevelop.AI / Roslyn / Host / Core)docs/spec.md— 技术规格说明书(三方案对比)docs/tasks.md— 任务分解与里程碑docs/checklist.md— 实施检查清单docs/addin-ai-extension-points.md— 插件注册 AI Agent / MCP Server 指南docs/telemetry-privacy.md— 遥测数据隐私声明docs/agent-capabilities-manual.md— sd-agent 13 项能力操作手册(REPL/CLI 命令、示例场景)docs/agent-capabilities-verification.md— sd-agent 13 项能力验证手册(自动化测试 + 手动验证步骤)docs/sd-agent-vs-ide-ai.md— sd-agent CLI 与 IDE AI 助手执行差异注意事项(引擎/提示词/工具/沙箱差异与对齐方法)docs/small-model-context-mitigation.md— 小模型上下文长度限制应对措施与整改方案(Ollama 本地小模型:操作对策 + 分阶段代码整改 + 验证方案)prompts/— Agent 系统提示词模板库(已嵌入 SharpDevelop.AI)
MIT(继承 SharpDevelop 5.1 许可;SharpDevelop © 2000-2016 AlphaSierraPapa / ICSharpCode Team)。