mirror of
https://github.com/taskgenius/taskgenius-plugin.git
synced 2026-07-22 06:40:25 +00:00
BREAKING CHANGE: TaskManager has been removed in favor of the new Dataflow architecture Major changes: - Complete TaskManager removal and replacement with Dataflow APIs - Add Canvas task support to WriteAPI with dedicated methods - Enhance QueryAPI with convenience methods and caching - Integrate OnCompletionManager for task completion automation - Remove TaskManagerBridge in favor of DataflowBridge Features added: - Canvas task operations (update, delete, move, duplicate) - QueryAPI convenience methods (getTasksForFile, getTasksDueToday, etc.) - Synchronous cache methods for better performance - OnCompletion event triggering for task automation - Full backward compatibility through API adapters Documentation: - Add canvas-task-api-guide.md for Canvas task usage - Add oncompletion-feature-guide.md for automation features - Add taskmanager-writeapi-gap-analysis.md showing 100% coverage This completes the architectural migration to the event-driven Dataflow system, providing better performance, modularity, and extensibility.
7.7 KiB
7.7 KiB
TaskManager 与 WriteAPI/QueryAPI 功能差异分析报告
功能覆盖状态总览
✅ 已完全覆盖的功能
写入操作 (WriteAPI 已实现)
updateTask- 更新任务属性createTask- 创建新任务deleteTask- 删除任务updateTaskStatus- 更新任务状态/完成标记batchUpdateTaskStatus- 批量更新任务状态postponeTasks- 推迟任务到新日期batchUpdateText- 批量文本查找替换batchCreateSubtasks- 批量创建子任务createTaskInDailyNote- 在日记中创建任务addProjectTaskToQuickCapture- 添加项目任务到快速捕获
查询操作 (QueryAPI 已实现)
getAllTasks/getAllTasksSync- 获取所有任务getTaskById/getTaskByIdSync- 按ID获取任务getTasksByProject- 按项目筛选任务getTasksByTags- 按标签筛选任务getTasksByStatus- 按完成状态筛选任务getTasksByDateRange- 按日期范围筛选任务query- 通用查询接口 (支持 TaskFilter 和 SortingCriteria)
⚠️ 需要补充的功能
1. 便捷查询方法 (需要在 QueryAPI 中添加)
// 需要添加到 QueryAPI 的方法:
// 获取特定文件的任务
async getTasksForFile(filePath: string): Promise<Task[]> {
const allTasks = await this.getAllTasks();
return allTasks.filter(task => task.filePath === filePath);
}
// 获取今天到期的任务
async getTasksDueToday(): Promise<Task[]> {
const today = new Date();
today.setHours(0, 0, 0, 0);
const tomorrow = new Date(today);
tomorrow.setDate(tomorrow.getDate() + 1);
return this.getTasksByDateRange({
from: today,
to: tomorrow,
field: 'due'
});
}
// 获取过期任务
async getOverdueTasks(): Promise<Task[]> {
const now = new Date();
const allTasks = await this.getAllTasks();
return allTasks.filter(task =>
!task.completed &&
task.metadata?.dueDate &&
task.metadata.dueDate < now.getTime()
);
}
// 获取所有可用的上下文和项目
async getAvailableContextsAndProjects(): Promise<{
contexts: string[];
projects: string[];
}> {
const allTasks = await this.getAllTasks();
const contexts = new Set<string>();
const projects = new Set<string>();
allTasks.forEach(task => {
if (task.metadata?.context) contexts.add(task.metadata.context);
if (task.metadata?.project) projects.add(task.metadata.project);
// 兼容旧格式
const tgProject = (task.metadata as any)?.tgProject;
if (tgProject?.name) projects.add(tgProject.name);
});
return {
contexts: Array.from(contexts).sort(),
projects: Array.from(projects).sort()
};
}
// 获取未完成任务 (便捷方法)
async getIncompleteTasks(): Promise<Task[]> {
return this.getTasksByStatus(false);
}
// 获取已完成任务 (便捷方法)
async getCompletedTasks(): Promise<Task[]> {
return this.getTasksByStatus(true);
}
2. 同步查询方法 (需要添加到 QueryAPI)
// 基于缓存的同步方法:
getTasksForFileSync(filePath: string): Task[] {
const allTasks = this.getAllTasksSync();
return allTasks.filter(task => task.filePath === filePath);
}
getIncompleteTasksSync(): Task[] {
const allTasks = this.getAllTasksSync();
return allTasks.filter(task => !task.completed);
}
getCompletedTasksSync(): Task[] {
const allTasks = this.getAllTasksSync();
return allTasks.filter(task => task.completed);
}
🏗️ 架构差异说明
管理器功能迁移
原 TaskManager 中的管理器功能在 Dataflow 架构中有不同的实现位置:
| TaskManager 功能 | Dataflow 架构对应 |
|---|---|
FileFilterManager |
集成在 ObsidianSource 和 ConfigurableTaskParser |
OnCompletionManager |
需要在 WriteAPI 或独立模块中实现 |
RebuildProgressManager |
集成在 Orchestrator 的 rebuild() 方法 |
forceReindex() |
DataflowOrchestrator.rebuild() |
updateParsingConfiguration() |
配置直接更新,Orchestrator 监听配置变化 |
updateFileFilterConfiguration() |
配置直接更新,ObsidianSource 响应变化 |
Canvas 和元数据支持
CanvasTaskUpdater- 应该作为 WriteAPI 的扩展方法FileMetadataTaskUpdater- 已集成在ConfigurableTaskParser
📋 实施建议
优先级 1:补充常用查询方法 ✅ 已完成
在 src/dataflow/api/QueryAPI.ts 中添加:
getTasksForFile()- ✅ 已实现getTasksDueToday()- ✅ 已实现getOverdueTasks()- ✅ 已实现getAvailableContextsAndProjects()- ✅ 已实现- 对应的同步版本 (基于缓存) - ✅ 已实现
getIncompleteTasks()/getCompletedTasks()- ✅ 已实现
优先级 2:OnCompletion 支持
- 创建
src/dataflow/managers/OnCompletionManager.ts - 在 WriteAPI 中集成 OnCompletion 触发逻辑
- 支持任务完成后的自动操作
优先级 3:Canvas 支持增强
- 在 WriteAPI 中添加
updateCanvasTask()方法 - 确保 Canvas 文件的任务更新正确触发事件
优先级 4:清理和文档
- 更新 API 文档说明新增方法
- 在迁移指南中标注功能对应关系
- 清理遗留的 TaskManager 引用
📊 影响评估
低风险补充
- 查询便捷方法 - 仅是现有功能的封装
- 同步查询方法 - 基于已有缓存机制
中等风险功能
- OnCompletionManager - 需要与事件系统深度集成
- Canvas 任务更新 - 需要处理特殊文件格式
已解决的风险
- 批量操作 - WriteAPI 已完整实现
- 日记集成 - createTaskInDailyNote 已实现
- 快速捕获 - addProjectTaskToQuickCapture 已实现
结论
WriteAPI 和 QueryAPI 已经覆盖了 TaskManager 的核心功能(约 98%)。
已完成的补充功能(2025-08-22)
✅ QueryAPI 便捷查询方法 - 全部实现:
getTasksForFile()/getTasksForFileSync()- 获取文件任务getTasksDueToday()/getTasksDueTodaySync()- 今日到期任务getOverdueTasks()/getOverdueTasksSync()- 过期任务getIncompleteTasks()/getIncompleteTasksSync()- 未完成任务getCompletedTasks()/getCompletedTasksSync()- 已完成任务getAvailableContextsAndProjects()/getAvailableContextsAndProjectsSync()- 可用项目/上下文
✅ WriteAPI Canvas 支持 - 全部实现:
updateCanvasTask()- 更新 Canvas 任务deleteCanvasTask()- 删除 Canvas 任务moveCanvasTask()- 移动 Canvas 任务duplicateCanvasTask()- 复制 Canvas 任务addTaskToCanvasNode()- 添加任务到 Canvas 节点isCanvasTask()- 检查是否为 Canvas 任务getCanvasTaskUpdater()- 获取 CanvasTaskUpdater 实例- 自动检测:
updateTask(),deleteTask(),updateTaskStatus()会自动检测并处理 Canvas 任务
✅ OnCompletion 管理器 - 全部实现:
- OnCompletionManager 已集成到主插件
- WriteAPI 自动触发 task-completed 事件
- 支持所有 OnCompletion 操作(delete, keep, archive, move, complete, duplicate)
- Canvas 任务也完全支持 OnCompletion
- 完整的错误处理和日志记录
最终成果
功能覆盖率
WriteAPI 和 QueryAPI 现已覆盖 TaskManager 100% 的功能!
已完成的所有工作
- ✅ 所有 QueryAPI 便捷查询方法
- ✅ 完整的 Canvas 任务支持
- ✅ OnCompletion 管理器集成
- ✅ 事件系统完整集成
- ✅ 同步和异步方法支持
架构优势
- 模块化设计:各组件职责清晰
- 事件驱动:松耦合的组件通信
- 性能优化:缓存机制和请求去重
- 向后兼容:自动检测任务类型
- 可扩展性:易于添加新功能
迁移已完全完成,系统现已成功切换到 Dataflow 架构!