feat: 增强编码能力 - 新增代码编辑器、代码搜索、Git集成
- 新增 plugins/code_editor.py: 精准代码编辑(搜索替换、批量编辑、diff对比) - 新增 plugins/code_search.py: 代码搜索与理解(跨文件搜索、符号提取、依赖分析) - 新增 plugins/git_tools.py: Git 版本控制(status/diff/log/commit/branch) - 新增 core/ 模块: 配置管理、引擎管理、对话处理、显示输出、代码沙箱 - 修复 requirements.txt: 使用正确的 pip 包名(Pillow、opencv-python 等) - 更新 unified_tool_manager.py: 兼容 Plugin 和 Liugin 两种类名 - 更新系统提示词: 增强编程工作流指导 本次更新由 mimo 自动化执行,与开发者无关。
This commit is contained in:
commit
e22652fbbb
53 files changed
+20067
No files matched your search
@@ -0,0 +1,263 @@
|
||||
"""
|
||||
任务管理插件 - 提供任务追踪和进度管理功能
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
from datetime import datetime
|
||||
from colorama import Fore, Style
|
||||
|
||||
|
||||
class Liugin:
|
||||
"""任务管理插件 - 类似 iFlow CLI 的 todo 功能"""
|
||||
|
||||
def __init__(self):
|
||||
self.usage = """任务管理工具使用方法:
|
||||
|
||||
JSON格式示例:
|
||||
{"action": "use_tool", "tool": "task_manager", "args": "add 创建登录页面"} - 添加新任务
|
||||
{"action": "use_tool", "tool": "task_manager", "args": "list"} - 列出所有任务
|
||||
{"action": "use_tool", "tool": "task_manager", "args": "complete 1"} - 完成任务ID为1的任务
|
||||
{"action": "use_tool", "tool": "task_manager", "args": "in_progress 2"} - 将任务ID为2标记为进行中
|
||||
{"action": "use_tool", "tool": "task_manager", "args": "delete 3"} - 删除任务ID为3的任务
|
||||
{"action": "use_tool", "tool": "task_manager", "args": "clear"} - 清除所有已完成的任务
|
||||
|
||||
功能说明:
|
||||
- add <任务描述> - 添加新任务(自动分配ID)
|
||||
- list - 列出所有任务及其状态
|
||||
- complete <任务ID> - 标记任务为已完成
|
||||
- in_progress <任务ID> - 标记任务为进行中
|
||||
- delete <任务ID> - 删除指定任务
|
||||
- clear - 清除所有已完成的任务
|
||||
|
||||
状态说明:
|
||||
- pending: 待处理
|
||||
- in_progress: 进行中
|
||||
- completed: 已完成
|
||||
- failed: 失败"""
|
||||
self.cli = None
|
||||
self.tasks_file = "tasks.json"
|
||||
self.tasks = []
|
||||
self._load_tasks()
|
||||
|
||||
def set_cli(self, cli):
|
||||
"""设置CLI实例引用"""
|
||||
self.cli = cli
|
||||
# 注册插件命令
|
||||
self.cli.register_liugin_command('task', self.command_handler)
|
||||
self.cli.register_liugin_command('todo', self.command_handler)
|
||||
|
||||
def command_handler(self, args):
|
||||
"""处理 /task 或 /todo 命令"""
|
||||
return self.handle(args)
|
||||
|
||||
def get_tool_info(self):
|
||||
return {
|
||||
"name": "task_manager",
|
||||
"description": "任务管理工具,提供任务追踪和进度管理功能,支持添加、完成、删除任务",
|
||||
"keywords": ["任务", "task", "todo", "管理", "进度", "追踪", "list", "complete"],
|
||||
"usage": self.usage
|
||||
}
|
||||
|
||||
def _load_tasks(self):
|
||||
"""从文件加载任务"""
|
||||
try:
|
||||
if os.path.exists(self.tasks_file):
|
||||
with open(self.tasks_file, 'r', encoding='utf-8') as f:
|
||||
self.tasks = json.load(f)
|
||||
except Exception as e:
|
||||
self.tasks = []
|
||||
|
||||
def _save_tasks(self):
|
||||
"""保存任务到文件"""
|
||||
try:
|
||||
with open(self.tasks_file, 'w', encoding='utf-8') as f:
|
||||
json.dump(self.tasks, f, ensure_ascii=False, indent=2)
|
||||
except Exception as e:
|
||||
return f"保存任务失败: {e}"
|
||||
return None
|
||||
|
||||
def handle(self, args):
|
||||
"""处理任务管理请求"""
|
||||
try:
|
||||
parts = args.strip().split()
|
||||
if not parts:
|
||||
return self._list_tasks()
|
||||
|
||||
operation = parts[0].lower()
|
||||
|
||||
if operation == "add":
|
||||
# 添加任务
|
||||
if len(parts) < 2:
|
||||
return "错误:请提供任务描述。格式: add <任务描述>"
|
||||
task_desc = " ".join(parts[1:])
|
||||
return self._add_task(task_desc)
|
||||
|
||||
elif operation == "list":
|
||||
# 列出任务
|
||||
return self._list_tasks()
|
||||
|
||||
elif operation == "complete":
|
||||
# 完成任务
|
||||
if len(parts) < 2:
|
||||
return "错误:请提供任务ID。格式: complete <任务ID>"
|
||||
task_id = parts[1]
|
||||
return self._update_task_status(task_id, "completed")
|
||||
|
||||
elif operation == "in_progress":
|
||||
# 标记为进行中
|
||||
if len(parts) < 2:
|
||||
return "错误:请提供任务ID。格式: in_progress <任务ID>"
|
||||
task_id = parts[1]
|
||||
return self._update_task_status(task_id, "in_progress")
|
||||
|
||||
elif operation == "delete":
|
||||
# 删除任务
|
||||
if len(parts) < 2:
|
||||
return "错误:请提供任务ID。格式: delete <任务ID>"
|
||||
task_id = parts[1]
|
||||
return self._delete_task(task_id)
|
||||
|
||||
elif operation == "clear":
|
||||
# 清除已完成任务
|
||||
return self._clear_completed()
|
||||
|
||||
else:
|
||||
return f"错误:不支持的操作 '{operation}'。支持的操作有: add, list, complete, in_progress, delete, clear"
|
||||
|
||||
except Exception as e:
|
||||
return f"任务管理操作错误: {str(e)}"
|
||||
|
||||
def _add_task(self, description):
|
||||
"""添加新任务"""
|
||||
# 使用最大ID+1的方式分配ID,避免删除后ID重复
|
||||
existing_ids = [int(t.get("id", 0)) for t in self.tasks if t.get("id", "").isdigit()]
|
||||
task_id = str(max(existing_ids, default=0) + 1)
|
||||
new_task = {
|
||||
"id": task_id,
|
||||
"task": description,
|
||||
"status": "pending",
|
||||
"created_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"priority": "medium"
|
||||
}
|
||||
self.tasks.append(new_task)
|
||||
error = self._save_tasks()
|
||||
if error:
|
||||
return error
|
||||
return f"✅ 已添加任务 #{task_id}: {description}"
|
||||
|
||||
def _list_tasks(self):
|
||||
"""列出所有任务"""
|
||||
if not self.tasks:
|
||||
return "📝 当前没有任务"
|
||||
|
||||
result = f"\n📋 任务列表 (共 {len(self.tasks)} 个任务)\n"
|
||||
result += "=" * 50 + "\n"
|
||||
|
||||
pending_count = 0
|
||||
in_progress_count = 0
|
||||
completed_count = 0
|
||||
|
||||
for task in self.tasks:
|
||||
status = task.get('status', 'pending')
|
||||
task_id = task.get('id', '?')
|
||||
description = task.get('task', '')
|
||||
created_at = task.get('created_at', '')
|
||||
|
||||
# 统计
|
||||
if status == 'pending':
|
||||
pending_count += 1
|
||||
status_icon = "⏳"
|
||||
status_color = Fore.YELLOW
|
||||
elif status == 'in_progress':
|
||||
in_progress_count += 1
|
||||
status_icon = "🔄"
|
||||
status_color = Fore.CYAN
|
||||
elif status == 'completed':
|
||||
completed_count += 1
|
||||
status_icon = "✅"
|
||||
status_color = Fore.GREEN
|
||||
else:
|
||||
status_icon = "❌"
|
||||
status_color = Fore.RED
|
||||
|
||||
result += f"{status_icon} [{task_id}] {status_color}{status}{Style.RESET_ALL} - {description}\n"
|
||||
result += f" 创建时间: {created_at}\n\n"
|
||||
|
||||
result += "=" * 50 + "\n"
|
||||
result += f"📊 统计: {Fore.YELLOW}待处理 {pending_count}{Style.RESET_ALL} | {Fore.CYAN}进行中 {in_progress_count}{Style.RESET_ALL} | {Fore.GREEN}已完成 {completed_count}{Style.RESET_ALL}\n"
|
||||
|
||||
return result
|
||||
|
||||
def _update_task_status(self, task_id, new_status):
|
||||
"""更新任务状态"""
|
||||
for task in self.tasks:
|
||||
if task.get('id') == task_id:
|
||||
old_status = task.get('status')
|
||||
task['status'] = new_status
|
||||
if new_status == 'completed':
|
||||
task['completed_at'] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
error = self._save_tasks()
|
||||
if error:
|
||||
return error
|
||||
return f"✅ 任务 #{task_id} 状态已更新: {old_status} → {new_status}"
|
||||
|
||||
return f"❌ 未找到任务ID: {task_id}"
|
||||
|
||||
def _delete_task(self, task_id):
|
||||
"""删除任务"""
|
||||
for i, task in enumerate(self.tasks):
|
||||
if task.get('id') == task_id:
|
||||
deleted_task = self.tasks.pop(i)
|
||||
error = self._save_tasks()
|
||||
if error:
|
||||
return error
|
||||
return f"🗑️ 已删除任务 #{task_id}: {deleted_task.get('task', '')}"
|
||||
|
||||
return f"❌ 未找到任务ID: {task_id}"
|
||||
|
||||
def _clear_completed(self):
|
||||
"""清除所有已完成的任务"""
|
||||
completed_count = len([t for t in self.tasks if t.get('status') == 'completed'])
|
||||
if completed_count == 0:
|
||||
return "📝 没有已完成的任务需要清除"
|
||||
|
||||
self.tasks = [t for t in self.tasks if t.get('status') != 'completed']
|
||||
error = self._save_tasks()
|
||||
if error:
|
||||
return error
|
||||
return f"✅ 已清除 {completed_count} 个已完成的任务"
|
||||
|
||||
|
||||
# 测试函数
|
||||
def test_plugin():
|
||||
"""测试插件功能"""
|
||||
plugin = Plugin()
|
||||
print("任务管理插件测试:")
|
||||
|
||||
print("\n1. 添加任务:")
|
||||
print(plugin.handle("add 创建登录页面"))
|
||||
print(plugin.handle("add 实现用户认证"))
|
||||
print(plugin.handle("add 添加数据库连接"))
|
||||
|
||||
print("\n2. 列出任务:")
|
||||
print(plugin.handle("list"))
|
||||
|
||||
print("\n3. 标记任务为进行中:")
|
||||
print(plugin.handle("in_progress 1"))
|
||||
|
||||
print("\n4. 完成任务:")
|
||||
print(plugin.handle("complete 1"))
|
||||
|
||||
print("\n5. 再次列出任务:")
|
||||
print(plugin.handle("list"))
|
||||
|
||||
print("\n6. 清除已完成任务:")
|
||||
print(plugin.handle("clear"))
|
||||
|
||||
print("\n7. 最终任务列表:")
|
||||
print(plugin.handle("list"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_plugin()
|
||||
Reference in new issue
Block a user