agent-world 0.11.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -7
- package/dist/cli/commands.d.ts +109 -0
- package/dist/cli/commands.js +2024 -0
- package/dist/cli/display.d.ts +124 -0
- package/dist/cli/display.js +381 -0
- package/dist/cli/hitl.d.ts +33 -0
- package/dist/cli/hitl.js +81 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/stream.d.ts +41 -0
- package/dist/cli/stream.js +222 -0
- package/dist/core/activity-tracker.d.ts +16 -0
- package/dist/core/activity-tracker.d.ts.map +1 -0
- package/dist/core/activity-tracker.js +91 -0
- package/dist/core/activity-tracker.js.map +1 -0
- package/dist/core/ai-commands.d.ts +16 -0
- package/dist/core/ai-commands.d.ts.map +1 -0
- package/dist/core/ai-commands.js +24 -0
- package/dist/core/ai-commands.js.map +1 -0
- package/dist/core/ai-sdk-patch.d.ts +24 -0
- package/dist/core/ai-sdk-patch.d.ts.map +1 -0
- package/dist/core/ai-sdk-patch.js +169 -0
- package/dist/core/ai-sdk-patch.js.map +1 -0
- package/dist/core/anthropic-direct.d.ts +52 -0
- package/dist/core/anthropic-direct.d.ts.map +1 -0
- package/dist/core/anthropic-direct.js +301 -0
- package/dist/core/anthropic-direct.js.map +1 -0
- package/dist/core/approval-cache.d.ts +104 -0
- package/dist/core/approval-cache.d.ts.map +1 -0
- package/dist/core/approval-cache.js +150 -0
- package/dist/core/approval-cache.js.map +1 -0
- package/dist/core/chat-constants.d.ts +20 -0
- package/dist/core/chat-constants.d.ts.map +1 -0
- package/dist/core/chat-constants.js +22 -0
- package/dist/core/chat-constants.js.map +1 -0
- package/dist/core/create-agent-tool.d.ts +66 -0
- package/dist/core/create-agent-tool.d.ts.map +1 -0
- package/dist/core/create-agent-tool.js +212 -0
- package/dist/core/create-agent-tool.js.map +1 -0
- package/dist/core/events/approval-checker.d.ts +61 -0
- package/dist/core/events/approval-checker.d.ts.map +1 -0
- package/dist/core/events/approval-checker.js +226 -0
- package/dist/core/events/approval-checker.js.map +1 -0
- package/dist/core/events/index.d.ts +25 -0
- package/dist/core/events/index.d.ts.map +1 -0
- package/dist/core/events/index.js +30 -0
- package/dist/core/events/index.js.map +1 -0
- package/dist/core/events/memory-manager.d.ts +73 -0
- package/dist/core/events/memory-manager.d.ts.map +1 -0
- package/dist/core/events/memory-manager.js +1218 -0
- package/dist/core/events/memory-manager.js.map +1 -0
- package/dist/core/events/mention-logic.d.ts +39 -0
- package/dist/core/events/mention-logic.d.ts.map +1 -0
- package/dist/core/events/mention-logic.js +163 -0
- package/dist/core/events/mention-logic.js.map +1 -0
- package/dist/core/events/orchestrator.d.ts +69 -0
- package/dist/core/events/orchestrator.d.ts.map +1 -0
- package/dist/core/events/orchestrator.js +883 -0
- package/dist/core/events/orchestrator.js.map +1 -0
- package/dist/core/events/persistence.d.ts +41 -0
- package/dist/core/events/persistence.d.ts.map +1 -0
- package/dist/core/events/persistence.js +296 -0
- package/dist/core/events/persistence.js.map +1 -0
- package/dist/core/events/publishers.d.ts +81 -0
- package/dist/core/events/publishers.d.ts.map +1 -0
- package/dist/core/events/publishers.js +272 -0
- package/dist/core/events/publishers.js.map +1 -0
- package/dist/core/events/subscribers.d.ts +45 -0
- package/dist/core/events/subscribers.d.ts.map +1 -0
- package/dist/core/events/subscribers.js +288 -0
- package/dist/core/events/subscribers.js.map +1 -0
- package/dist/core/events/tool-bridge-logging.d.ts +28 -0
- package/dist/core/events/tool-bridge-logging.d.ts.map +1 -0
- package/dist/core/events/tool-bridge-logging.js +94 -0
- package/dist/core/events/tool-bridge-logging.js.map +1 -0
- package/dist/core/events-metadata.d.ts +72 -0
- package/dist/core/events-metadata.d.ts.map +1 -0
- package/dist/core/events-metadata.js +167 -0
- package/dist/core/events-metadata.js.map +1 -0
- package/dist/core/events.d.ts +186 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +1248 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/export.d.ts +106 -0
- package/dist/core/export.d.ts.map +1 -0
- package/dist/core/export.js +705 -0
- package/dist/core/export.js.map +1 -0
- package/dist/core/file-tools.d.ts +114 -0
- package/dist/core/file-tools.d.ts.map +1 -0
- package/dist/core/file-tools.js +370 -0
- package/dist/core/file-tools.js.map +1 -0
- package/dist/core/google-direct.d.ts +58 -0
- package/dist/core/google-direct.d.ts.map +1 -0
- package/dist/core/google-direct.js +298 -0
- package/dist/core/google-direct.js.map +1 -0
- package/dist/core/hitl.d.ts +54 -0
- package/dist/core/hitl.d.ts.map +1 -0
- package/dist/core/hitl.js +153 -0
- package/dist/core/hitl.js.map +1 -0
- package/dist/core/index.d.ts +59 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +70 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/llm-config.d.ts +128 -0
- package/dist/core/llm-config.d.ts.map +1 -0
- package/dist/core/llm-config.js +164 -0
- package/dist/core/llm-config.js.map +1 -0
- package/dist/core/llm-manager.d.ts +163 -0
- package/dist/core/llm-manager.d.ts.map +1 -0
- package/dist/core/llm-manager.js +669 -0
- package/dist/core/llm-manager.js.map +1 -0
- package/dist/core/load-skill-tool.d.ts +55 -0
- package/dist/core/load-skill-tool.d.ts.map +1 -0
- package/dist/core/load-skill-tool.js +468 -0
- package/dist/core/load-skill-tool.js.map +1 -0
- package/dist/core/logger.d.ts +88 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +358 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/managers.d.ts +131 -0
- package/dist/core/managers.d.ts.map +1 -0
- package/dist/core/managers.js +1223 -0
- package/dist/core/managers.js.map +1 -0
- package/dist/core/mcp-server-registry.d.ts +304 -0
- package/dist/core/mcp-server-registry.d.ts.map +1 -0
- package/dist/core/mcp-server-registry.js +1769 -0
- package/dist/core/mcp-server-registry.js.map +1 -0
- package/dist/core/mcp-tools.d.ts +56 -0
- package/dist/core/mcp-tools.d.ts.map +1 -0
- package/dist/core/mcp-tools.js +186 -0
- package/dist/core/mcp-tools.js.map +1 -0
- package/dist/core/message-prep.d.ts +81 -0
- package/dist/core/message-prep.d.ts.map +1 -0
- package/dist/core/message-prep.js +223 -0
- package/dist/core/message-prep.js.map +1 -0
- package/dist/core/message-processing-control.d.ts +54 -0
- package/dist/core/message-processing-control.d.ts.map +1 -0
- package/dist/core/message-processing-control.js +139 -0
- package/dist/core/message-processing-control.js.map +1 -0
- package/dist/core/openai-direct.d.ts +80 -0
- package/dist/core/openai-direct.d.ts.map +1 -0
- package/dist/core/openai-direct.js +374 -0
- package/dist/core/openai-direct.js.map +1 -0
- package/dist/core/shell-cmd-tool.d.ts +235 -0
- package/dist/core/shell-cmd-tool.d.ts.map +1 -0
- package/dist/core/shell-cmd-tool.js +1157 -0
- package/dist/core/shell-cmd-tool.js.map +1 -0
- package/dist/core/shell-process-registry.d.ts +88 -0
- package/dist/core/shell-process-registry.d.ts.map +1 -0
- package/dist/core/shell-process-registry.js +309 -0
- package/dist/core/shell-process-registry.js.map +1 -0
- package/dist/core/skill-registry.d.ts +75 -0
- package/dist/core/skill-registry.d.ts.map +1 -0
- package/dist/core/skill-registry.js +369 -0
- package/dist/core/skill-registry.js.map +1 -0
- package/dist/core/skill-script-runner.d.ts +89 -0
- package/dist/core/skill-script-runner.d.ts.map +1 -0
- package/dist/core/skill-script-runner.js +274 -0
- package/dist/core/skill-script-runner.js.map +1 -0
- package/dist/core/skill-selector.d.ts +65 -0
- package/dist/core/skill-selector.d.ts.map +1 -0
- package/dist/core/skill-selector.js +190 -0
- package/dist/core/skill-selector.js.map +1 -0
- package/dist/core/skill-settings.d.ts +20 -0
- package/dist/core/skill-settings.d.ts.map +1 -0
- package/dist/core/skill-settings.js +40 -0
- package/dist/core/skill-settings.js.map +1 -0
- package/dist/core/storage/agent-storage.d.ts +134 -0
- package/dist/core/storage/agent-storage.d.ts.map +1 -0
- package/dist/core/storage/agent-storage.js +498 -0
- package/dist/core/storage/agent-storage.js.map +1 -0
- package/dist/core/storage/eventStorage/fileEventStorage.d.ts +100 -0
- package/dist/core/storage/eventStorage/fileEventStorage.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/fileEventStorage.js +494 -0
- package/dist/core/storage/eventStorage/fileEventStorage.js.map +1 -0
- package/dist/core/storage/eventStorage/index.d.ts +31 -0
- package/dist/core/storage/eventStorage/index.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/index.js +31 -0
- package/dist/core/storage/eventStorage/index.js.map +1 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.d.ts +87 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.js +244 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.js.map +1 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts +45 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.js +301 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.js.map +1 -0
- package/dist/core/storage/eventStorage/types.d.ts +142 -0
- package/dist/core/storage/eventStorage/types.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/types.js +43 -0
- package/dist/core/storage/eventStorage/types.js.map +1 -0
- package/dist/core/storage/eventStorage/validation.d.ts +30 -0
- package/dist/core/storage/eventStorage/validation.d.ts.map +1 -0
- package/dist/core/storage/eventStorage/validation.js +68 -0
- package/dist/core/storage/eventStorage/validation.js.map +1 -0
- package/dist/core/storage/legacy-migrations.d.ts +45 -0
- package/dist/core/storage/legacy-migrations.d.ts.map +1 -0
- package/dist/core/storage/legacy-migrations.js +295 -0
- package/dist/core/storage/legacy-migrations.js.map +1 -0
- package/dist/core/storage/memory-storage.d.ts +105 -0
- package/dist/core/storage/memory-storage.d.ts.map +1 -0
- package/dist/core/storage/memory-storage.js +415 -0
- package/dist/core/storage/memory-storage.js.map +1 -0
- package/dist/core/storage/migration-runner.d.ts +96 -0
- package/dist/core/storage/migration-runner.d.ts.map +1 -0
- package/dist/core/storage/migration-runner.js +306 -0
- package/dist/core/storage/migration-runner.js.map +1 -0
- package/dist/core/storage/queue-storage.d.ts +147 -0
- package/dist/core/storage/queue-storage.d.ts.map +1 -0
- package/dist/core/storage/queue-storage.js +290 -0
- package/dist/core/storage/queue-storage.js.map +1 -0
- package/dist/core/storage/skill-storage.d.ts +136 -0
- package/dist/core/storage/skill-storage.d.ts.map +1 -0
- package/dist/core/storage/skill-storage.js +474 -0
- package/dist/core/storage/skill-storage.js.map +1 -0
- package/dist/core/storage/sqlite-schema.d.ts +95 -0
- package/dist/core/storage/sqlite-schema.d.ts.map +1 -0
- package/dist/core/storage/sqlite-schema.js +156 -0
- package/dist/core/storage/sqlite-schema.js.map +1 -0
- package/dist/core/storage/sqlite-storage.d.ts +146 -0
- package/dist/core/storage/sqlite-storage.d.ts.map +1 -0
- package/dist/core/storage/sqlite-storage.js +709 -0
- package/dist/core/storage/sqlite-storage.js.map +1 -0
- package/dist/core/storage/storage-factory.d.ts +61 -0
- package/dist/core/storage/storage-factory.d.ts.map +1 -0
- package/dist/core/storage/storage-factory.js +794 -0
- package/dist/core/storage/storage-factory.js.map +1 -0
- package/dist/core/storage/validation.d.ts +36 -0
- package/dist/core/storage/validation.d.ts.map +1 -0
- package/dist/core/storage/validation.js +79 -0
- package/dist/core/storage/validation.js.map +1 -0
- package/dist/core/storage/world-storage.d.ts +114 -0
- package/dist/core/storage/world-storage.d.ts.map +1 -0
- package/dist/core/storage/world-storage.js +378 -0
- package/dist/core/storage/world-storage.js.map +1 -0
- package/dist/core/subscription.d.ts +43 -0
- package/dist/core/subscription.d.ts.map +1 -0
- package/dist/core/subscription.js +227 -0
- package/dist/core/subscription.js.map +1 -0
- package/dist/core/tool-utils.d.ts +80 -0
- package/dist/core/tool-utils.d.ts.map +1 -0
- package/dist/core/tool-utils.js +273 -0
- package/dist/core/tool-utils.js.map +1 -0
- package/dist/core/types.d.ts +595 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +158 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils.d.ts +138 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +478 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/core/world-class.d.ts +43 -0
- package/dist/core/world-class.d.ts.map +1 -0
- package/dist/core/world-class.js +90 -0
- package/dist/core/world-class.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/public/assets/agent-sprites-DJFgj-zP.png +0 -0
- package/dist/public/assets/border-KHK37r8y.svg +83 -0
- package/dist/public/assets/index-C9kPXL6G.css +1 -0
- package/dist/public/assets/index-DOQEHGWt.js +96 -0
- package/dist/public/index.html +21 -0
- package/dist/server/api.d.ts +2 -0
- package/dist/server/api.js +1124 -0
- package/dist/server/index.d.ts +29 -0
- package/dist/server/sse-handler.d.ts +62 -0
- package/dist/server/sse-handler.js +234 -0
- package/package.json +15 -3
- package/scripts/launch-electron.js +0 -58
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
import { validateAgentMessageIds } from './validation.js';
|
|
2
|
+
import { createCategoryLogger } from '../logger.js';
|
|
3
|
+
import { EventEmitter } from 'events';
|
|
4
|
+
const logger = createCategoryLogger('storage.memory');
|
|
5
|
+
/**
|
|
6
|
+
* Deep clone utility for data isolation
|
|
7
|
+
*/
|
|
8
|
+
function deepClone(obj) {
|
|
9
|
+
if (obj === null || typeof obj !== 'object') {
|
|
10
|
+
return obj;
|
|
11
|
+
}
|
|
12
|
+
if (obj instanceof Date) {
|
|
13
|
+
return new Date(obj.getTime());
|
|
14
|
+
}
|
|
15
|
+
if (obj instanceof EventEmitter) {
|
|
16
|
+
// For EventEmitter, create a new instance to preserve functionality
|
|
17
|
+
const newEmitter = new EventEmitter();
|
|
18
|
+
// Copy listeners if any exist
|
|
19
|
+
const events = obj._events;
|
|
20
|
+
if (events) {
|
|
21
|
+
newEmitter._events = Object.assign({}, events);
|
|
22
|
+
newEmitter._eventsCount = obj._eventsCount;
|
|
23
|
+
}
|
|
24
|
+
return newEmitter;
|
|
25
|
+
}
|
|
26
|
+
if (obj instanceof Map) {
|
|
27
|
+
const clonedMap = new Map();
|
|
28
|
+
for (const [key, value] of obj.entries()) {
|
|
29
|
+
clonedMap.set(key, deepClone(value));
|
|
30
|
+
}
|
|
31
|
+
return clonedMap;
|
|
32
|
+
}
|
|
33
|
+
if (Array.isArray(obj)) {
|
|
34
|
+
return obj.map(item => deepClone(item));
|
|
35
|
+
}
|
|
36
|
+
const clonedObj = {};
|
|
37
|
+
for (const key in obj) {
|
|
38
|
+
if (obj.hasOwnProperty(key)) {
|
|
39
|
+
clonedObj[key] = deepClone(obj[key]);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return clonedObj;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Generate a simple unique ID for testing purposes
|
|
46
|
+
*/
|
|
47
|
+
function generateId() {
|
|
48
|
+
return Math.random().toString(36).substr(2, 9);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Memory-based storage implementation
|
|
52
|
+
*/
|
|
53
|
+
export class MemoryStorage {
|
|
54
|
+
worlds = new Map();
|
|
55
|
+
agents = new Map(); // worldId -> agentId -> Agent
|
|
56
|
+
chats = new Map(); // worldId -> chatId -> Chat
|
|
57
|
+
worldChats = new Map(); // worldId -> chatId -> WorldChat
|
|
58
|
+
archivedMemory = new Map(); // worldId -> agentId -> archived messages
|
|
59
|
+
// World operations
|
|
60
|
+
async saveWorld(worldData) {
|
|
61
|
+
if (!worldData.id) {
|
|
62
|
+
throw new Error('World ID is required');
|
|
63
|
+
}
|
|
64
|
+
// Exclude runtime properties before cloning and storing
|
|
65
|
+
const { eventEmitter, agents, chats, eventStorage, _eventPersistenceCleanup, ...persistableWorld } = worldData;
|
|
66
|
+
// Deep clone to prevent external mutations
|
|
67
|
+
const clonedWorld = deepClone(persistableWorld);
|
|
68
|
+
this.worlds.set(worldData.id, clonedWorld);
|
|
69
|
+
}
|
|
70
|
+
async loadWorld(worldId) {
|
|
71
|
+
const world = this.worlds.get(worldId);
|
|
72
|
+
return world ? deepClone(world) : null;
|
|
73
|
+
}
|
|
74
|
+
async deleteWorld(worldId) {
|
|
75
|
+
const deleted = this.worlds.delete(worldId);
|
|
76
|
+
if (deleted) {
|
|
77
|
+
// Clean up related data
|
|
78
|
+
this.agents.delete(worldId);
|
|
79
|
+
this.chats.delete(worldId);
|
|
80
|
+
this.worldChats.delete(worldId);
|
|
81
|
+
this.archivedMemory.delete(worldId);
|
|
82
|
+
}
|
|
83
|
+
return deleted;
|
|
84
|
+
}
|
|
85
|
+
async listWorlds() {
|
|
86
|
+
return Array.from(this.worlds.values()).map(world => deepClone(world));
|
|
87
|
+
}
|
|
88
|
+
async worldExists(worldId) {
|
|
89
|
+
return this.worlds.has(worldId);
|
|
90
|
+
}
|
|
91
|
+
async getMemory(worldId, chatId) {
|
|
92
|
+
const messages = [];
|
|
93
|
+
const worldAgents = this.agents.get(worldId);
|
|
94
|
+
if (!worldAgents)
|
|
95
|
+
return [];
|
|
96
|
+
for (const agent of worldAgents.values()) {
|
|
97
|
+
const mem = Array.isArray(agent.memory) ? agent.memory : [];
|
|
98
|
+
for (const msg of mem) {
|
|
99
|
+
if (!chatId || msg.chatId === chatId) {
|
|
100
|
+
const messageWithAgentId = deepClone(msg);
|
|
101
|
+
// Ensure agentId is included in the message
|
|
102
|
+
messageWithAgentId.agentId = agent.id;
|
|
103
|
+
messages.push(messageWithAgentId);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Sort by createdAt ascending
|
|
108
|
+
messages.sort((a, b) => {
|
|
109
|
+
const at = a.createdAt ? new Date(a.createdAt).getTime() : 0;
|
|
110
|
+
const bt = b.createdAt ? new Date(b.createdAt).getTime() : 0;
|
|
111
|
+
return at - bt;
|
|
112
|
+
});
|
|
113
|
+
return messages;
|
|
114
|
+
}
|
|
115
|
+
// Agent operations
|
|
116
|
+
async saveAgent(worldId, agent) {
|
|
117
|
+
if (!agent.id) {
|
|
118
|
+
throw new Error('Agent ID is required');
|
|
119
|
+
}
|
|
120
|
+
// CRITICAL: Filter out system messages - they should NEVER be saved to memory
|
|
121
|
+
// System messages are generated dynamically during LLM preparation
|
|
122
|
+
const originalMemoryLength = agent.memory.length;
|
|
123
|
+
agent.memory = agent.memory.filter(msg => msg.role !== 'system');
|
|
124
|
+
if (agent.memory.length < originalMemoryLength) {
|
|
125
|
+
logger.warn('Filtered out system messages from agent memory before saving', {
|
|
126
|
+
agentId: agent.id,
|
|
127
|
+
worldId,
|
|
128
|
+
removedCount: originalMemoryLength - agent.memory.length,
|
|
129
|
+
remainingCount: agent.memory.length
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
// Auto-migrate legacy messages without messageId
|
|
133
|
+
const migrated = validateAgentMessageIds(agent);
|
|
134
|
+
if (migrated) {
|
|
135
|
+
logger.info('Auto-migrated agent messages with missing messageIds', {
|
|
136
|
+
agentId: agent.id,
|
|
137
|
+
worldId,
|
|
138
|
+
messageCount: agent.memory.length
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
if (!this.agents.has(worldId)) {
|
|
142
|
+
this.agents.set(worldId, new Map());
|
|
143
|
+
}
|
|
144
|
+
const worldAgents = this.agents.get(worldId);
|
|
145
|
+
worldAgents.set(agent.id, deepClone(agent));
|
|
146
|
+
}
|
|
147
|
+
async loadAgent(worldId, agentId) {
|
|
148
|
+
const worldAgents = this.agents.get(worldId);
|
|
149
|
+
if (!worldAgents)
|
|
150
|
+
return null;
|
|
151
|
+
const agent = worldAgents.get(agentId);
|
|
152
|
+
if (!agent)
|
|
153
|
+
return null;
|
|
154
|
+
const clonedAgent = deepClone(agent);
|
|
155
|
+
// Auto-migrate on load if needed
|
|
156
|
+
const migrated = validateAgentMessageIds(clonedAgent);
|
|
157
|
+
if (migrated) {
|
|
158
|
+
logger.info('Auto-migrated agent messages on load', {
|
|
159
|
+
agentId,
|
|
160
|
+
worldId,
|
|
161
|
+
messageCount: clonedAgent.memory.length
|
|
162
|
+
});
|
|
163
|
+
// Update the stored agent directly (avoid recursive saveAgent call)
|
|
164
|
+
worldAgents.set(agentId, deepClone(clonedAgent));
|
|
165
|
+
}
|
|
166
|
+
return clonedAgent;
|
|
167
|
+
}
|
|
168
|
+
async loadAgentWithRetry(worldId, agentId, options) {
|
|
169
|
+
// For memory storage, no retry is needed as there are no I/O failures
|
|
170
|
+
return this.loadAgent(worldId, agentId);
|
|
171
|
+
}
|
|
172
|
+
async deleteAgent(worldId, agentId) {
|
|
173
|
+
const worldAgents = this.agents.get(worldId);
|
|
174
|
+
if (!worldAgents)
|
|
175
|
+
return false;
|
|
176
|
+
const deleted = worldAgents.delete(agentId);
|
|
177
|
+
if (deleted) {
|
|
178
|
+
// Clean up archived memory for this agent
|
|
179
|
+
const worldMemory = this.archivedMemory.get(worldId);
|
|
180
|
+
if (worldMemory) {
|
|
181
|
+
worldMemory.delete(agentId);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return deleted;
|
|
185
|
+
}
|
|
186
|
+
async listAgents(worldId) {
|
|
187
|
+
const worldAgents = this.agents.get(worldId);
|
|
188
|
+
if (!worldAgents)
|
|
189
|
+
return [];
|
|
190
|
+
return Array.from(worldAgents.values()).map(agent => deepClone(agent));
|
|
191
|
+
}
|
|
192
|
+
async agentExists(worldId, agentId) {
|
|
193
|
+
const worldAgents = this.agents.get(worldId);
|
|
194
|
+
return worldAgents ? worldAgents.has(agentId) : false;
|
|
195
|
+
}
|
|
196
|
+
async saveAgentMemory(worldId, agentId, memory) {
|
|
197
|
+
const agent = await this.loadAgent(worldId, agentId);
|
|
198
|
+
if (agent) {
|
|
199
|
+
agent.memory = deepClone(memory);
|
|
200
|
+
await this.saveAgent(worldId, agent);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async archiveMemory(worldId, agentId, memory) {
|
|
204
|
+
if (!this.archivedMemory.has(worldId)) {
|
|
205
|
+
this.archivedMemory.set(worldId, new Map());
|
|
206
|
+
}
|
|
207
|
+
const worldMemory = this.archivedMemory.get(worldId);
|
|
208
|
+
const existingArchive = worldMemory.get(agentId) || [];
|
|
209
|
+
worldMemory.set(agentId, [...existingArchive, ...deepClone(memory)]);
|
|
210
|
+
}
|
|
211
|
+
async deleteMemoryByChatId(worldId, chatId) {
|
|
212
|
+
let deletedCount = 0;
|
|
213
|
+
const worldAgents = this.agents.get(worldId);
|
|
214
|
+
if (worldAgents) {
|
|
215
|
+
for (const [agentId, agent] of worldAgents.entries()) {
|
|
216
|
+
const originalLength = agent.memory.length;
|
|
217
|
+
agent.memory = agent.memory.filter(msg => msg.chatId !== chatId);
|
|
218
|
+
const deleted = originalLength - agent.memory.length;
|
|
219
|
+
deletedCount += deleted;
|
|
220
|
+
if (deleted > 0) {
|
|
221
|
+
await this.saveAgent(worldId, agent);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return deletedCount;
|
|
226
|
+
}
|
|
227
|
+
// Batch operations
|
|
228
|
+
async saveAgentsBatch(worldId, agents) {
|
|
229
|
+
for (const agent of agents) {
|
|
230
|
+
await this.saveAgent(worldId, agent);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
async loadAgentsBatch(worldId, agentIds) {
|
|
234
|
+
const agents = [];
|
|
235
|
+
for (const agentId of agentIds) {
|
|
236
|
+
const agent = await this.loadAgent(worldId, agentId);
|
|
237
|
+
if (agent) {
|
|
238
|
+
agents.push(agent);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return agents;
|
|
242
|
+
}
|
|
243
|
+
// Chat operations
|
|
244
|
+
async saveChatData(worldId, chat) {
|
|
245
|
+
if (!chat.id) {
|
|
246
|
+
throw new Error('Chat ID is required');
|
|
247
|
+
}
|
|
248
|
+
if (!this.chats.has(worldId)) {
|
|
249
|
+
this.chats.set(worldId, new Map());
|
|
250
|
+
}
|
|
251
|
+
const worldChats = this.chats.get(worldId);
|
|
252
|
+
worldChats.set(chat.id, deepClone(chat));
|
|
253
|
+
}
|
|
254
|
+
async loadChatData(worldId, chatId) {
|
|
255
|
+
const worldChats = this.chats.get(worldId);
|
|
256
|
+
if (!worldChats)
|
|
257
|
+
return null;
|
|
258
|
+
const chat = worldChats.get(chatId);
|
|
259
|
+
return chat ? deepClone(chat) : null;
|
|
260
|
+
}
|
|
261
|
+
async deleteChatData(worldId, chatId) {
|
|
262
|
+
const worldChats = this.chats.get(worldId);
|
|
263
|
+
if (!worldChats)
|
|
264
|
+
return false;
|
|
265
|
+
const deleted = worldChats.delete(chatId);
|
|
266
|
+
if (deleted) {
|
|
267
|
+
// Also clean up world chat snapshots
|
|
268
|
+
const worldChatSnapshots = this.worldChats.get(worldId);
|
|
269
|
+
if (worldChatSnapshots) {
|
|
270
|
+
worldChatSnapshots.delete(chatId);
|
|
271
|
+
}
|
|
272
|
+
// Clean up memory associated with this chat
|
|
273
|
+
await this.deleteMemoryByChatId(worldId, chatId);
|
|
274
|
+
}
|
|
275
|
+
return deleted;
|
|
276
|
+
}
|
|
277
|
+
async listChats(worldId) {
|
|
278
|
+
const worldChats = this.chats.get(worldId);
|
|
279
|
+
if (!worldChats)
|
|
280
|
+
return [];
|
|
281
|
+
return Array.from(worldChats.values()).map(chat => deepClone(chat));
|
|
282
|
+
}
|
|
283
|
+
async updateChatData(worldId, chatId, updates) {
|
|
284
|
+
const chat = await this.loadChatData(worldId, chatId);
|
|
285
|
+
if (!chat)
|
|
286
|
+
return null;
|
|
287
|
+
// Apply updates
|
|
288
|
+
if (updates.name !== undefined)
|
|
289
|
+
chat.name = updates.name;
|
|
290
|
+
if (updates.description !== undefined)
|
|
291
|
+
chat.description = updates.description;
|
|
292
|
+
if (updates.messageCount !== undefined)
|
|
293
|
+
chat.messageCount = updates.messageCount;
|
|
294
|
+
chat.updatedAt = new Date();
|
|
295
|
+
await this.saveChatData(worldId, chat);
|
|
296
|
+
return deepClone(chat);
|
|
297
|
+
}
|
|
298
|
+
async updateChatNameIfCurrent(worldId, chatId, expectedName, nextName) {
|
|
299
|
+
const worldChats = this.chats.get(worldId);
|
|
300
|
+
if (!worldChats)
|
|
301
|
+
return false;
|
|
302
|
+
const chat = worldChats.get(chatId);
|
|
303
|
+
if (!chat)
|
|
304
|
+
return false;
|
|
305
|
+
if (chat.name !== expectedName)
|
|
306
|
+
return false;
|
|
307
|
+
chat.name = nextName;
|
|
308
|
+
chat.updatedAt = new Date();
|
|
309
|
+
worldChats.set(chatId, deepClone(chat));
|
|
310
|
+
return true;
|
|
311
|
+
}
|
|
312
|
+
// World chat operations
|
|
313
|
+
async saveWorldChat(worldId, chatId, chat) {
|
|
314
|
+
if (!this.worldChats.has(worldId)) {
|
|
315
|
+
this.worldChats.set(worldId, new Map());
|
|
316
|
+
}
|
|
317
|
+
const worldChatSnapshots = this.worldChats.get(worldId);
|
|
318
|
+
worldChatSnapshots.set(chatId, deepClone(chat));
|
|
319
|
+
}
|
|
320
|
+
async loadWorldChat(worldId, chatId) {
|
|
321
|
+
const worldChatSnapshots = this.worldChats.get(worldId);
|
|
322
|
+
if (!worldChatSnapshots)
|
|
323
|
+
return null;
|
|
324
|
+
const worldChat = worldChatSnapshots.get(chatId);
|
|
325
|
+
return worldChat ? deepClone(worldChat) : null;
|
|
326
|
+
}
|
|
327
|
+
async loadWorldChatFull(worldId, chatId) {
|
|
328
|
+
// For memory storage, full and regular load are the same
|
|
329
|
+
return this.loadWorldChat(worldId, chatId);
|
|
330
|
+
}
|
|
331
|
+
async restoreFromWorldChat(worldId, chat) {
|
|
332
|
+
try {
|
|
333
|
+
// Restore world state
|
|
334
|
+
await this.saveWorld(chat.world);
|
|
335
|
+
// Restore agents
|
|
336
|
+
for (const agent of chat.agents) {
|
|
337
|
+
await this.saveAgent(worldId, agent);
|
|
338
|
+
}
|
|
339
|
+
return true;
|
|
340
|
+
}
|
|
341
|
+
catch (error) {
|
|
342
|
+
console.error('[memory-storage] Failed to restore from world chat:', error);
|
|
343
|
+
return false;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
// Integrity operations
|
|
347
|
+
async validateIntegrity(worldId, agentId) {
|
|
348
|
+
try {
|
|
349
|
+
if (agentId) {
|
|
350
|
+
// Validate specific agent
|
|
351
|
+
const agent = await this.loadAgent(worldId, agentId);
|
|
352
|
+
return !!agent && typeof agent.id === 'string' && agent.id === agentId;
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
// Validate world
|
|
356
|
+
const world = await this.loadWorld(worldId);
|
|
357
|
+
return !!world && typeof world.id === 'string' && world.id === worldId;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
return false;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
async repairData(worldId, agentId) {
|
|
365
|
+
// For memory storage, repair is mostly about validation
|
|
366
|
+
// since data corruption is unlikely in memory
|
|
367
|
+
return this.validateIntegrity(worldId, agentId);
|
|
368
|
+
}
|
|
369
|
+
// Utility methods for testing and debugging
|
|
370
|
+
/**
|
|
371
|
+
* Clear all stored data - useful for test cleanup
|
|
372
|
+
*/
|
|
373
|
+
async clear() {
|
|
374
|
+
this.worlds.clear();
|
|
375
|
+
this.agents.clear();
|
|
376
|
+
this.chats.clear();
|
|
377
|
+
this.worldChats.clear();
|
|
378
|
+
this.archivedMemory.clear();
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Get storage statistics - useful for debugging
|
|
382
|
+
*/
|
|
383
|
+
getStats() {
|
|
384
|
+
let totalAgents = 0;
|
|
385
|
+
let totalChats = 0;
|
|
386
|
+
let totalWorldChats = 0;
|
|
387
|
+
let totalArchivedMemory = 0;
|
|
388
|
+
for (const worldAgents of this.agents.values()) {
|
|
389
|
+
totalAgents += worldAgents.size;
|
|
390
|
+
}
|
|
391
|
+
for (const worldChats of this.chats.values()) {
|
|
392
|
+
totalChats += worldChats.size;
|
|
393
|
+
}
|
|
394
|
+
for (const worldChatSnapshots of this.worldChats.values()) {
|
|
395
|
+
totalWorldChats += worldChatSnapshots.size;
|
|
396
|
+
}
|
|
397
|
+
for (const worldMemory of this.archivedMemory.values()) {
|
|
398
|
+
totalArchivedMemory += worldMemory.size;
|
|
399
|
+
}
|
|
400
|
+
return {
|
|
401
|
+
worlds: this.worlds.size,
|
|
402
|
+
totalAgents,
|
|
403
|
+
totalChats,
|
|
404
|
+
totalWorldChats,
|
|
405
|
+
totalArchivedMemory
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Create a new memory storage instance
|
|
411
|
+
*/
|
|
412
|
+
export function createMemoryStorage() {
|
|
413
|
+
return new MemoryStorage();
|
|
414
|
+
}
|
|
415
|
+
//# sourceMappingURL=memory-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-storage.js","sourceRoot":"","sources":["../../../core/storage/memory-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQL File-Based Migration Runner
|
|
3
|
+
*
|
|
4
|
+
* Purpose: Manages database schema migrations using SQL files
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Executes SQL migration files in order
|
|
8
|
+
* - Tracks migration versions in database
|
|
9
|
+
* - Supports both TypeScript and SQL file migrations
|
|
10
|
+
* - Prevents concurrent migrations with locks
|
|
11
|
+
* - Provides rollback support (future enhancement)
|
|
12
|
+
* - Better error handling and logging
|
|
13
|
+
*
|
|
14
|
+
* Migration File Naming Convention:
|
|
15
|
+
* - {version}_{description}.sql (e.g., 0001_create_events_table.sql)
|
|
16
|
+
* - Version numbers must be sequential
|
|
17
|
+
* - Files are executed in numeric order
|
|
18
|
+
*
|
|
19
|
+
* Implementation:
|
|
20
|
+
* - 2025-11-02: Initial implementation replacing inline TypeScript migrations
|
|
21
|
+
*/
|
|
22
|
+
import type { Database } from 'sqlite3';
|
|
23
|
+
export interface MigrationContext {
|
|
24
|
+
db: Database;
|
|
25
|
+
migrationsDir: string;
|
|
26
|
+
}
|
|
27
|
+
export interface MigrationFile {
|
|
28
|
+
version: number;
|
|
29
|
+
name: string;
|
|
30
|
+
filePath: string;
|
|
31
|
+
}
|
|
32
|
+
interface MigrationRecord {
|
|
33
|
+
version: number;
|
|
34
|
+
name: string;
|
|
35
|
+
applied_at: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get current schema version from database
|
|
39
|
+
*/
|
|
40
|
+
export declare function getCurrentVersion(db: Database): Promise<number>;
|
|
41
|
+
/**
|
|
42
|
+
* Set schema version in database
|
|
43
|
+
*/
|
|
44
|
+
export declare function setVersion(db: Database, version: number): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Create migration tracking table if it doesn't exist
|
|
47
|
+
* This provides better migration history than just PRAGMA user_version
|
|
48
|
+
*/
|
|
49
|
+
export declare function ensureMigrationTable(db: Database): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Get list of applied migrations from tracking table
|
|
52
|
+
*/
|
|
53
|
+
export declare function getAppliedMigrations(db: Database): Promise<MigrationRecord[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Record a migration in the tracking table
|
|
56
|
+
*/
|
|
57
|
+
export declare function recordMigration(db: Database, version: number, name: string): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Discover all SQL migration files in the migrations directory
|
|
60
|
+
*/
|
|
61
|
+
export declare function discoverMigrations(migrationsDir: string): MigrationFile[];
|
|
62
|
+
/**
|
|
63
|
+
* Read and parse SQL migration file
|
|
64
|
+
*/
|
|
65
|
+
export declare function readMigrationFile(filePath: string): string;
|
|
66
|
+
/**
|
|
67
|
+
* Execute a single migration file
|
|
68
|
+
*/
|
|
69
|
+
export declare function executeMigration(db: Database, migration: MigrationFile): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Check if migrations are needed
|
|
72
|
+
*/
|
|
73
|
+
export declare function needsMigration(db: Database, migrationsDir: string): Promise<boolean>;
|
|
74
|
+
/**
|
|
75
|
+
* Run all pending migrations
|
|
76
|
+
*/
|
|
77
|
+
export declare function runMigrations(ctx: MigrationContext): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* Get migration status and history
|
|
80
|
+
*/
|
|
81
|
+
export declare function getMigrationStatus(ctx: MigrationContext): Promise<{
|
|
82
|
+
currentVersion: number;
|
|
83
|
+
availableMigrations: MigrationFile[];
|
|
84
|
+
appliedMigrations: MigrationRecord[];
|
|
85
|
+
pendingMigrations: MigrationFile[];
|
|
86
|
+
}>;
|
|
87
|
+
/**
|
|
88
|
+
* Validate migration file sequence
|
|
89
|
+
* Ensures no gaps or duplicates in version numbers
|
|
90
|
+
*/
|
|
91
|
+
export declare function validateMigrationSequence(migrations: MigrationFile[]): {
|
|
92
|
+
isValid: boolean;
|
|
93
|
+
errors: string[];
|
|
94
|
+
};
|
|
95
|
+
export {};
|
|
96
|
+
//# sourceMappingURL=migration-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-runner.d.ts","sourceRoot":"","sources":["../../../core/storage/migration-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQxC,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,QAAQ,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAQrE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe7E;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAatE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAUnF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,EAAE,CAwBzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC5F;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU1F;AAKD;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBxE;AAgDD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,aAAa,EAAE,CAAC;IACrC,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,iBAAiB,EAAE,aAAa,EAAE,CAAC;CACpC,CAAC,CAuBD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG;IACtE,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CA6BA"}
|