fable
This commit is contained in:
@@ -23,8 +23,8 @@ class AIMemoryDB {
|
||||
*/
|
||||
async initialize(dbPath = './storage/ai-memory.db', botName = 'default') {
|
||||
if (this.db) {
|
||||
this.botName = botName;
|
||||
return; // Already initialized
|
||||
// DB already initialized — don't overwrite botName (singleton shared across bots)
|
||||
return;
|
||||
}
|
||||
|
||||
const fullPath = path.resolve(dbPath);
|
||||
@@ -122,7 +122,7 @@ class AIMemoryDB {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.db.get(`
|
||||
SELECT memory_value FROM player_memories
|
||||
WHERE bot_name = 'global' AND player_name = ? AND memory_key = ?
|
||||
WHERE bot_name = 'global' AND player_name = ? COLLATE NOCASE AND memory_key = ?
|
||||
`, [playerName, key], (err, row) => {
|
||||
if (err) reject(err);
|
||||
else resolve(row ? row.memory_value : null);
|
||||
@@ -137,7 +137,7 @@ class AIMemoryDB {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.db.all(`
|
||||
SELECT memory_key, memory_value FROM player_memories
|
||||
WHERE bot_name = 'global' AND player_name = ?
|
||||
WHERE bot_name = 'global' AND player_name = ? COLLATE NOCASE
|
||||
`, [playerName], (err, rows) => {
|
||||
if (err) reject(err);
|
||||
else {
|
||||
@@ -158,7 +158,7 @@ class AIMemoryDB {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.db.run(`
|
||||
DELETE FROM player_memories
|
||||
WHERE bot_name = 'global' AND player_name = ? AND memory_key = ?
|
||||
WHERE bot_name = 'global' AND player_name = ? COLLATE NOCASE AND memory_key = ?
|
||||
`, [playerName, key], (err) => {
|
||||
if (err) reject(err);
|
||||
else resolve();
|
||||
@@ -188,12 +188,12 @@ class AIMemoryDB {
|
||||
/**
|
||||
* Set a directive for this bot
|
||||
*/
|
||||
async setDirective(key, value) {
|
||||
async setDirective(botName, key, value) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.db.run(`
|
||||
INSERT OR REPLACE INTO bot_directives (bot_name, directive_key, directive_value, updated_at)
|
||||
VALUES (?, ?, ?, CURRENT_TIMESTAMP)
|
||||
`, [this.botName, key, value], (err) => {
|
||||
`, [botName, key, value], (err) => {
|
||||
if (err) reject(err);
|
||||
else resolve();
|
||||
});
|
||||
@@ -203,12 +203,12 @@ class AIMemoryDB {
|
||||
/**
|
||||
* Get a specific directive
|
||||
*/
|
||||
async getDirective(key) {
|
||||
async getDirective(botName, key) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.db.get(`
|
||||
SELECT directive_value FROM bot_directives
|
||||
WHERE bot_name = ? AND directive_key = ?
|
||||
`, [this.botName, key], (err, row) => {
|
||||
`, [botName, key], (err, row) => {
|
||||
if (err) reject(err);
|
||||
else resolve(row ? row.directive_value : null);
|
||||
});
|
||||
@@ -218,12 +218,12 @@ class AIMemoryDB {
|
||||
/**
|
||||
* Get all directives for this bot
|
||||
*/
|
||||
async getAllDirectives() {
|
||||
async getAllDirectives(botName) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.db.all(`
|
||||
SELECT directive_key, directive_value FROM bot_directives
|
||||
WHERE bot_name = ?
|
||||
`, [this.botName], (err, rows) => {
|
||||
`, [botName], (err, rows) => {
|
||||
if (err) reject(err);
|
||||
else {
|
||||
const directives = {};
|
||||
@@ -243,12 +243,12 @@ class AIMemoryDB {
|
||||
/**
|
||||
* Set a general memory (not player-specific)
|
||||
*/
|
||||
async setGeneralMemory(key, value) {
|
||||
async setGeneralMemory(botName, key, value) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.db.run(`
|
||||
INSERT OR REPLACE INTO general_memories (bot_name, memory_key, memory_value, updated_at)
|
||||
VALUES (?, ?, ?, CURRENT_TIMESTAMP)
|
||||
`, [this.botName, key, value], (err) => {
|
||||
`, [botName, key, value], (err) => {
|
||||
if (err) reject(err);
|
||||
else resolve();
|
||||
});
|
||||
@@ -258,12 +258,12 @@ class AIMemoryDB {
|
||||
/**
|
||||
* Get a general memory
|
||||
*/
|
||||
async getGeneralMemory(key) {
|
||||
async getGeneralMemory(botName, key) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.db.get(`
|
||||
SELECT memory_value FROM general_memories
|
||||
WHERE bot_name = ? AND memory_key = ?
|
||||
`, [this.botName, key], (err, row) => {
|
||||
`, [botName, key], (err, row) => {
|
||||
if (err) reject(err);
|
||||
else resolve(row ? row.memory_value : null);
|
||||
});
|
||||
@@ -273,12 +273,12 @@ class AIMemoryDB {
|
||||
/**
|
||||
* Get all general memories
|
||||
*/
|
||||
async getAllGeneralMemories() {
|
||||
async getAllGeneralMemories(botName) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.db.all(`
|
||||
SELECT memory_key, memory_value FROM general_memories
|
||||
WHERE bot_name = ?
|
||||
`, [this.botName], (err, rows) => {
|
||||
`, [botName], (err, rows) => {
|
||||
if (err) reject(err);
|
||||
else {
|
||||
const memories = {};
|
||||
@@ -294,13 +294,13 @@ class AIMemoryDB {
|
||||
/**
|
||||
* Get all general memories with timestamps
|
||||
*/
|
||||
async getAllGeneralMemoriesWithTimestamps() {
|
||||
async getAllGeneralMemoriesWithTimestamps(botName) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.db.all(`
|
||||
SELECT memory_key, memory_value, updated_at FROM general_memories
|
||||
WHERE bot_name = ?
|
||||
ORDER BY updated_at DESC
|
||||
`, [this.botName], (err, rows) => {
|
||||
`, [botName], (err, rows) => {
|
||||
if (err) reject(err);
|
||||
else resolve(rows);
|
||||
});
|
||||
@@ -313,13 +313,13 @@ class AIMemoryDB {
|
||||
/**
|
||||
* Get all directives as formatted string with timestamps
|
||||
*/
|
||||
async getDirectivesSummary() {
|
||||
async getDirectivesSummary(botName) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.db.all(`
|
||||
SELECT directive_key, directive_value, updated_at FROM bot_directives
|
||||
WHERE bot_name = ?
|
||||
ORDER BY updated_at DESC
|
||||
`, [this.botName], (err, rows) => {
|
||||
`, [botName], (err, rows) => {
|
||||
if (err) reject(err);
|
||||
else {
|
||||
if (rows.length === 0) {
|
||||
@@ -361,9 +361,9 @@ class AIMemoryDB {
|
||||
/**
|
||||
* Get full memory context for prompt injection
|
||||
*/
|
||||
async getMemoryContext() {
|
||||
const directives = await this.getDirectivesSummary();
|
||||
const generalMemories = await this.getAllGeneralMemoriesWithTimestamps();
|
||||
async getMemoryContext(botName) {
|
||||
const directives = await this.getDirectivesSummary(botName);
|
||||
const generalMemories = await this.getAllGeneralMemoriesWithTimestamps(botName);
|
||||
|
||||
let context = '';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user