""" Skill TODO — liste de tâches en mémoire pour la session courante. Usage LLM : SKILL:todo ARGS:add SKILL:todo ARGS:list SKILL:todo ARGS:done SKILL:todo ARGS:delete SKILL:todo ARGS:clear """ DESCRIPTION = "Liste de tâches en mémoire (session) : add, list, done, delete, clear" USAGE = "SKILL:todo ARGS:add | list | done | delete | clear" # Stockage partagé entre tous les appels (même processus) _todos: list = [] _next_id: int = 1 def run(args: str, context) -> str: global _todos, _next_id parts = args.strip().split(None, 1) action = parts[0].lower() if parts else "" rest = parts[1].strip() if len(parts) > 1 else "" if action == "add": if not rest: return "Précise le texte de la tâche." _todos.append({"id": _next_id, "text": rest, "done": False}) _next_id += 1 return f"Tâche #{_next_id - 1} ajoutée : {rest}" if action == "list": if not _todos: return "Aucune tâche." lines = [] for t in _todos: status = "✓" if t["done"] else "○" lines.append(f" {status} #{t['id']} {t['text']}") return "Tâches :\n" + "\n".join(lines) if action == "done": if not rest: return "Précise l'ID de la tâche." try: tid = int(rest) except ValueError: return f"ID invalide : {rest}" for t in _todos: if t["id"] == tid: t["done"] = True return f"Tâche #{tid} marquée comme terminée." return f"Tâche #{tid} introuvable." if action == "delete": if not rest: return "Précise l'ID de la tâche." try: tid = int(rest) except ValueError: return f"ID invalide : {rest}" before = len(_todos) _todos = [t for t in _todos if t["id"] != tid] if len(_todos) < before: return f"Tâche #{tid} supprimée." return f"Tâche #{tid} introuvable." if action == "clear": _todos = [] _next_id = 1 return "Liste de tâches vidée." return "Action inconnue. Disponible : add, list, done, delete, clear"