| -- Дневниковые записи (размышления, наблюдения, воспоминания) | |
| 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) | |
| ); | |