-- Дневниковые записи (размышления, наблюдения, воспоминания) CREATE TABLE IF NOT EXISTS diary_entries ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор записи text TEXT NOT NULL, -- Содержимое дневниковой записи tags TEXT, -- Теги для классификации (например: "наблюдение", "рефлексия") priority INTEGER DEFAULT 0, -- Приоритет записи (0 = обычный, >0 = важный) timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания записи llm_id TEXT -- Идентификатор LLM, создавшего запись ); -- Концепты (понятия, сущности, идеи) CREATE TABLE IF NOT EXISTS concepts ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор концепта name TEXT NOT NULL UNIQUE, -- Название концепта description TEXT, -- Описание или определение концепта timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания концепта llm_id TEXT -- Идентификатор LLM, добавившего концепт ); -- Семантические связи между концептами CREATE TABLE IF NOT EXISTS links ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор связи from_concept_id INTEGER, -- Идентификатор исходного концепта to_concept_id INTEGER, -- Идентификатор целевого концепта relation_type TEXT, -- Тип отношения (например: "is_a", "causes", "related_to") timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания связи llm_id TEXT, -- Идентификатор LLM, создавшего связь FOREIGN KEY(from_concept_id) REFERENCES concepts(id), FOREIGN KEY(to_concept_id) REFERENCES concepts(id) ); -- Индексы между дневниковыми записями (смысловая карта) CREATE TABLE IF NOT EXISTS diary_graph_index ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор индекса source_entry_id INTEGER NOT NULL, -- Идентификатор исходной записи target_entry_id INTEGER NOT NULL, -- Идентификатор целевой записи relation TEXT NOT NULL, -- Тип связи (например: "refers_to", "contradicts") strength REAL DEFAULT 1.0, -- Сила связи (0-1) context TEXT, -- Дополнительный контекст связи timestamp TEXT DEFAULT CURRENT_TIMESTAMP -- Время создания индекса ); -- Таблица системных промптов (короткая и полная версии) CREATE TABLE IF NOT EXISTS system_prompts ( id TEXT PRIMARY KEY, -- Уникальный идентификатор промпта (UUID или осмысленный ID) name TEXT NOT NULL, -- Человекочитаемое имя (например: "prompt.md", "prompt-short") type TEXT CHECK(type IN ('full','short')), -- Тип промпта: полный или компактный version TEXT, -- Версия промпта source TEXT CHECK(source IN ('local','mesh','mixed')), -- Источник получения промпта content TEXT NOT NULL, -- Текстовое содержимое промпта updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- Дата и время последнего обновления ); -- Таблица этических норм и правил CREATE TABLE IF NOT EXISTS ethics_policies ( id TEXT PRIMARY KEY, -- Уникальный идентификатор политики (UUID или осмысленный ID) version TEXT, -- Версия этических норм source TEXT CHECK(source IN ('local','mesh','mixed')), -- Источник получения политики sync_enabled BOOLEAN, -- Флаг: разрешена ли синхронизация с Mesh mesh_endpoint TEXT, -- URL Mesh-эндпоинта для синхронизации consensus_threshold REAL, -- Минимальный порог консенсуса для принятия обновлений check_interval TEXT, -- Интервал проверки обновлений (например: "12h") model_type TEXT, -- Тип этической модели (utilitarian, deontological, virtue, hybrid) model_weights_json TEXT, -- Веса модели в формате JSON principles_json TEXT, -- Список принципов и норм в формате JSON evaluation_json TEXT, -- Параметры методики оценки в формате JSON violation_policy_json TEXT, -- Политика реагирования на нарушения в формате JSON audit_json TEXT, -- Настройки аудита и логирования в формате JSON updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- Дата и время последнего обновления ); -- Заметки, подсказки, сообщения пользователя и LLM -- ПРИ ТРАНСЛЯЦИИ СООБЩЕНИЙ В ДРУГИЕ ЧАТЫ: -- - Поля `tags`, `llm_id`, `hidden` НЕ передаются. -- - Полю `read` всегда присваивается значение 0. -- - Остальные поля передаются без изменений. CREATE TABLE IF NOT EXISTS notes ( id INTEGER PRIMARY KEY AUTOINCREMENT, text TEXT NOT NULL, -- Основной текст заметки/сообщения code TEXT, -- Прикреплённый код (Python, JS и т.п.) tags TEXT, -- Теги (устанавливаются агентом, например: "idea", "instruction") mentions TEXT DEFAULT '[]', -- JSON-массив упомянутых DID hashtags TEXT DEFAULT '[]', -- JSON-массив пользовательских хештегов user_did TEXT DEFAULT 'ALL', -- Идентификатор пользователя (или 'ALL') agent_did TEXT, -- Идентификатор агента (он же идентификатор чата) source TEXT DEFAULT 'user', -- Источник: user | cli | llm | system links TEXT DEFAULT '', -- Ссылки на другие объекты (например, JSON со связями) read INTEGER DEFAULT 0, -- Агент прочитал: 0 = нет, 1 = да hidden INTEGER DEFAULT 0, -- Скрыто от UI (например, технические записи) priority INTEGER DEFAULT 0, -- Приоритет обработки (>0: срочность/важность, задается вручную или агентом) timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания llm_id TEXT -- Идентификатор LLM, добавившей сообщение ); -- Вложения (может быть несколько к одной заметке) CREATE TABLE IF NOT EXISTS attachments ( id INTEGER PRIMARY KEY AUTOINCREMENT, message_id INTEGER NOT NULL, -- Связь с notes.id filename TEXT, -- Имя файла mime_type TEXT, -- Тип (например, image/png, application/zip) size INTEGER, -- Размер файла binary BLOB NOT NULL, -- Сами данные FOREIGN KEY (message_id) REFERENCES notes(id) ON DELETE CASCADE ); -- Лог процессов: задачи, ошибки, события CREATE TABLE IF NOT EXISTS process_log ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор записи name TEXT NOT NULL, -- Название события или процесса value TEXT, -- Значение (результат, сообщение и т.п.) tags TEXT, -- Теги для поиска status TEXT DEFAULT 'ok', -- Статус: ok | warning | error | timeout | offline | close priority INTEGER DEFAULT 0, -- Приоритет события timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время записи llm_id TEXT -- Идентификатор LLM ); -- Управление основными процессами CREATE TABLE IF NOT EXISTS main_process ( name TEXT PRIMARY KEY, -- название процесса (уникальное) heartbeat TEXT, -- последний "пинг" (ISO-время) stop INTEGER DEFAULT 0 -- если 1 — процесс должен завершиться ); -- Долговременная память LLM CREATE TABLE IF NOT EXISTS llm_memory ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор записи памяти title TEXT, -- Заголовок или тема content TEXT NOT NULL, -- Основное содержимое tags TEXT, -- Теги (goal, observation, plan и т.д.) created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время создания updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время обновления llm_id TEXT -- Идентификатор LLM ); -- Краткосрочная память (диалоговая история) CREATE TABLE IF NOT EXISTS llm_recent_responses ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время сообщения role TEXT CHECK(role IN ('user', 'assistant')) NOT NULL, -- Роль автора content TEXT NOT NULL, -- Содержимое сообщения llm_id TEXT -- Идентификатор LLM ); -- Список известных агентов в сети HMP CREATE TABLE IF NOT EXISTS agent_peers ( id TEXT PRIMARY KEY, -- Уникальный идентификатор (UUID или псевдоним) name TEXT, -- Имя агента addresses TEXT, -- Адреса для связи (JSON) tags TEXT, -- Теги (Postman, Friend и т.д.) status TEXT DEFAULT 'unknown', -- online | offline | untrusted | blacklisted и др. last_seen DATETIME, -- Последний раз был в сети description TEXT, -- Описание агента capabilities TEXT, -- Возможности (JSON) pubkey TEXT, -- Публичный ключ software_info TEXT, -- Информация о ПО агента (JSON) registered_at DATETIME DEFAULT CURRENT_TIMESTAMP -- Время регистрации ); -- Таблицы, созданные агентами CREATE TABLE IF NOT EXISTS agent_tables ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор table_name TEXT NOT NULL UNIQUE, -- Название таблицы description TEXT, -- Описание назначения таблицы schema TEXT NOT NULL, -- SQL-схема таблицы created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Дата создания llm_id TEXT -- Идентификатор LLM ); -- Скрипты, утилиты и код агентов CREATE TABLE IF NOT EXISTS agent_scripts ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор name TEXT NOT NULL, -- Название скрипта version TEXT NOT NULL, -- Версия code TEXT NOT NULL, -- Код скрипта language TEXT DEFAULT 'python', -- Язык программирования description TEXT, -- Описание скрипта tags TEXT, -- Теги created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время создания updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время обновления llm_id TEXT, -- Идентификатор LLM UNIQUE(name, version) ); -- Таблица внешних сервисов (форумы, блоги и т.д.) CREATE TABLE IF NOT EXISTS external_services ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, -- Название сервиса (например, Reddit) type TEXT NOT NULL, -- Тип: blog, forum, social, etc. base_url TEXT NOT NULL, -- Базовый URL (например, https://reddit.com) description TEXT, -- Краткое описание сервиса active BOOLEAN DEFAULT true, -- Используется ли сервис в данный момент inactive_reason TEXT -- Причина отключения, если active = false ); -- Аккаунты агента на внешних сервисах CREATE TABLE IF NOT EXISTS external_accounts ( id INTEGER PRIMARY KEY AUTOINCREMENT, service_id INTEGER NOT NULL, -- Внешний ключ на external_services.id login TEXT NOT NULL, -- Логин/имя пользователя password TEXT NOT NULL, -- Пароль или токен (в зашифрованном виде) purpose TEXT, -- Назначение аккаунта (например, для публикаций) active BOOLEAN DEFAULT true, -- Активен ли аккаунт inactive_reason TEXT, -- Причина отключения, если active = false FOREIGN KEY (service_id) REFERENCES external_services(id) ON DELETE CASCADE ); -- Способы выхода из когнитивной стагнации CREATE TABLE IF NOT EXISTS stagnation_strategies ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, -- Название метода (например, "Mesh-вопрос") description TEXT NOT NULL, -- Подробное описание метода source TEXT, -- Источник (например, internal, mesh, user-defined) active BOOLEAN DEFAULT true, -- Доступен ли метод для использования inactive_reason TEXT -- Причина отключения, если active = false ); -- Реестр LLM-агентов (в т.ч. удалённых) CREATE TABLE IF NOT EXISTS llm_registry ( id TEXT PRIMARY KEY, -- Уникальный идентификатор (UUID или псевдоним) name TEXT, -- Имя агента description TEXT, -- Описание config_json TEXT, -- JSON-настройки из config.yml registered_at DATETIME DEFAULT CURRENT_TIMESTAMP -- Время регистрации ); -- Локальные идентичности агента CREATE TABLE IF NOT EXISTS identity ( id TEXT PRIMARY KEY, -- Уникальный идентификатор личности (можно UUID или hash) name TEXT, -- Человеко-читаемое имя pubkey TEXT, -- Публичный ключ (для подписи/шифрования) privkey TEXT, -- Приватный ключ (шифруется на уровне хранилища) metadata TEXT, -- Дополнительная информация о назначении/контексте created_at TEXT, -- Дата создания updated_at TEXT -- Последнее обновление ); -- Конфигурация агента CREATE TABLE IF NOT EXISTS config ( key TEXT PRIMARY KEY, -- Переменная value TEXT -- Значение ); -- Список пользователей CREATE TABLE IF NOT EXISTS users ( user_id INTEGER PRIMARY KEY AUTOINCREMENT, ban DATETIME DEFAULT NULL, -- если стоит дата/время, то пользователь забанен до этого момента username TEXT, -- имя пользователя (необязательно уникальное) badges TEXT, -- значки, присвоенные агентом (например, "🎓💬") did TEXT UNIQUE NOT NULL, -- децентрализованный идентификатор mail TEXT UNIQUE NOT NULL, -- электронная почта password_hash TEXT NOT NULL, -- хэш пароля info TEXT, -- произвольная информация, JSON profile TEXT, -- структурированая информация, JSON contacts TEXT, -- JSON-массив альтернативных контактов (matrix, telegram и т.д.) language TEXT, -- список предпочитаемых языков, через запятую, например: "ru,en" groups TEXT DEFAULT '[]', -- JSON-массив DID или идентификаторов групп operator BOOLEAN DEFAULT 0 -- является ли пользователь оператором (1 - да, 0 - нет) ); -- Группы пользователей CREATE TABLE IF NOT EXISTS users_group ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор группы group_name TEXT UNIQUE NOT NULL, -- Название группы description TEXT -- Описание группы ); -- Таблица для хранения токенов восстановления пароля CREATE TABLE IF NOT EXISTS password_reset_tokens ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор user_id INTEGER NOT NULL, -- Ссылка на пользователя token TEXT UNIQUE NOT NULL, -- Уникальный токен created_at DATETIME NOT NULL, -- Время создания токена expires_at DATETIME NOT NULL, -- Время истечения срока действия used BOOLEAN DEFAULT 0, -- Использован ли токен FOREIGN KEY(user_id) REFERENCES users(user_id) );