MetaCraft/docs/ARCHITECTURE.md

6.1 KiB
Raw Blame 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响应。
  • 将响应解析为具体的操作指令(创建文件、修改代码、运行命令等)。

接口示例

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。

示例脚本

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格式可包含元数据块。

# 任务:添加用户登录功能

<!-- 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任务列表。

# 待办任务

## 功能开发
- [ ] 实现prompt引擎
- [ ] 实现脚本执行器
- [ ] 添加项目初始化模板

## 文档
- [x] 编写README
- [ ] 编写架构设计文档

## 修复
- [ ] 修复Windows路径问题

配置文件 (config/default.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       # 插件描述

自定义工具函数

脚本中可以加载自定义工具模块:

const { myTool } = require('../tools/my-tool');

安全性考虑

  • 沙箱执行:脚本在受限环境中运行,禁止访问敏感目录。
  • 权限控制Git操作前需确认避免强制推送。
  • 审计日志所有AI操作和脚本执行都记录日志便于追溯。
  • 密钥管理API密钥等敏感信息不存入prompt或脚本使用环境变量。

性能优化

  • 缓存解析的项目结构、Git历史可缓存减少重复计算。
  • 增量更新仅注入变更相关的上下文减少prompt长度。
  • 并行执行独立任务可并行执行prompt需注意上下文隔离

未来架构演进

随着工具复杂度的增加,可能引入:

  • 分布式执行将任务分发给多个AI实例或计算节点。
  • 版本化prompt库prompt文件本身可版本化、比较、合并。
  • 可视化编排器图形界面拖拽组合prompt和脚本。