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