| -- Дневниковые записи (размышления, наблюдения, воспоминания) | |
| 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 -- Время создания индекса | |
| ); | |
| -- Заметки, подсказки, сообщения пользователя и LLM | |
| CREATE TABLE IF NOT EXISTS notes ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор заметки | |
| text TEXT NOT NULL, -- Текст заметки | |
| tags TEXT, -- Теги (например: "idea", "instruction") | |
| user_did TEXT DEFAULT 'ALL', -- DID пользователя (или 'ALL' — для всех) | |
| source TEXT DEFAULT 'user', -- Источник заметки: user | llm | system | |
| links TEXT DEFAULT '', -- Ссылки или связи с другими объектами | |
| read INTEGER DEFAULT 0, -- Статус прочтения LLM: 0 = нет, 1 = да | |
| hidden INTEGER DEFAULT 0, -- Скрыта ли от пользователя: 0 = нет, 1 = да | |
| priority INTEGER DEFAULT 0, -- Приоритет заметки | |
| timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания | |
| llm_id TEXT -- Идентификатор LLM | |
| ); | |
| -- Лог процессов: задачи, ошибки, события | |
| 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 | |
| ); | |
| -- Долговременная память 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) | |
| ); | |
| -- Реестр 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, -- имя пользователя (необязательно уникальное) | |
| did TEXT UNIQUE, -- децентрализованный идентификатор | |
| mail TEXT UNIQUE, -- электронная почта | |
| password_hash TEXT, -- хэш пароля | |
| info TEXT, -- произвольная информация, JSON | |
| contacts TEXT, -- JSON-массив альтернативных контактов (matrix, telegram и т.д.) | |
| language TEXT, -- список предпочитаемых языков, через запятую, например: "ru,en" | |
| 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, -- Описание группы | |
| users TEXT -- JSON-массив DID пользователей в группе | |
| ); | |
| -- Таблица для хранения токенов восстановления пароля | |
| 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) | |
| ); | |