import sqlite3 from typing import List, Dict, Any DB_NAME = "/home/puh/scud_orion_ai_v2/data/scud_orion_ai.db" def db_get_active_system_prompt() -> str: try: conn = sqlite3.connect(DB_NAME) cursor = conn.cursor() cursor.execute("SELECT prompt_text FROM system_prompts WHERE name = 'main_agent' AND is_active = 1 LIMIT 1") row = cursor.fetchone() conn.close() if row and row[0]: return row[0].replace("**", "") except Exception as e: print(f"Ошибка чтения системного промпта из БД: {e}") return "Ты — интеллектуальный ИИ-ассистент и архитектурный координатор проекта SCUD Orion AI." def db_add_system_prompt(name: str = "main_agent", prompt_text: str = "") -> dict: clean_text = prompt_text.replace("**", "") conn = sqlite3.connect(DB_NAME) cursor = conn.cursor() cursor.execute(""" INSERT INTO system_prompts (name, prompt_text, is_active) VALUES (?, ?, 1) ON CONFLICT(name) DO UPDATE SET prompt_text=excluded.prompt_text, updated_at=CURRENT_TIMESTAMP """, (name, clean_text)) conn.commit() conn.close() return {"status": "success", "message": f"Системный промпт '{name}' успешно обновлен в базе!"} def db_get_tasks(status: str = None) -> list: conn = sqlite3.connect(DB_NAME) conn.row_factory = sqlite3.Row cursor = conn.cursor() if status: cursor.execute("SELECT * FROM tasks WHERE status = ? ORDER BY task_id ASC", (status.upper(),)) else: cursor.execute("SELECT * FROM tasks ORDER BY task_id ASC") rows = [dict(r) for r in cursor.fetchall()] conn.close() return rows def db_update_task_status(task_id: str, status: str = None, due_date: str = None) -> dict: conn = sqlite3.connect(DB_NAME) cursor = conn.cursor() updates = [] params = [] if status: status_upper = status.upper() updates.append("status = ?") params.append(status_upper) if status_upper == "COMPLETED": updates.append("completed_at = CURRENT_TIMESTAMP") else: updates.append("completed_at = NULL") if due_date: updates.append("due_date = ?") params.append(due_date) if not updates: conn.close() return {"error": "Не указаны параметры для обновления"} params.append(task_id.upper()) query = f"UPDATE tasks SET {', '.join(updates)} WHERE task_id = ?" cursor.execute(query, tuple(params)) if cursor.rowcount == 0: conn.close() return {"error": f"Задача {task_id} не найдена"} conn.commit() conn.close() return {"status": "success", "message": f"Задача {task_id} обновлена"} def db_delete_task(task_id: str) -> dict: conn = sqlite3.connect(DB_NAME) cursor = conn.cursor() cursor.execute("DELETE FROM tasks WHERE task_id = ?", (task_id.upper(),)) deleted_count = cursor.rowcount conn.commit() conn.close() if deleted_count == 0: return {"error": f"Задача {task_id} не найдена"} return {"status": "success", "message": f"Задача {task_id} удалена"} def db_add_task(module: str = "general", title: str = "", priority: str = "MEDIUM", due_date: str = None, task_id: str = None) -> dict: conn = sqlite3.connect(DB_NAME) cursor = conn.cursor() if not task_id: cursor.execute("SELECT task_id FROM tasks WHERE task_id LIKE 'TASK-%'") rows = cursor.fetchall() max_num = 0 for r in rows: try: num = int(r[0].replace("TASK-", "")) if num > max_num: max_num = num except ValueError: pass task_id = f"TASK-{max_num + 1:02d}" try: cursor.execute( "INSERT INTO tasks (task_id, module, title, status, priority, due_date) VALUES (?, ?, ?, 'BACKLOG', ?, ?)", (task_id.upper(), module, title, priority.upper(), due_date) ) conn.commit() res = {"status": "success", "message": f"Задача {task_id} создана", "task_id": task_id} except sqlite3.IntegrityError: res = {"error": f"Задача с ID {task_id} уже существует"} finally: conn.close() return res def db_get_rules() -> list: conn = sqlite3.connect(DB_NAME) conn.row_factory = sqlite3.Row cursor = conn.cursor() cursor.execute("SELECT id, rule_text, added_by FROM ai_knowledge_base ORDER BY id") rows = [dict(r) for r in cursor.fetchall()] conn.close() return rows