feat(db/llm/ui): настроена работа кнопок подтверждающих изменения внеcенные инструментом и финальные для выхода из инструмента и очистки сессии.

This commit is contained in:
2026-08-14 17:02:29 +03:00
parent cc12397e29
commit 48bdc244e0
9 changed files with 268 additions and 39 deletions
+31 -1
View File
@@ -18,6 +18,31 @@ from core.database import (
DB_PATH = os.path.join(DATA_DIR, "scud_orion_ai.db")
def print_tool_actions():
"""Выводит реестр декларативных действий инструментов и шаблоны кнопок."""
print("\n" + "=" * 110)
print("🧰 ДЕКЛАРАТИВНЫЙ РЕЕСТР ДЕЙСТВИЙ ИНСТРУМЕНТОВ (tool_action_registry):")
print("=" * 110)
with get_connection() as conn:
cursor = conn.cursor()
cursor.execute("""
SELECT id, tool_name, category, bypass_llm, success_template, follow_up_question, buttons_json
FROM tool_action_registry
WHERE is_active = 1
ORDER BY id ASC
""")
rows = cursor.fetchall()
if not rows:
print("Таблица tool_action_registry пуста.")
else:
for r in rows:
print(f"ID: {r[0]} | Tool: [{r[1]}] | Категория: {r[2]} | Bypass LLM: {'ДА (0.05с)' if r[3] else 'НЕТ'}")
print(f" • Сообщение: {r[4]}")
if r[5]:
print(f" • Вопрос: {r[5]}")
print(f" • Кнопки: {r[6]}")
print("-" * 110)
print("=" * 110 + "\n")
def print_stats():
"""Выводит общую статистику по записям в таблицах БД."""
@@ -255,6 +280,7 @@ def print_session_states():
print("=" * 80 + "\n")
Python
HELP_TEXT = """
CLI-утилита инспекции и управления SQLite базой данных СКУД (scud_orion_ai.db)
@@ -266,6 +292,7 @@ CLI-утилита инспекции и управления SQLite базой
anomalies -- Посмотреть историю найденных аномалий СКУД ⟷ 1С
rules -- Посмотреть правила Базы Знаний ИИ из SQLite
prompts -- Посмотреть системные промпты (system_prompts)
tools -- Посмотреть реестр действий инструментов и кнопок (tool_action_registry)
sessions -- Посмотреть активные сессии и превью (session_states)
dump [output.xlsx] -- Полный дамп всех таблиц БД в многостраничный Excel
snapshot del [ID] или [--day ДД.ММ.ГГГГ] -- Удаление снапшота по ID или всех за выбранный день
@@ -277,6 +304,7 @@ CLI-утилита инспекции и управления SQLite базой
python scripts/db_cli.py scud --snapshot Y20260805-007
python scripts/db_cli.py absences 07.08.2026
python scripts/db_cli.py prompts
python scripts/db_cli.py tools
python scripts/db_cli.py sessions
python scripts/db_cli.py snapshot del Y20260805-007
python scripts/db_cli.py snapshot del --day 04.08.2026
@@ -294,7 +322,7 @@ def main():
formatter_class=argparse.RawDescriptionHelpFormatter,
add_help=False
)
parser.add_argument('command', nargs='?', default=None, choices=['stats', 'snapshots', 'scud', 'absences', 'anomalies', 'rules', 'prompts', 'sessions', 'dump', 'snapshot'], help="Основная команда")
parser.add_argument('command', nargs='?', default=None, choices=['stats', 'snapshots', 'scud', 'absences', 'anomalies', 'rules', 'prompts', 'sessions', 'dump', 'snapshot', 'tools'], help="Основная команда")
parser.add_argument('action', nargs='?', default=None, help="Дополнительное действие (например, 'del')")
parser.add_argument('param', nargs='?', default=None, help="Параметр (дата, ID снапшота или имя файла)")
parser.add_argument('--snapshot', type=str, default=None, help="ID конкретного снапшота для инспекции")
@@ -325,6 +353,8 @@ def main():
print_system_prompts()
elif args.command == 'sessions':
print_session_states()
elif args.command == 'tools':
print_tool_actions()
elif args.command == 'dump':
filename = args.param if args.param else "db_dump_full.xlsx"
dump_all_to_excel(filename)
+104
View File
@@ -0,0 +1,104 @@
"""
Скрипт инициализации таблицы tool_action_registry в SQLite БД.
"""
import os
import sys
import json
import sqlite3
BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
DB_PATH = os.path.join(BASE_DIR, "data", "scud_orion_ai.db")
def init_tool_action_registry():
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
# 1. Создаем таблицу
cursor.execute("""
CREATE TABLE IF NOT EXISTS tool_action_registry (
id INTEGER PRIMARY KEY AUTOINCREMENT,
tool_name TEXT UNIQUE NOT NULL,
category TEXT DEFAULT 'general',
bypass_llm INTEGER DEFAULT 1,
success_template TEXT NOT NULL,
follow_up_question TEXT,
action_type TEXT DEFAULT 'BUTTONS',
buttons_json TEXT,
is_active INTEGER DEFAULT 1,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
""")
# 2. Начальное наполнение базовыми сценариями
seed_tools = [
(
"db_confirm_prompt_preview",
"prompt",
1,
"✅ Системный промпт успешно сохранен и применен в базе данных.",
"Желаете продолжить работу с системным промптом?",
"FOLLOW_UP_ACTION",
json.dumps([
{"label": "Показать промпт", "value": "покажи системный промпт"},
{"label": "Готово", "value": "нет, спасибо"}
], ensure_ascii=False)
),
(
"db_cancel_prompt_preview",
"prompt",
1,
"❌ Изменения системного промпта отменены.",
"Желаете продолжить работу с системным промптом?",
"FOLLOW_UP_ACTION",
json.dumps([
{"label": "Показать промпт", "value": "покажи системный промпт"},
{"label": "Готово", "value": "нет, спасибо"}
], ensure_ascii=False)
),
(
"db_delete_task",
"tasks",
1,
"🗑 Задача успешно удалена из вашего реестра.",
"Хотите посмотреть обновленный список задач?",
"FOLLOW_UP_ACTION",
json.dumps([
{"label": "Показать задачи", "value": "покажи список задач"},
{"label": "Готово", "value": "нет"}
], ensure_ascii=False)
),
(
"db_delete_snapshots",
"snapshots",
1,
"🗑 Выбранные снапшоты успешно удалены из базы данных.",
"Вывести актуальный список снапшотов?",
"FOLLOW_UP_ACTION",
json.dumps([
{"label": "Показать снапшоты", "value": "покажи список снапшотов"},
{"label": "Готово", "value": "нет"}
], ensure_ascii=False)
)
]
for item in seed_tools:
cursor.execute("""
INSERT INTO tool_action_registry (
tool_name, category, bypass_llm, success_template, follow_up_question, action_type, buttons_json
) VALUES (?, ?, ?, ?, ?, ?, ?)
ON CONFLICT(tool_name) DO UPDATE SET
category = excluded.category,
bypass_llm = excluded.bypass_llm,
success_template = excluded.success_template,
follow_up_question = excluded.follow_up_question,
action_type = excluded.action_type,
buttons_json = excluded.buttons_json,
updated_at = CURRENT_TIMESTAMP
""", item)
conn.commit()
conn.close()
print("[✓] Таблица tool_action_registry успешно создана и наполнена!")
if __name__ == "__main__":
init_tool_action_registry()