
// 更新任务时自动同步依赖关系 public String updateTask(int taskId, String status, ListInteger addBlockedBy, ListInteger addBlocks) throws IOException { MapString, Object task loadTask(taskId); if (status ! null) { task.put(status, status); // 任务完成时从其他任务的 blockedBy 中移除 if (completed.equals(status)) { clearDependency(taskId); } } if (addBlocks ! null !addBlocks.isEmpty()) { // 双向更新更新被阻塞任务的 blockedBy 列表 for (int blockedId : distinctBlocks) { try { MapString, Object blockedTask loadTask(blockedId); SuppressWarnings(unchecked) ListInteger blockedByList (ListInteger) blockedTask.get(blockedBy); if (!blockedByList.contains(taskId)) { blockedByList.add(taskId); saveTask(blockedTask); } } catch (Exception e) { // 忽略不存在的任务 } } } // 依赖自动化更新一个任务时自动更新相关任务的依赖关系 // 完成清理任务完成后自动清理对它的阻塞依赖 // 容错处理忽略不存在的任务ID }关系自动维护更新一个任务的依赖时自动更新相关任务完成时清理任务完成后自动清理阻塞关系容错设计忽略不存在任务的引用数据一致性确保依赖关系的双向一致性复杂查询与可视化展示java// 列出所有任务的摘要信息 public String listAllTasks() throws IOException { ListMapString, Object tasks new ArrayList(); Files.list(tasksDir) .filter(p - p.getFileName().toString().endsWith(.json)) .sorted() // 按文件名排序通常是ID顺序 .forEach(p - { // 逐个加载任务文件 }); StringBuilder sb new StringBuilder(); for (MapString, Object task : tasks) { String status (String) task.get(status); String marker switch(status) { case pending - [ ]; case in_progress - []; case completed - [x]; default - [?]; }; int id ((Double) task.get(id)).intValue(); String subject (String) task.get(subject); SuppressWarnings(unchecked) ListInteger blockedBy (ListInteger) task.get(blockedBy); String blockedStr (blockedBy ! null !blockedBy.isEmpty()) ? (blocked by: blockedBy ) : ; // 状态可视化[ ]待办 []进行中 [x]已完成 // 依赖提示显示哪些任务阻塞了当前任务 // 简洁摘要只显示关键信息 sb.append(String.format(%s #%d: %s%s\n, marker, id, subject, blockedStr)); } return sb.toString().trim(); }状态可视化用图标清晰展示任务状态依赖提示明确显示阻塞关系批量加载高效加载所有任务人性化格式便于人类阅读和理解任务工具生态系统java// 完整的任务工具集定义 public enum ToolType { TASK_CREATE(task_create, Create a new task.), // CRUD: Create TASK_GET(task_get, Get full details of a task by ID.), // CRUD: Read TASK_UPDATE(task_update, Update a tasks status or dependencies.), // CRUD: Update TASK_LIST(task_list, List all tasks with status summary.); // CRUD: List // 完整CRUD创建、读取、更新、删除(通过更新状态为完成) // 语义清晰每个工具单一职责 // 与基础工具分离任务管理工具独立于文件操作工具 }完整CRUD提供完整的任务管理操作单一职责每个工具功能明确语义接口名称明确便于LLM理解分离关注任务工具与基础文件工具分离JSON存储格式java// 任务存储格式示例 private static final Gson gson new GsonBuilder().setPrettyPrinting().create(); private void saveTask(MapString, Object task) throws IOException { int id ((Double) task.get(id)).intValue(); Path path tasksDir.resolve(task_ id .json); Files.writeString(path, gson.toJson(task)); // 美化的JSON格式 } // 标准化格式每个任务存储为格式化的JSON文件 // 命名规范task_id.json // 人类可读美化的JSON便于手动查看和编辑 // 可互操作标准JSON格式支持外部工具处理标准化存储JSON是通用的数据交换格式可读性美化格式便于调试可扩展随时可以添加新字段互操作性其他工具可以读取任务文件架构演进与价值从 AgentWithTodo 到 TaskSystem 的升级维度AgentWithTodoTaskSystem存储方式内存存储文件系统持久化依赖管理无依赖关系双向依赖管理数据持久性重启丢失永久保存任务复杂性简单待办复杂项目管理协同能力单人使用支持团队协