Контекст диалога отдельно от архива чата

- Новая таблица dialog_messages: последние DIALOG_LIMIT пар «вопрос — ответ», подкладываются в каждый запрос
- /clear сбрасывает только контекст диалога, архив (включая импорт) не трогает; без подтверждения
- /context показывает контекст и архив по отдельности

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
yunogasai
2026-09-24 20:42:14 +02:00
parent c5f87f3195
commit b8f09227b0
17 changed files with 167 additions and 53 deletions

View File

@@ -44,7 +44,6 @@ export const createMessageRepository = (db: Db) => {
),
findById: db.prepare("SELECT * FROM messages WHERE chat_id = ? AND message_id = ?"),
statsByChat: db.prepare("SELECT COUNT(*) AS count, MIN(date) AS oldest FROM messages WHERE chat_id = ?"),
deleteByChat: db.prepare("DELETE FROM messages WHERE chat_id = ?"),
};
const toChronological = (rows: unknown[]): ChatMessage[] => (rows as MessageRow[]).reverse().map(toMessage);
@@ -85,10 +84,7 @@ export const createMessageRepository = (db: Db) => {
const statsByChat = (chatId: number): { count: number; oldest: number | null } =>
statements.statsByChat.get(chatId) as { count: number; oldest: number | null };
/** Удаляет всю сохранённую историю чата; возвращает, сколько сообщений удалено. */
const deleteByChat = (chatId: number): number => statements.deleteByChat.run(chatId).changes;
return { upsertAndPrune, insertManyAndPrune, latest, latestByUser, findById, statsByChat, deleteByChat };
return { upsertAndPrune, insertManyAndPrune, latest, latestByUser, findById, statsByChat };
};
export type MessageRepository = ReturnType<typeof createMessageRepository>;