# Daofy for Delphi

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)
![Delphi 2005-13](https://img.shields.io/badge/Delphi-2005%20to%2013-red.svg)

一个为 AI 助手(如 Claude Desktop、CodeArts Agent 等)提供 Delphi 工程编译能力和知识库查询功能的 MCP Server。如果您觉得有用，请不要吝啬您的 Star! ⭐

Daofy（道飞）——为创意插上翅膀。

## 项目简介

Daofy for Delphi 是一个基于 Model Context Protocol (MCP) 的 MCP Server，它允许 AI 助手直接编译 Delphi 项目并查询 Delphi 知识库。通过这个工具,您可以在与 AI 助手的对话中直接编译 Delphi 工程、查询 API 文档、搜索代码示例,无需手动切换到 IDE 或命令行。

**主要优势:**

- **Delphi 自动化测试**: 内置 GUI/Console 自动化测试框架，AI 驱动脚本操控 Delphi 程序
- 无缝集成到 AI 助手工作流中
- 自动检测和配置 Delphi 编译器
- 内置 Delphi 源码知识库,支持语义搜索
- 项目级知识库,自动追踪三方库和项目源码
- 通用文档知识库支持 Delphi CHM 帮助文档全文搜索
- 支持所有主流 AI 助手平台
- 完整的编译事件支持
- 详细的错误诊断和日志

## 功能特性

### 编译功能

- **工程整体编译**: 支持编译完整的 Delphi 工程(.dproj/.dpr),生成可执行文件或动态链接库
- **MSBuild 编译**: 优先使用 MSBuild 编译,自动处理依赖关系和编译事件
- **单文件编译**: 支持编译单个 Delphi 单元文件(.pas),进行语法检查
- **自动检测编译器**: 自动从注册表检测已安装的 Delphi 编译器,无需手动配置
- **智能库路径解析**: 自动分析项目依赖，智能选择需要的第三方库路径，避免命令行过长
- **编译事件支持**: 支持 PreBuildEvent、PostBuildEvent、PreLinkEvent,包含完整的参数替换
- **命令行参数生成**: 支持生成 Delphi 编译器命令行参数,便于调试和预览
- **编译器配置管理**: 支持配置和管理多个 Delphi 编译器版本
- **环境检查**: 提供编译器环境状态检查功能
- **丰富的编译选项**: 支持条件编译符号、搜索路径、优化选项、调试信息、警告控制等

### 知识库功能

- **Delphi 源码知识库**: 内置 Delphi 官方源码知识库,支持类、函数搜索和语义搜索
- **项目知识库**: 为每个项目构建独立知识库,自动追踪三方库和项目源码
- **三方库知识库**: 从 .dproj 文件自动提取三方库路径并构建知识库
- **增量更新**: 自动检测源码变动,增量更新项目知识库
- **示例知识库**: 自动发现 Delphi 官方 Demo/Samples 和三方库 Demos/Tests，全文搜索示例代码
- **通用文档知识库**: 支持 txt/md/html/docx/doc/pdf/epub/hlp/chm 和网页文档的扫描与搜索（基于 ZVec 向量存储 + FTS 全文索引）
  - 必需依赖: `html2text`, `requests` (已在 requirements.txt)
  - 可选依赖: `python-docx` (Word .docx 支持), `antiword/catdoc` (旧版 Word .doc 支持), `PyMuPDF` (PDF 支持，推荐) 或 `pdfplumber` (PDF 支持，备选), `beautifulsoup4` (EPUB 支持)
- **智能去重**: 基于完整路径去重，正确处理同名不同目录的文件

### 构建 Delphi 帮助文档知识库

用户首次使用或需要重建 Delphi API 文档时，调用 `delphi_kb` 工具构建文档知识库：

```
delphi_kb(
    action="build",
    kb_type="document",
    async_mode=true
)
```

说明：
- **不传 directory 时自动检测**最新安装的 Delphi 帮助目录（通过注册表或默认路径）
- 也可手动指定：`directory="C:\Program Files (x86)\Embarcadero\Studio\<版本>\Help\Doc"`
  - 版本对照：37.0=Delphi 13, 23.0=Delphi 12, 22.0=Delphi 11, 21.0=Delphi 10.4, 20.0=Delphi 10.3
- `extensions=[".chm"]`：只扫描 CHM 文件，工具会自动解压并导入 HTML 文档
- `async_mode=true`：异步执行（耗时数分钟），提交后返回 task_id，通过 `async_task(action=status, task_id=...)` 轮询进度
- 需要系统安装 7-Zip（可放在 `tools/7z/` 目录下免安装）

### 构建示例知识库

构建 Delphi 官方 Demos/Samples + 三方库 Demos/Tests 的全文搜索知识库：

```
delphi_kb(
    action="build",
    kb_type="example"
)
```

搜索示例代码：

```
delphi_kb(
    query="TThread.Queue",
    kb_type="example"
)
```

示例知识库仅全文搜索，不解析结构化符号（类/函数），适合快速查找示例用法。
使用 `kb_type="all"` 时默认不搜索示例知识库，需显式指定 `kb_type="example"`。

### 编码规范功能

- **编码规则查询**: 获取 Delphi 源码编码规则,供 AI 助手用于代码审核和生成
- **默认规则支持**: 内置默认编码规则文件,包含命名规则、格式化规则、修改规则和审核规则
- **自定义规则支持**: 支持项目级别的自定义编码规则,优先于默认规则
- **规则优先级**: 项目自定义规则 > 默认规则

### 自动化测试功能

Daofy 内置 Delphi GUI/Console 自动化测试框架，支持 AI 驱动的 UI 交互测试：

- **命名管道 GUI 自动化**: 在 Delphi 程序中接入 `DaofyAutomation` 单元，AI 通过 `automate_delphi` 工具发送脚本命令操控界面（点击/输入/截图/断言）
- **控制台交互测试**: 无需改造 Delphi 程序，通过 stdin/stdout 交互测试控制台应用
- **脚本驱动**: JSON 格式测试脚本，支持条件等待（`waitfor`）、RTTI 属性读写（`rget`/`rset`）、截图比对
- **进程复用**: `keep_alive` 模式下进程常驻，避免重复启动开销
- **报告与修复闭环**: 失败自动定位到失败步骤，生成修复建议

> 📖 **启用指南**: 如何在自己的 Delphi 项目中接入自动化测试，见 [`docs/automate_test_guide.md`](docs/automate_test_guide.md) 的「启用指南」章节。

## MCP 工具列表

| 工具名称 | 功能描述 |
|----------|----------|
| `delphi_project` | Delphi 项目全生命周期管理：编译(compile)/配置(info/set/create)/审计(audit/ast/runtime) |
| `check_environment` | 诊断编译环境、检测编译器、安装 pasfmt |
| `package` | 组件包管理：安装(action=install) / 列出已安装(action=list) |
| `get_coding_rules` | 获取 Delphi 编码规范，支持按章节分段获取 |
| `delphi_kb` | 搜索代码/类/函数/文档/示例代码，查看统计或构建知识库 |
| `delphi_file` | Delphi 文件专用操作：读/写(edits批量修改)/格式化/备份管理（编码检测+自动备份+DFM转换） |
| `manage_component` | DFM 组件增/删/改/生成 + PAS 自动同步 |
| `code_hosting` | 统一操作 Gitea/GitHub/GitLab/Gitee/GitCode 平台 + Git 本地操作 |
| `async_task` | 管理后台任务（构建知识库等） |
| `daofy_update` | 检查 Daofy 版本更新、执行 git pull 更新（check/update/version），后台异步执行 |
| `tool_help` | 获取任意工具的完整帮助文档（按需，含参数说明/示例/触发词） |
| `generate_copyright` | 软著文档生成：源代码/说明书/摘要自动生成（PDF 浏览器渲染+自动校验） |
| `automate_delphi` | Delphi GUI/Console 自动化测试 — 脚本驱动（click/type/waitfor/rget/capture），支持 GUI 命名管道和控制台两种模式，`keep_alive` 进程复用 |
| `delphi_rtti` | Delphi RTTI 桥接 — 通过 RTTI 发现和调用 Delphi 应用的运行时能力（三步法：discover/call/guide） |
| `experience` | 经验记忆管理：保存/搜索/更新/合并/删除 AI 成功解决问题的做法；定期清理低价值条目（prune）；模型加载后重建缺失向量（rebuild_embedding） |
| `ocr` | 图像分析：文字识别(recognize)/文本框(detect)/截图比对(diff)/颜色分析(color)/图标匹配(match) |

## 系统要求

- Python 3.10-3.14
- Delphi 编译器(dcc32.exe 或 dcc64.exe)
- Windows 操作系统
- Git
- 7-Zip (用于解压 CHM 帮助文件,可选)

## 知识库存储位置

所有知识库数据存储在项目根目录的 `data/` 文件夹下：

| 知识库类型 | 存储路径 | 说明 |
|-----------|---------|------|
| Delphi 源码知识库 | `data/delphi-knowledge-base/` | Delphi 官方源码 (RTL/VCL/FMX 等) |
| 第三方库知识库 | `data/thirdparty-knowledge-base/` | 第三方组件库源码 |
| 通用文档知识库 | `data/document-knowledge-base/` | Delphi CHM 帮助文档 + 通用文档 |
| 项目知识库 | `<项目目录>/.delphi-kb/` | 项目级知识库，存放在项目目录下 |
| 示例知识库 | `data/example-knowledge-base/` | Delphi 官方 Demos + 三方库 Demos/Tests，全文搜索 |
| 经验知识库 | `data/experience-knowledge-base/` | AI 经验记忆（`experiences.sqlite`） |

每个知识库目录包含：
- `*.zvec/` - ZVec 向量数据库目录（文档/示例/项目/三方库知识库）
- `experiences.sqlite` - 经验记忆数据库（仅经验知识库保留 SQLite）
- `config.json` - 知识库配置文件

说明：除经验知识库外，所有知识库已从 SQLite 迁移到 ZVec 向量引擎。文档知识库不再使用 SQLite FTS5，改用 ZVec 全文索引。

## 知识库配置说明

每个知识库通过 `config.json` 文件进行配置，支持自定义数据库、源码路径、构建参数等。

| 知识库类型 | 配置位置 |
|-----------|----------|
| Delphi 源码 | `data/delphi-knowledge-base/config.json` |
| 第三方库 | `data/thirdparty-knowledge-base/config.json` |
| 通用文档 | `data/document-knowledge-base/config.json` |
| 项目级 | `<项目目录>/.delphi-kb/config.json` |
| 示例库 | `data/example-knowledge-base/`（纯 SQLite，无 config.json） |
| 经验库 | `data/experience-knowledge-base/`（纯 SQLite，无 config.json） |

配置文件在首次构建时自动生成，通常无需手动修改。

## 安装

### 方式一：pip 安装（推荐）

```bash
pip install daofy-for-delphi
```

安装完成后直接进入 → [配置 AI 助手](#配置-ai-助手) 步骤即可。

> **国内用户**可使用镜像源加速：
> ```bash
> pip install daofy-for-delphi -i https://pypi.tuna.tsinghua.edu.cn/simple
> ```

### 方式二：源码安装

#### AI 助手自动安装提示词

请按以下步骤安装 Daofy:

[] 检查并安装 Git/Python 3.10-3.14/7-Zip

[] 安装 `https://github.com/chinawsb/daofy.git`（国内用户可用镜像: `https://gitee.com/zuoyouruanjian/daofy.git`）

[] 安装完成后验证结果并帮我配置当前客户端

#### 手动安装步骤

##### 1. 克隆或下载项目

```bash
git clone https://github.com/chinawsb/daofy.git
# 国内用户可用 Gitee 镜像加速:
# git clone https://gitee.com/zuoyouruanjian/daofy.git
cd daofy
```

##### 2. 创建虚拟环境

```bash
python -m venv venv
```

##### 3. 激活虚拟环境

Windows:

```bash
venv\Scripts\activate
```

Linux/macOS:

```bash
source venv/bin/activate
```

##### 4. 安装依赖 (使用国内镜像源加速)

```bash
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
```

可选国内镜像源:

- 清华大学: <https://pypi.tuna.tsinghua.edu.cn/simple>
- 阿里云: <https://mirrors.aliyun.com/pypi/simple/>
- 中科大: <https://pypi.mirrors.ustc.edu.cn/simple/>

## 配置 AI 助手

### 自动检测 Delphi 编译器

**首次使用时,MCP Server 会自动从 Windows 注册表检测已安装的 Delphi 编译器,无需手动配置。**

自动检测支持的 Delphi 版本:

- Delphi 13 Florence (37.0)
- Delphi 12 Athens (23.0)
- Delphi 11 Alexandria (22.0)
- Delphi 10.4 Sydney (21.0)
- Delphi 10.3 Rio (20.0)
- Delphi 10.2 Tokyo (19.0)
- Delphi 10.1 Berlin (18.0)
- Delphi 10 Seattle (17.0)
- Delphi XE8 (16.0)
- Delphi XE7 (15.0)
- Delphi XE6 (14.0)
- Delphi XE5 (12.0)
- Delphi XE4 (11.0)
- Delphi XE3 (10.0)
- Delphi XE2 (9.0)
- Delphi XE (8.0)
- Delphi 2010 (7.0)
- Delphi 2009 (6.0)
- Delphi 2007 (5.0)
- Delphi 2006 (4.0)
- Delphi 2005 (3.0)

### 手动配置编译器 (可选)

如果需要手动配置或添加自定义编译器,可以直接编辑 `config/compilers.json` 文件,或使用 `check_environment` 工具的 `detect` action 重新检测。

### 通用配置（pip 安装）

如果通过 `pip install daofy-for-delphi` 安装，配置最简：

```json
{
  "mcpServers": {
    "daofy": {
      "command": "daofy",
      "env": {
        "PYTHONUNBUFFERED": "1",
        "PYTHONIOENCODING": "utf-8",
        "PYTHONUTF8": "1"
      }
    }
  }
}
```

### 源码安装配置

以下配置适用于通过 git clone 源码安装的用户，请将路径替换为实际安装路径。

#### Claude Desktop

**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "daofy": {
      "command": "python",
      "args": ["C:\\path\\to\\daofy\\src\\server.py"],
      "env": {
        "PYTHONUNBUFFERED": "1",
        "PYTHONIOENCODING": "utf-8",
        "PYTHONUTF8": "1"
      }
    }
  }
}
```

#### Trae

**Windows**: `C:\Users\<用户名>\.trae-cn\mcp_config.json`

```json
{
  "mcpServers": {
    "daofy": {
      "command": "F:\\ProPlus\\DelphiPlus\\Experts\\DelphiMCPServer\\delphi-complier-mcp-server\\venv\\Scripts\\python.exe",
      "args": [
        "F:\\ProPlus\\DelphiPlus\\Experts\\DelphiMCPServer\\delphi-complier-mcp-server\\src\\server.py"
      ],
      "env": {
        "PYTHONUNBUFFERED": "1",
        "PYTHONIOENCODING": "utf-8",
        "PYTHONUTF8": "1"
      }
    }
  }
}
```

**注意**: 请将路径修改为您的实际安装路径。

#### CodeArts Agent

**Windows**: `~/.codeartsdoer/mcp/mcp_settings.json`

```json
{
  "mcpServers": {
    "daofy": {
      "command": "python",
      "args": ["src\\server.py"],
      "cwd": "C:\\path\\to\\daofy",
      "env": {
        "PYTHONUNBUFFERED": "1",
        "PYTHONIOENCODING": "utf-8",
        "PYTHONUTF8": "1"
      }
    }
  }
}
```

## 使用方法

### 知识库统计

| 知识库       | 文件数     | 类数量    | 数据库大小 |
| ---------    | -------   | ------    | -------    |
| Delphi 源码  | 2,798     | 163,737   | 260 MB     |
| 三方库        | 1,800     | 5,724     | 27 MB      |
| 通用文档      | 160,328   | -         | 1,306 MB   |

## 故障排除

### 1. 编译器未找到

**解决方案**:

- 检查 `config/compilers.json` 文件中的编译器路径是否正确
- 使用 `check_environment` 工具 `action=detect` 重新检测编译器

### 2. MCP Server 无法启动

**解决方案**:

- 检查 Python 环境是否正确配置
- 检查依赖是否已安装: `pip install -r requirements.txt`
- 检查 MCP 库版本: `pip show mcp`

### 3. 知识库搜索无结果

**解决方案**:

- 确保已构建知识库: 使用 `delphi_kb` 工具的 action=build 构建
- 检查知识库目录是否存在

## 许可证

MIT License

Copyright (c) 2026 吉林省左右软件开发有限公司
Copyright (c) 2026 Equilibrium Software Development Co., Ltd, Jilin

详见 [LICENSE](LICENSE) 文件。

## 版本历史

### v2026.07.05 (最新)

- **文档全量同步**: 全部 docs 与实现对齐——`project()` → `delphi_project()`、ZVec 存储结构、kb_type 补全、section 索引扩展、tutorial 同步修复
- **CHANGELOG 补全**: v2026.06.22 遗漏的 Added/Fixed/Removed 条目已补录

### v2026.06.22

- **工具名重命名**: `project` → `delphi_project`，防止非 Delphi 用户误触
- **`delphi_rtti` 工具**: Delphi RTTI 桥接 — 通过 Enhanced RTTI 发现和调用 Delphi 应用的 published 方法（三步法：guide/discover/call）
- **`generate_copyright` 工具**: 软著文档自动生成（源代码/说明书/摘要，PDF 浏览器渲染+自动校验）
- **`daofy_update` 工具**: Daofy 自身版本检查和更新管理（check/update/version）
- **存储引擎迁移**: 文档/示例/项目/三方库知识库从 SQLite FTS5 迁移至 ZVec 全文索引
- **HTML 解析优化**: 移除 BeautifulSoup 依赖，改用 html2text 内置过滤；构建时间 -41%
- **扫描引擎重构**: `scan_directory` 改为生产者-消费者模式，内存峰值从天降至 KB 级
- **`DaofyAutomation.RttiDiscovery.pas`**: 新增 RTTI 能力发现单元，`TRttiDiscoverer` 类将 Delphi 类型映射为 JSON Schema
- **`DaofyAutomation.Base.pas` / `Vcl.DaofyAutomation.pas`**: 新增 `rtti_discover` 命令路由和 VCL 端 `GetRttiClasses` 重写
- **`src/services/rtti_bridge.py`**: 新增 RTTI 桥接服务（连接管理/5分钟缓存/discover/call）
- **`src/tools/delphi_rtti.py`**: 新增 MCP 工具 handler（action=guide/discover/call）
- **`.opencode/skills/delphi-rtti-bridge/SKILL.md`**: 新增 AI Agent 技能文件（含 YAML frontmatter + 渐进式 L3 文档）
- **`scripts/build-skills.py`**: 技能多平台分发脚本（自动分发到 .claude/ .cursor/ .windsurfrules）
- **`tests/test_rtti_bridge.py` / `tests/test_delphi_rtti.py`**: 38 个测试用例覆盖桥接服务 + 工具 handler
- **DaofyAutomation 三层架构拆分**: tools/auto/ 拆分为 Base/VCL/FMX 三层，Overlapped I/O 管道，扩展命令集（move/drag/key/waitfor/rcall 等）
- **`automate_delphi` 新增 Console 模式**: 支持 subprocess stdin/stdout 交互，自动 PE 头检测 GUI vs Console
- **`file_tool` 路径白名单校验 + 脏标记系统**: `_validate_path()` 安全校验，写后标记脏防止行号错位
- **`CODING_RULES.mdc` 规则重构**: 全面重写 delphi_file 写入规则、紧凑输出格式、脏标记保护
- **编译验证**: DCC 0 错误通过，Python import 无报错

### v2026.06.08.1

- `delphi_file` 全操作 RWLock 防并发文件损坏：read/write/format/backup/uses 全部引入多读单写锁，并发写入返回明确错误，引导合并到一次 write(edits=[...])
- `tools/7z/` 补齐 7z.dll，release 包开箱可用
- `tool_docs.py` 约束强化：统一写入参数为 edits，并新增并行写入禁令（后续版本推荐 `replace`/`insert`/`delete` 结构化入口）
- `.gitignore` 排除 dot-prefixed 目录，清理 AI 工作目录追踪

### v2026.06.03

- `delphi_file` 写入统一为 `write(edits=[...])`：一次传入多个 edit，内部按 `start_line` 升序排列，内存中累积偏移量后一次性写出
- `compilers.json` 路径自愈：检测到不在 `src/config/` 时自动回退到项目根 `config/`，避免 MCP 启动时因路径差异直接报错
- 18 处 `except Exception: pass` 添加 `logger.debug` 异常日志，便于调试时定位失败原因
- `search_knowledge` 重构：597→37 行，拆 16 个模块级子函数，行为完全等价
- 全量测试 727 passed

### v2026.06.01

- `delphi_file` 部分写入行号修正：0-indexed 文档纠偏，写入后返回偏移量+后续行号调整公式
- `delphi_file(action="uses")` 同步返回偏移量信息
- `AGENTS.md` 当时新增部分写入规则章节；后续版本已统一为 1-indexed inclusive 行号
- 全量测试 684 passed, 6 skipped

### v2026.05.14

- 新增 `manage_component` 工具：DFM 组件增/删/改/生成 + PAS 自动同步（替代原 `generate_component_dfm`）
- `delphi_file` 重命名+增强：DFM 二进制自动转换、备份管理、搜索定位（原名 `file_tool`，旧名仍兼容）
- `get_coding_rules` 增强：支持按章节分段获取，节省 token
- 新增 `code_hosting` 工具：统一 Gitea/GitHub/GitLab 操作
- 工作流从 6 步扩展为 7 步（①环境检查→②查KB→③写代码→④格式化→⑤编译→⑥审计→⑦清理）

完整版本历史详见 [CHANGELOG.md](CHANGELOG.md)

## 贡献

欢迎提交 Issue 和 Pull Request!

## 赞助

如果您觉得 Daofy for Delphi 对您有帮助，欢迎通过以下方式赞助支持我们。
您的支持让项目走得更远！❤️

### 支付宝

**账号**: guansonghuan@sina.com（姓名：管耸寰，请标明QQ号）

<img src="https://blog.qdac.cc/wp-content/uploads/2018/04/pay_alipay.jpg" alt="支付宝收款码" width="200"/>

### 微信

**账号**: wangshengbo（发送红包或转账）

<img src="https://blog.qdac.cc/wp-content/uploads/2018/04/pay_wechat.jpg" alt="微信收款码" width="200"/>

### QQ

直接群支付，或给群主发红包

<img src="https://blog.qdac.cc/wp-content/uploads/2018/04/pay_qq.png" alt="QQ收款码" width="200"/>

**QQ官方群**: 250530692

### 银行卡

| 银行 | 户名 | 账号 | 开户行 |
|------|------|------|--------|
| 光大银行 | 王胜波 | 6226 6208 0391 5552 | 光大银行长春人民大街支行 |
| 建设银行 | 管耸寰 | 4367 4209 4324 0179 731 | 建设银行长春团风储蓄所 |

## 联系方式

如有问题或建议,请提交 Issue。
