Files
context-paging/output/turn_019.json
2026-03-28 09:01:07 +00:00

2 lines
18 KiB
JSON

{"id":"chatcmpl-a2194b737ddb4bcd","object":"chat.completion","created":1774196940,"model":"NousResearch\/Hermes-3-Llama-3.2-3B","choices":[{"index":0,"message":{"role":"assistant","content":"import argparse\nimport json\nfrom collections import defaultdict\n\nclass Task:\n def __init__(self, title, description=None, completed=False, priority='medium', due_date=None, tags=None, depends_on=None, recurrence=None, next_occurrence=None, time_spent=None, parent_id=None, progress=None, assigned_to=None, estimated_minutes=None):\n self.id = self._generate_id()\n self.title = title\n self.description = description\n self.completed = completed\n self.priority = priority\n self.due_date = due_date\n self.tags = tags if tags is not None else set()\n self.depends_on = depends_on if depends_on is not None else set()\n self.notes = []\n self.recurrence = recurrence\n self.next_occurrence = next_occurrence\n self.time_spent = time_spent\n self.parent_id = parent_id\n self.progress = progress\n self.assigned_to = assigned_to\n self.estimated_minutes = estimated_minutes\n self.created_at = datetime.now()\n\n @staticmethod\n def _generate_id():\n return str(uuid.uuid4())\n\nclass TaskManager:\n def __init__(self):\n self.tasks = []\n self.tasks_by_id = defaultdict(list)\n self.dependencies = defaultdict(set)\n self.notes = []\n self.recurring_tasks = defaultdict(list)\n self.subtasks = defaultdict(list)\n self.in_progress_tasks = defaultdict(list)\n self.assigned_tasks = defaultdict(set)\n self.estimations = defaultdict(float)\n\n def add_task(self, title, description=None, due_date=None, tags=None, depends_on=None, recurrence=None, next_occurrence=None, time_spent=None, parent_id=None, progress=None, assigned_to=None, estimated_minutes=None):\n task = Task(title, description, due_date, tags, depends_on, recurrence, next_occurrence, time_spent, parent_id, progress, assigned_to, estimated_minutes)\n self.tasks.append(task)\n\n def list_tasks(self, show_completed=False):\n if show_completed:\n tasks = self.tasks\n else:\n tasks = [task for task in self.tasks if not task.completed]\n for task in tasks:\n color = Fore.YELLOW if task.priority == 'medium' else Fore.GREEN if task.priority == 'low' else Fore.RED\n if task.progress is None:\n print(f\"{color}ID: {task.id}, Title: {task.title}, Description: {task.description}, Completed: {task.completed}, Priority: {task.priority}, Tags: {', '.join(task.tags)}, Depends On: {', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on])}, Time Spent: {task.time_spent}, Assigned To: {task.assigned_to}, Estimated Minutes: {task.estimated_minutes}{Style.RESET_ALL}\")\n else:\n print(f\"{color}ID: {task.id}, Title: {task.title}, Description: {task.description}, Completed: {task.completed}, Priority: {task.priority}, Tags: {', '.join(task.tags)}, Depends On: {', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on])}, Time Spent: {task.time_spent}, Assigned To: {task.assigned_to}, Estimated Minutes: {task.estimated_minutes}{Style.RESET_ALL}\")\n\n def complete_task(self, task_id):\n for task in self.tasks:\n if task.id == task_id:\n task.completed = True\n break\n\n def delete_task(self, task_id):\n for task in self.tasks:\n if task.id == task_id:\n self.tasks.remove(task)\n break\n\n def save_to_file(self, filepath):\n data = {\n 'tasks': [task.to_dict() for task in self.tasks],\n 'notes': self.notes\n }\n with open(filepath, 'w') as f:\n json.dump(data, f)\n\n @staticmethod\n def load_from_file(filepath):\n with open(filepath, 'r') as f:\n data = json.load(f)\n task_manager = TaskManager()\n task_manager.tasks = [Task.from_dict(task) for task in data['tasks']]\n task_manager.notes = data['notes']\n return task_manager\n\n def add_note(self, task_id, content):\n for task in self.tasks:\n if task.id == task_id:\n task.notes.append(TaskNote(content, datetime.now()))\n break\n\n def list_notes(self, task_id):\n for task in self.tasks:\n if task.id == task_id:\n for note in task.notes:\n print(f\"ID: {note.id}, Content: {note.content}, Created At: {note.created_at}\")\n\n def search(self, query, show_completed=False):\n if show_completed:\n tasks = self.tasks\n else:\n tasks = [task for task in self.tasks if not task.completed]\n for task in tasks:\n if re.search(query, task.title.lower() + ' ' + task.description.lower(), re.IGNORECASE):\n color = Fore.YELLOW\n print(f\"{color}ID: {task.id}, Title: {task.title}, Description: {task.description}, Completed: {task.completed}, Priority: {task.priority}, Tags: {', '.join(task.tags)}, Depends On: {', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on])}, Time Spent: {task.time_spent}, Assigned To: {task.assigned_to}, Estimated Minutes: {task.estimated_minutes}{Style.RESET_ALL}\")\n else:\n print(f\"ID: {task.id}, Title: {task.title}, Description: {task.description}, Completed: {task.completed}, Priority: {task.priority}, Tags: {', '.join(task.tags)}, Depends On: {', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on])}, Time Spent: {task.time_spent}, Assigned To: {task.assigned_to}, Estimated Minutes: {task.estimated_minutes}\")\n\n def export(self, filepath, format):\n if format == 'csv':\n with open(filepath, 'w', newline='') as csvfile:\n writer = csv.writer(csvfile)\n writer.writerow(['ID', 'Title', 'Description', 'Completed', 'Priority', 'Tags', 'Depends On', 'Time Spent', 'Progress', 'Assigned To', 'Estimated Minutes'])\n for task in self.tasks:\n writer.writerow([task.id, task.title, task.description, task.completed, task.priority, ', '.join(task.tags), ', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on]), task.time_spent, task.progress, task.assigned_to, task.estimated_minutes])\n elif format == 'markdown':\n print(\"TODO: Implement markdown export\")\n elif format == 'json':\n print(\"TODO: Implement JSON export (different from internal format)\")\n\n def add_recurring_task(self, task_id, recurrence, next_occurrence):\n for task in self.tasks:\n if task.id == task_id:\n task.recurrence = recurrence\n task.next_occurrence = next_occurrence\n self.recurring_tasks[recurrence].append(task)\n break\n\n def list_recurring_tasks(self):\n for recurrence, tasks in self.recurring_tasks.items():\n print(f\"Recurrence: {recurrence}\")\n for task in tasks:\n color = Fore.YELLOW if task.priority == 'medium' else Fore.GREEN if task.priority == 'low' else Fore.RED\n print(f\"{color}ID: {task.id}, Title: {task.title}, Description: {task.description}, Completed: {task.completed}, Priority: {task.priority}, Tags: {', '.join(task.tags)}, Depends On: {', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on])}, Time Spent: {task.time_spent}{Style.RESET_ALL}\")\n\n def add_subtask(self, parent_id, task_id):\n for task in self.tasks:\n if task.id == parent_id:\n task.subtasks.append(task_id)\n break\n\n def list_tasks(self):\n for task in self.tasks:\n color = Fore.YELLOW if task.priority == 'medium' else Fore.GREEN if task.priority == 'low' else Fore.RED\n if task.progress is None:\n print(f\"{color}ID: {task.id}, Title: {task.title}, Description: {task.description}, Completed: {task.completed}, Priority: {task.priority}, Tags: {', '.join(task.tags)}, Depends On: {', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on])}, Time Spent: {task.time_spent}, Assigned To: {task.assigned_to}, Estimated Minutes: {task.estimated_minutes}{Style.RESET_ALL}\")\n else:\n print(f\"{color}ID: {task.id}, Title: {task.title}, Description: {task.description}, Completed: {task.completed}, Priority: {task.priority}, Tags: {', '.join(task.tags)}, Depends On: {', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on])}, Time Spent: {task.time_spent}, Assigned To: {task.assigned_to}, Estimated Minutes: {task.estimated_minutes}{Style.RESET_ALL}\")\n\n def assign_task(self, task_id, assignee):\n for task in self.tasks:\n if task.id == task_id:\n task.assigned_to = assignee\n self.assigned_tasks[assignee].add(task_id)\n break\n\n def unassign_task(self, task_id):\n for task in self.tasks:\n if task.id == task_id:\n task.assigned_to = None\n self.assigned_tasks[task.assigned_to].remove(task_id)\n break\n\n def mine(self):\n for task in self.assigned_tasks[self.assigned_tasks.keys()[0]]:\n color = Fore.YELLOW if task.priority == 'medium' else Fore.GREEN if task.priority == 'low' else Fore.RED\n print(f\"{color}ID: {task.id}, Title: {task.title}, Description: {task.description}, Completed: {task.completed}, Priority: {task.priority}, Tags: {', '.join(task.tags)}, Depends On: {', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on])}, Time Spent: {task.time_spent}, Assigned To: {task.assigned_to}, Estimated Minutes: {task.estimated_minutes}{Style.RESET_ALL}\")\n\n def stats(self):\n for task in self.tasks:\n self.estimations[task.id] += (task.time_spent - task.estimated_minutes) \/ task.estimated_minutes * 100\n for task in self.tasks:\n color = Fore.YELLOW if task.estimations[task.id] > 20 else Fore.GREEN if 0 <= task.estimations[task.id] <= 20 else Fore.RED\n print(f\"{color}ID: {task.id}, Title: {task.title}, Description: {task.description}, Completed: {task.completed}, Priority: {task.priority}, Tags: {', '.join(task.tags)}, Depends On: {', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on])}, Time Spent: {task.time_spent}, Estimated Minutes: {task.estimated_minutes}, Accuracy: {task.estimations[task.id]:.2f}{Style.RESET_ALL}\")\n\ndef main():\n parser = argparse.ArgumentParser(description='Task Manager CLI')\n subparsers = parser.add_subparsers(dest='command')\n\n add_parser = subparsers.add_parser('add', help='Add a new task')\n add_parser.add_argument('title', help='Task title')\n add_parser.add_argument('-d', '--description', help='Task description', default=None)\n add_parser.add_argument('--due', help='Due date (YYYY-MM-DD)', default=None)\n add_parser.add_argument('--tags', nargs='*', help='Tags for the task')\n add_parser.add_argument('--depends', nargs='*', help='Task IDs that this task depends on')\n add_parser.add_argument('--note', nargs=2, metavar=('TASK_ID', 'CONTENT'), help='Add a note to a task')\n add_parser.add_argument('--recur', help='Recurrence (daily, weekly, monthly)')\n add_parser.add_argument('--start', help='Start tracking time on a task')\n add_parser.add_argument('--parent', help='Parent task ID')\n add_parser.add_argument('--progress', type=int, help='Progress percentage')\n add_parser.add_argument('--template', help='Use template for task')\n add_parser.add_argument('--assign', nargs='?', help='Assign task')\n add_parser.add_argument('--estimate', type=int, help='Set estimated minutes')\n\n list_parser = subparsers.add_parser('list', help='List all tasks')\n list_parser.add_argument('--tag', help='Filter by tag')\n list_parser.add_argument('--completed', action='store_true', help='Include completed tasks')\n list_parser.add_argument('--search', help='Search for tasks')\n\n complete_parser = subparsers.add_parser('complete', help='Mark a task as done')\n complete_parser.add_argument('id', help='Task ID')\n\n delete_parser = subparsers.add_parser('delete', help='Delete a task')\n delete_parser.add_argument('id', help='Task ID')\n\n undo_parser = subparsers.add_parser('undo', help='Undo the last action')\n\n overdue_parser = subparsers.add_parser('overdue', help='Show overdue tasks')\n overdue_parser.add_argument('--all', action='store_true', help='Show all overdue tasks')\n\n tags_parser = subparsers.add_parser('tags', help='List all used tags')\n\n history_parser = subparsers.add_parser('history', help='Show recent actions')\n\n export_parser = subparsers.add_parser('export', help='Export tasks')\n export_parser.add_argument('filepath', help='Filepath for export')\n export_parser.add_argument('format', choices=['csv', 'markdown', 'json'], help='Export format')\n\n recurring_parser = subparsers.add_parser('recurring', help='List all recurring tasks')\n\n times_parser = subparsers.add_parser('times', help='Show total time per task')\n\n in_progress_parser = subparsers.add_parser('in-progress', help='Show tasks with progress > 0 and < 100')\n\n mine_parser = subparsers.add_parser('mine', help='Show tasks assigned to current user')\n\n assign_parser = subparsers.add_parser('assign', help='Assign a task')\n assign_parser.add_argument('id', help='Task ID')\n assign_parser.add_argument('assignee', help='Assignee username')\n\n unassign_parser = subparsers.add_parser('unassign', help='Unassign a task')\n unassign_parser.add_argument('id', help='Task ID')\n\n stats_parser = subparsers.add_parser('stats', help='Show estimation accuracy')\n\n args = parser.parse_args()\n\n task_manager = TaskManager()\n\n if args.command == 'add':\n if args.template:\n task_manager.new_task(args.template, args.title, args.due, args.tags, args.depends)\n else:\n task_manager.add_task(args.title, args.description, args.due, args.tags, args.depends)\n if args.note:\n task_id, content = args.note\n task_manager.add_note(task_id, content)\n if args.recur:\n task_manager.add_recurring_task(args.id, args.recur, datetime.now())\n if args.start:\n task_manager.start_tracking(args.start)\n if args.parent:\n task_manager.add_subtask(args.parent, args.id)\n if args.progress:\n task_manager.tasks[args.id].progress = args.progress\n if args.estimate:\n task_manager.tasks[args.id].estimated_minutes = args.estimate\n elif args.command == 'list':\n if args.tag:\n tasks = [task for task in task_manager.tasks if args.tag in [tag for task in task_manager.tasks for tag in task.tags]]\n elif args.completed:\n tasks = task_manager.tasks\n else:\n if args.search:\n task_manager.search(args.search)\n else:\n for task in task_manager.tasks:\n color = Fore.YELLOW if task.priority == 'medium' else Fore.GREEN if task.priority == 'low' else Fore.RED\n print(f\"{color}ID: {task.id}, Title: {task.title}, Description: {task.description}, Completed: {task.completed}, Priority: {task.priority}, Tags: {', '.join(task.tags)}, Depends On: {', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on])}, Time Spent: {task.time_spent}, Assigned To: {task.assigned_to}, Estimated Minutes: {task.estimated_minutes}{Style.RESET_ALL}\")\n elif args.command == 'complete':\n task_manager.complete_task(args.id)\n elif args.command == 'delete':\n task_manager.delete_task(args.id)\n elif args.command == 'undo':\n task_manager.undo()\n elif args.command == 'overdue':\n if args.all:\n overdue = [task for task in task_manager.tasks if task.completed and task.due_date < datetime.now().date()]\n else:\n overdue = [task for task in task_manager.tasks if task.completed and task.due_date < datetime.now().date()]\n for task in overdue:\n print(f\"[OVERDUE] ID: {task.id}, Title: {task.title}\")\n elif args.command == 'tags':\n task_manager.list_tags()\n elif args.command == 'export':\n task_manager.export(args.filepath, args.format)\n elif args.command == 'recurring':\n task_manager.list_recurring_tasks()\n elif args.command == 'times':\n task_manager.times()\n elif args.command == 'in-progress':\n for task in task_manager.in_progress_tasks[args.progress]:\n color = Fore.YELLOW if task.priority == 'medium' else Fore.GREEN if task.priority == 'low' else Fore.RED\n print(f\"{color}ID: {task.id}, Title: {task.title}, Description: {task.description}, Completed: {task.completed}, Priority: {task.priority}, Tags: {', '.join(task.tags)}, Depends On: {', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on])}, Time Spent: {task.time_spent}{Style.RESET_ALL}\")\n elif args.command == 'mine':\n task_manager.mine()\n elif args.command == 'assign':\n task_manager.assign_task(args.id, args.assignee)\n elif args.command == 'unassign':\n task_manager.unassign_task(args.id)\n elif args.command == 'stats':\n task_manager.stats()\n\nif __name__ == '__main__':\n main()","refusal":null,"annotations":null,"audio":null,"function_call":null,"tool_calls":[],"reasoning":null},"logprobs":null,"finish_reason":"stop","token_ids":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":27411,"total_tokens":31389,"completion_tokens":3978,"prompt_tokens_details":null},"prompt_token_ids":null,"kv_transfer_params":null}