2025-12-08 17:58:53 +08:00
|
|
|
|
/**
|
2025-12-09 18:01:22 +08:00
|
|
|
|
* bootstrap.js - MetaCraft 自举循环AI工具脚本
|
|
|
|
|
|
*
|
|
|
|
|
|
* 此脚本描述MetaCraft的自举循环逻辑,供AI参考使用。
|
|
|
|
|
|
* 实际执行由外部AI工具完成,本项目不包含执行环境。
|
|
|
|
|
|
*
|
|
|
|
|
|
* 功能描述:
|
|
|
|
|
|
* 1. 读取待办任务列表(meta/todo.md)
|
|
|
|
|
|
* 2. 解析任务分类和状态
|
|
|
|
|
|
* 3. 显示未完成的任务供用户选择
|
|
|
|
|
|
* 4. 查找与选中任务对应的prompt文件
|
|
|
|
|
|
* 5. 调用run-prompt执行选中的prompt
|
|
|
|
|
|
* 6. 询问用户是否标记任务为完成,并更新任务状态
|
|
|
|
|
|
*
|
|
|
|
|
|
* 输入:无(交互式)
|
|
|
|
|
|
* 输出:执行选中的prompt任务,更新任务状态
|
2025-12-08 17:58:53 +08:00
|
|
|
|
*
|
2025-12-09 18:01:22 +08:00
|
|
|
|
* 伪代码逻辑:
|
2025-12-08 17:58:53 +08:00
|
|
|
|
*/
|
|
|
|
|
|
|
2025-12-09 18:01:22 +08:00
|
|
|
|
// 主函数:自举循环入口
|
|
|
|
|
|
// 返回:无(交互式流程)
|
|
|
|
|
|
function bootstrapLoop() {
|
|
|
|
|
|
// 步骤1:读取待办任务文件
|
|
|
|
|
|
// 使用文件系统API读取meta/todo.md内容
|
2025-12-08 17:58:53 +08:00
|
|
|
|
|
2025-12-09 18:01:22 +08:00
|
|
|
|
// 步骤2:解析任务
|
|
|
|
|
|
// 调用parseTodo函数解析任务列表,得到tasks数组
|
2025-12-08 17:58:53 +08:00
|
|
|
|
|
2025-12-09 18:01:22 +08:00
|
|
|
|
// 步骤3:筛选未完成的任务
|
|
|
|
|
|
// 过滤出checked为false的任务,得到pendingTasks
|
2025-12-08 17:58:53 +08:00
|
|
|
|
|
2025-12-09 18:01:22 +08:00
|
|
|
|
// 步骤4:显示任务列表
|
|
|
|
|
|
// 格式化输出每个未完成任务的序号、类别和描述
|
2025-12-08 17:58:53 +08:00
|
|
|
|
|
2025-12-09 18:01:22 +08:00
|
|
|
|
// 步骤5:获取用户选择
|
|
|
|
|
|
// 通过命令行交互询问用户选择任务编号或跳过
|
2025-12-08 17:58:53 +08:00
|
|
|
|
|
2025-12-09 18:01:22 +08:00
|
|
|
|
// 步骤6:查找对应的prompt文件
|
|
|
|
|
|
// 调用findPromptForTask函数,根据任务描述查找prompt文件
|
|
|
|
|
|
// 如果未找到,提示用户创建
|
2025-12-08 17:58:53 +08:00
|
|
|
|
|
2025-12-09 18:01:22 +08:00
|
|
|
|
// 步骤7:执行prompt
|
|
|
|
|
|
// 调用executePromptFile函数(来自run-prompt.js)执行找到的prompt文件
|
2025-12-08 17:58:53 +08:00
|
|
|
|
|
2025-12-09 18:01:22 +08:00
|
|
|
|
// 步骤8:确认完成状态
|
|
|
|
|
|
// 询问用户任务是否已完成,如果是则调用updateTodo更新任务状态
|
2025-12-08 17:58:53 +08:00
|
|
|
|
|
2025-12-09 18:01:22 +08:00
|
|
|
|
// 注意:此函数为伪代码描述,实际实现由外部AI工具完成
|
2025-12-08 17:58:53 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-09 18:01:22 +08:00
|
|
|
|
// 辅助函数:解析待办任务内容
|
|
|
|
|
|
// 参数:todoContent - 待办任务文件的文本内容
|
|
|
|
|
|
// 返回:任务对象数组,每个对象包含category, description, checked, raw等属性
|
|
|
|
|
|
function parseTodo(todoContent) {
|
|
|
|
|
|
// 按行分割内容
|
|
|
|
|
|
// 遍历每一行,识别分类标题(## 分类名)
|
|
|
|
|
|
// 识别任务项(- [ ] 任务描述 或 - [x] 任务描述)
|
|
|
|
|
|
// 构建任务对象并添加到数组
|
|
|
|
|
|
// 返回任务数组
|
|
|
|
|
|
}
|
2025-12-08 17:58:53 +08:00
|
|
|
|
|
2025-12-09 18:01:22 +08:00
|
|
|
|
// 辅助函数:查找任务对应的prompt文件
|
|
|
|
|
|
// 参数:task - 任务对象
|
|
|
|
|
|
// 返回:prompt文件路径或null
|
|
|
|
|
|
function findPromptForTask(task) {
|
|
|
|
|
|
// 将任务描述转换为kebab-case文件名
|
|
|
|
|
|
// 尝试多种可能的文件名格式:
|
|
|
|
|
|
// - 直接使用描述转换
|
|
|
|
|
|
// - 添加implement-前缀
|
|
|
|
|
|
// - 添加task-前缀
|
|
|
|
|
|
// 检查prompts目录下是否存在对应文件
|
|
|
|
|
|
// 返回找到的路径,否则返回null
|
2025-12-08 17:58:53 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-09 18:01:22 +08:00
|
|
|
|
// 辅助函数:更新待办任务状态
|
|
|
|
|
|
// 参数:tasks - 所有任务数组,updatedTask - 要更新的任务对象
|
|
|
|
|
|
// 返回:无(直接写入文件)
|
|
|
|
|
|
function updateTodo(tasks, updatedTask) {
|
|
|
|
|
|
// 读取待办任务文件内容
|
|
|
|
|
|
// 找到对应任务描述的行
|
|
|
|
|
|
// 将- [ ]替换为- [x]标记为完成
|
|
|
|
|
|
// 将更新后的内容写回文件
|
2025-12-08 17:58:53 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-09 18:01:22 +08:00
|
|
|
|
// 导出函数供AI参考
|
|
|
|
|
|
// 注意:这些函数不会实际执行,仅作为文档说明
|