MetaCraft/docs/ARCHITECTURE.md

203 lines
6.1 KiB
Markdown
Raw Normal View History

# MetaCraft 架构设计
## 设计原则
1. **可自举**:工具链必须能够描述和实现自身的演进。
2. **可组合**prompt、脚本、文档应能像乐高一样组合支持复杂任务。
3. **上下文感知**AI操作应基于完整的项目上下文避免盲区。
4. **渐进式**:从简单原型开始,逐步增加功能,每一步都可用。
5. **透明性**所有决策和变更都有迹可循prompt历史、脚本日志
## 系统组件
### 1. Prompt 引擎 (`prompt-engine.js`)
负责加载、解析、执行prompt文件。
**功能**
- 读取Markdown格式的prompt文件。
- 提取元数据(如`<!-- target: generate-controller -->`)。
- 注入动态上下文当前文件树、相关代码片段、Git状态等
- 调用Claude Code执行prompt获取AI响应。
- 将响应解析为具体的操作指令(创建文件、修改代码、运行命令等)。
**接口示例**
```javascript
const { executePrompt } = require('./prompt-engine');
await executePrompt('prompts/add-feature.md', {
projectRoot: '.',
context: { module: 'user', type: 'controller' }
});
```
### 2. 脚本执行器 (`script-runner.js`)
统一执行Node.js脚本提供工具函数。
**内置工具函数**
- `fs` 增强:读写文件,保持格式。
- `git` 操作:提交、分支、对比。
- `command` 执行运行shell命令捕获输出。
- `template` 渲染:基于模板生成文件。
- `validation`语法检查、测试运行、lint。
**示例脚本**
```javascript
const { runScript, fs, git } = require('@metacraft/runner');
module.exports = async (args) => {
const content = await fs.read('templates/component.js');
await fs.write(`src/components/${args.name}.js`, content);
await git.commit(`Add component ${args.name}`);
};
```
### 3. 上下文管理器 (`context-manager.js`)
维护项目状态为AI提供连贯的上下文。
**存储内容**
- 项目结构树。
- 模块依赖图。
- 待办任务列表(从`meta/todo.md`解析)。
- 最近的操作历史(最近修改的文件、提交)。
- 自定义变量(如当前版本、环境配置)。
**上下文注入**
在执行prompt前自动将相关上下文以Markdown注释的形式插入prompt中例如
```
<!-- context -->
项目结构:
- src/
- controllers/user.js
- models/user.js
最近修改:
- src/routes/user.js (2 hours ago)
相关代码片段:
// src/controllers/user.js
exports.getUser = async (id) => { ... }
<!-- endcontext -->
```
### 4. 自举循环 (`bootstrap.js`)
核心自举逻辑读取待办任务选择优先级最高的任务执行对应prompt验证结果更新任务状态。
**步骤**
1. 读取 `meta/todo.md`,解析任务列表。
2. 选择下一个任务例如“实现prompt引擎”
3. 查找对应的prompt文件`prompts/implement-prompt-engine.md`)。
4. 执行prompt生成或修改代码。
5. 运行验证脚本(测试、构建)。
6. 如果成功,更新任务状态为完成,并提交更改。
7. 如果失败,记录错误,并将任务标记为需要人工干预。
**自动化程度**
- 初期:需要人工审核每个变更。
- 中期AI可自动处理简单任务如文档更新、代码格式化
- 长期AI可处理复杂功能开发人类仅负责高层次设计。
## 数据流
```
[待办任务] -> [选择任务] -> [加载prompt] -> [注入上下文] -> [Claude Code执行]
^ |
| v
[更新状态] <- [验证结果] <- [执行脚本] <- [解析AI响应]
```
## 文件格式说明
### Prompt 文件 (`*.md`)
采用Markdown格式可包含元数据块。
```markdown
# 任务:添加用户登录功能
<!-- target: add-login-feature -->
<!-- priority: high -->
<!-- estimated: 2h -->
## 描述
为现有用户模块添加登录功能,需要:
-`src/controllers/auth.js` 中添加 `login` 方法。
-`src/routes/auth.js` 中注册 `/login` 路由。
- 使用JWT生成令牌。
## 上下文
<!-- auto-injected -->
## 输出要求
1. 修改或创建的文件列表。
2. 具体的代码变更diff格式
3. 需要更新的测试文件。
```
### 任务文件 (`meta/todo.md`)
采用Markdown任务列表。
```markdown
# 待办任务
## 功能开发
- [ ] 实现prompt引擎
- [ ] 实现脚本执行器
- [ ] 添加项目初始化模板
## 文档
- [x] 编写README
- [ ] 编写架构设计文档
## 修复
- [ ] 修复Windows路径问题
```
### 配置文件 (`config/default.json`)
```json
{
"claudeCodePath": "claude",
"defaultModel": "claude-3-5-sonnet",
"projectType": "nodejs",
"templatePath": "templates",
"autoCommit": false
}
```
## 扩展机制
### 插件系统
可以编写插件来支持不同的项目类型React、Python、Go等
插件结构:
```
plugins/
└── react/
├── prompts/ # 领域特定prompt
├── scripts/ # 领域特定脚本
├── templates/ # 组件模板
└── plugin.json # 插件描述
```
### 自定义工具函数
脚本中可以加载自定义工具模块:
```javascript
const { myTool } = require('../tools/my-tool');
```
## 安全性考虑
- **沙箱执行**:脚本在受限环境中运行,禁止访问敏感目录。
- **权限控制**Git操作前需确认避免强制推送。
- **审计日志**所有AI操作和脚本执行都记录日志便于追溯。
- **密钥管理**API密钥等敏感信息不存入prompt或脚本使用环境变量。
## 性能优化
- **缓存**解析的项目结构、Git历史可缓存减少重复计算。
- **增量更新**仅注入变更相关的上下文减少prompt长度。
- **并行执行**独立任务可并行执行prompt需注意上下文隔离
## 未来架构演进
随着工具复杂度的增加,可能引入:
- **分布式执行**将任务分发给多个AI实例或计算节点。
- **版本化prompt库**prompt文件本身可版本化、比较、合并。
- **可视化编排器**图形界面拖拽组合prompt和脚本。