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,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Legacy Migration Bridge (v0-7)
|
|
3
|
+
*
|
|
4
|
+
* Purpose: Handles migration from TypeScript-based migrations to SQL-based migrations
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Detects databases using old migration system (PRAGMA user_version only)
|
|
8
|
+
* - Applies appropriate schema updates based on current version
|
|
9
|
+
* - Syncs state to new migration tracking system
|
|
10
|
+
* - Ensures smooth transition with zero data loss
|
|
11
|
+
*
|
|
12
|
+
* Supported Legacy Versions:
|
|
13
|
+
* - v0: Base schema or unversioned database
|
|
14
|
+
* - v1-7: Various column additions and features
|
|
15
|
+
*
|
|
16
|
+
* After running legacy migrations, database will be at v7 and ready for new SQL migrations (v8+)
|
|
17
|
+
*
|
|
18
|
+
* Implementation:
|
|
19
|
+
* - 2025-11-02: Initial implementation for migration system transition
|
|
20
|
+
*/
|
|
21
|
+
import { promisify } from 'util';
|
|
22
|
+
import { createCategoryLogger } from '../logger.js';
|
|
23
|
+
const logger = createCategoryLogger('storage.migration');
|
|
24
|
+
/**
|
|
25
|
+
* Check if database is using legacy migration system
|
|
26
|
+
* Legacy databases have PRAGMA user_version but no schema_migrations table
|
|
27
|
+
*/
|
|
28
|
+
export async function isLegacyDatabase(db) {
|
|
29
|
+
const get = promisify(db.get.bind(db));
|
|
30
|
+
try {
|
|
31
|
+
// Check if schema_migrations table exists
|
|
32
|
+
const result = await get("SELECT name FROM sqlite_master WHERE type='table' AND name='schema_migrations'");
|
|
33
|
+
// If schema_migrations exists, it's using the new system
|
|
34
|
+
if (result) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
// Check if database has any tables (might be fresh database)
|
|
38
|
+
const tableCheck = await get("SELECT name FROM sqlite_master WHERE type='table' LIMIT 1");
|
|
39
|
+
// If no tables, it's a fresh database (not legacy)
|
|
40
|
+
if (!tableCheck) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
// Has tables but no schema_migrations = legacy database
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
logger.error('Error checking legacy database status', {
|
|
48
|
+
error: error instanceof Error ? error.message : String(error)
|
|
49
|
+
});
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get current version from PRAGMA user_version
|
|
55
|
+
*/
|
|
56
|
+
export async function getLegacyVersion(db) {
|
|
57
|
+
const get = promisify(db.get.bind(db));
|
|
58
|
+
try {
|
|
59
|
+
const result = await get("PRAGMA user_version");
|
|
60
|
+
return result.user_version;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Apply legacy migrations to bring database from v0-7 to v7
|
|
68
|
+
* This replicates the old TypeScript migration logic
|
|
69
|
+
*/
|
|
70
|
+
export async function applyLegacyMigrations(db) {
|
|
71
|
+
const run = promisify(db.run.bind(db));
|
|
72
|
+
const get = promisify(db.get.bind(db));
|
|
73
|
+
const all = promisify(db.all.bind(db));
|
|
74
|
+
const currentVersion = await getLegacyVersion(db);
|
|
75
|
+
logger.info('Applying legacy migrations', {
|
|
76
|
+
fromVersion: currentVersion,
|
|
77
|
+
toVersion: 7
|
|
78
|
+
});
|
|
79
|
+
// Version 0: Initial setup
|
|
80
|
+
if (currentVersion === 0) {
|
|
81
|
+
// Check if tables exist (existing unversioned database)
|
|
82
|
+
const tableCheck = await get("SELECT name FROM sqlite_master WHERE type='table' AND name='agent_memory'");
|
|
83
|
+
if (tableCheck) {
|
|
84
|
+
// Existing database - check what columns it has and add missing ones
|
|
85
|
+
logger.info('Migrating unversioned database', { version: 0 });
|
|
86
|
+
try {
|
|
87
|
+
const memoryColumns = await all("PRAGMA table_info(agent_memory)");
|
|
88
|
+
const hasChatId = memoryColumns?.some((col) => col.name === 'chat_id');
|
|
89
|
+
if (!hasChatId) {
|
|
90
|
+
logger.info('Adding column to agent_memory', { column: 'chat_id' });
|
|
91
|
+
await run(`ALTER TABLE agent_memory ADD COLUMN chat_id TEXT`);
|
|
92
|
+
await run(`CREATE INDEX IF NOT EXISTS idx_agent_memory_chat_id ON agent_memory(chat_id)`);
|
|
93
|
+
}
|
|
94
|
+
const worldColumns = await all("PRAGMA table_info(worlds)");
|
|
95
|
+
const hasLLMProvider = worldColumns?.some((col) => col.name === 'chat_llm_provider');
|
|
96
|
+
const hasLLMModel = worldColumns?.some((col) => col.name === 'chat_llm_model');
|
|
97
|
+
const hasCurrentChatId = worldColumns?.some((col) => col.name === 'current_chat_id');
|
|
98
|
+
if (!hasLLMProvider) {
|
|
99
|
+
logger.info('Adding column to worlds', { column: 'chat_llm_provider' });
|
|
100
|
+
await run(`ALTER TABLE worlds ADD COLUMN chat_llm_provider TEXT`);
|
|
101
|
+
}
|
|
102
|
+
if (!hasLLMModel) {
|
|
103
|
+
logger.info('Adding column to worlds', { column: 'chat_llm_model' });
|
|
104
|
+
await run(`ALTER TABLE worlds ADD COLUMN chat_llm_model TEXT`);
|
|
105
|
+
}
|
|
106
|
+
if (!hasCurrentChatId) {
|
|
107
|
+
logger.info('Adding column to worlds', { column: 'current_chat_id' });
|
|
108
|
+
await run(`ALTER TABLE worlds ADD COLUMN current_chat_id TEXT`);
|
|
109
|
+
}
|
|
110
|
+
await run(`PRAGMA user_version = 4`);
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
logger.warn('Legacy migration warning', {
|
|
114
|
+
error: error instanceof Error ? error.message : String(error)
|
|
115
|
+
});
|
|
116
|
+
await run(`PRAGMA user_version = 4`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// If no tables, skip - let the new system handle it
|
|
120
|
+
}
|
|
121
|
+
// Version 1 → 2: Add chat_id column
|
|
122
|
+
const version = await getLegacyVersion(db);
|
|
123
|
+
if (version === 1) {
|
|
124
|
+
logger.info('Migrating v1 → v2', { feature: 'chat_id column' });
|
|
125
|
+
try {
|
|
126
|
+
await run(`ALTER TABLE agent_memory ADD COLUMN chat_id TEXT`);
|
|
127
|
+
await run(`CREATE INDEX IF NOT EXISTS idx_agent_memory_chat_id ON agent_memory(chat_id)`);
|
|
128
|
+
await run(`PRAGMA user_version = 2`);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
logger.warn('Column might already exist', { column: 'chat_id' });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Version 2 → 3: Add LLM provider/model columns
|
|
135
|
+
const version2 = await getLegacyVersion(db);
|
|
136
|
+
if (version2 < 3) {
|
|
137
|
+
logger.info('Migrating to v3', { feature: 'LLM provider/model columns' });
|
|
138
|
+
try {
|
|
139
|
+
const worldColumns = await all("PRAGMA table_info(worlds)");
|
|
140
|
+
const hasLLMProvider = worldColumns?.some((col) => col.name === 'chat_llm_provider');
|
|
141
|
+
const hasLLMModel = worldColumns?.some((col) => col.name === 'chat_llm_model');
|
|
142
|
+
if (!hasLLMProvider) {
|
|
143
|
+
await run(`ALTER TABLE worlds ADD COLUMN chat_llm_provider TEXT`);
|
|
144
|
+
}
|
|
145
|
+
if (!hasLLMModel) {
|
|
146
|
+
await run(`ALTER TABLE worlds ADD COLUMN chat_llm_model TEXT`);
|
|
147
|
+
}
|
|
148
|
+
await run(`PRAGMA user_version = 3`);
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
logger.warn('Legacy migration warning', { version: 3 });
|
|
152
|
+
await run(`PRAGMA user_version = 3`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Version 3 → 4: Add current_chat_id column
|
|
156
|
+
const version3 = await getLegacyVersion(db);
|
|
157
|
+
if (version3 < 4) {
|
|
158
|
+
logger.info('Migrating to v4', { feature: 'current_chat_id column' });
|
|
159
|
+
try {
|
|
160
|
+
const worldColumns = await all("PRAGMA table_info(worlds)");
|
|
161
|
+
const hasCurrentChatId = worldColumns?.some((col) => col.name === 'current_chat_id');
|
|
162
|
+
if (!hasCurrentChatId) {
|
|
163
|
+
await run(`ALTER TABLE worlds ADD COLUMN current_chat_id TEXT`);
|
|
164
|
+
}
|
|
165
|
+
await run(`PRAGMA user_version = 4`);
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
logger.warn('Legacy migration warning', { version: 4 });
|
|
169
|
+
await run(`PRAGMA user_version = 4`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Version 4 → 5: Add mcp_config column
|
|
173
|
+
const version4 = await getLegacyVersion(db);
|
|
174
|
+
if (version4 < 5) {
|
|
175
|
+
logger.info('Migrating to v5', { feature: 'mcp_config column' });
|
|
176
|
+
try {
|
|
177
|
+
const worldColumns = await all("PRAGMA table_info(worlds)");
|
|
178
|
+
const hasMcpConfig = worldColumns?.some((col) => col.name === 'mcp_config');
|
|
179
|
+
if (!hasMcpConfig) {
|
|
180
|
+
await run(`ALTER TABLE worlds ADD COLUMN mcp_config TEXT`);
|
|
181
|
+
}
|
|
182
|
+
await run(`PRAGMA user_version = 5`);
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
logger.warn('Legacy migration warning', { version: 5 });
|
|
186
|
+
await run(`PRAGMA user_version = 5`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Version 5 → 6: Add message_id column
|
|
190
|
+
const version5 = await getLegacyVersion(db);
|
|
191
|
+
if (version5 < 6) {
|
|
192
|
+
logger.info('Migrating to v6', { feature: 'message_id column' });
|
|
193
|
+
try {
|
|
194
|
+
const memoryColumns = await all("PRAGMA table_info(agent_memory)");
|
|
195
|
+
const hasMessageId = memoryColumns?.some((col) => col.name === 'message_id');
|
|
196
|
+
if (!hasMessageId) {
|
|
197
|
+
await run(`ALTER TABLE agent_memory ADD COLUMN message_id TEXT`);
|
|
198
|
+
await run(`CREATE INDEX IF NOT EXISTS idx_agent_memory_message_id ON agent_memory(message_id)`);
|
|
199
|
+
}
|
|
200
|
+
await run(`PRAGMA user_version = 6`);
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
logger.warn('Legacy migration warning', { version: 6 });
|
|
204
|
+
await run(`PRAGMA user_version = 6`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Version 6 → 7: Add reply_to_message_id column
|
|
208
|
+
const version6 = await getLegacyVersion(db);
|
|
209
|
+
if (version6 < 7) {
|
|
210
|
+
logger.info('Migrating to v7', { feature: 'reply_to_message_id column' });
|
|
211
|
+
try {
|
|
212
|
+
const memoryColumns = await all("PRAGMA table_info(agent_memory)");
|
|
213
|
+
const hasReplyToMessageId = memoryColumns?.some((col) => col.name === 'reply_to_message_id');
|
|
214
|
+
if (!hasReplyToMessageId) {
|
|
215
|
+
await run(`ALTER TABLE agent_memory ADD COLUMN reply_to_message_id TEXT`);
|
|
216
|
+
await run(`CREATE INDEX IF NOT EXISTS idx_agent_memory_reply_to_message_id ON agent_memory(reply_to_message_id)`);
|
|
217
|
+
}
|
|
218
|
+
await run(`PRAGMA user_version = 7`);
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
logger.warn('Legacy migration warning', { version: 7 });
|
|
222
|
+
await run(`PRAGMA user_version = 7`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
const finalVersion = await getLegacyVersion(db);
|
|
226
|
+
logger.info('Legacy migrations completed', {
|
|
227
|
+
fromVersion: currentVersion,
|
|
228
|
+
toVersion: finalVersion
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Sync legacy database to new migration tracking system
|
|
233
|
+
* Creates schema_migrations table and records that v1-7 have been applied
|
|
234
|
+
*/
|
|
235
|
+
export async function syncToNewMigrationSystem(db) {
|
|
236
|
+
const run = (sql, params) => {
|
|
237
|
+
return new Promise((resolve, reject) => {
|
|
238
|
+
db.run(sql, params || [], (err) => {
|
|
239
|
+
if (err)
|
|
240
|
+
reject(err);
|
|
241
|
+
else
|
|
242
|
+
resolve();
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
};
|
|
246
|
+
logger.info('Syncing legacy database to new migration system');
|
|
247
|
+
// Create schema_migrations table
|
|
248
|
+
await run(`
|
|
249
|
+
CREATE TABLE IF NOT EXISTS schema_migrations (
|
|
250
|
+
version INTEGER PRIMARY KEY,
|
|
251
|
+
name TEXT NOT NULL,
|
|
252
|
+
applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
253
|
+
)
|
|
254
|
+
`);
|
|
255
|
+
// Record that legacy migrations have been applied
|
|
256
|
+
// These represent the state at v7
|
|
257
|
+
const legacyMigrations = [
|
|
258
|
+
{ version: 1, name: 'legacy_base_schema' },
|
|
259
|
+
{ version: 2, name: 'legacy_add_chat_id' },
|
|
260
|
+
{ version: 3, name: 'legacy_add_llm_config' },
|
|
261
|
+
{ version: 4, name: 'legacy_add_current_chat_id' },
|
|
262
|
+
{ version: 5, name: 'legacy_add_mcp_config' },
|
|
263
|
+
{ version: 6, name: 'legacy_add_message_id' },
|
|
264
|
+
{ version: 7, name: 'legacy_add_reply_to_message_id' }
|
|
265
|
+
];
|
|
266
|
+
for (const migration of legacyMigrations) {
|
|
267
|
+
try {
|
|
268
|
+
await run("INSERT OR IGNORE INTO schema_migrations (version, name) VALUES (?, ?)", [migration.version, migration.name]);
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
logger.warn('Could not record legacy migration', {
|
|
272
|
+
version: migration.version,
|
|
273
|
+
error: error instanceof Error ? error.message : String(error)
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
logger.info('Legacy database synced to new system');
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Main function to handle legacy migration and sync
|
|
281
|
+
*/
|
|
282
|
+
export async function migrateLegacyDatabase(db) {
|
|
283
|
+
const isLegacy = await isLegacyDatabase(db);
|
|
284
|
+
if (!isLegacy) {
|
|
285
|
+
logger.info('Database is not legacy, skipping legacy migration');
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
logger.info('Detected legacy database, applying migrations');
|
|
289
|
+
// Apply legacy migrations to bring to v7
|
|
290
|
+
await applyLegacyMigrations(db);
|
|
291
|
+
// Sync to new migration tracking system
|
|
292
|
+
await syncToNewMigrationSystem(db);
|
|
293
|
+
logger.info('Legacy database migration complete, ready for new SQL migrations');
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=legacy-migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-migrations.js","sourceRoot":"","sources":["../../../core/storage/legacy-migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Storage Implementation
|
|
3
|
+
*
|
|
4
|
+
* Logger Category: storage.memory
|
|
5
|
+
* Purpose: In-memory storage operations for tests and browser environments
|
|
6
|
+
*
|
|
7
|
+
* Enable with: LOG_STORAGE_MEMORY=debug npm run server
|
|
8
|
+
*
|
|
9
|
+
* What you'll see:
|
|
10
|
+
* - World/agent/chat CRUD operations
|
|
11
|
+
* - Memory operations and queries
|
|
12
|
+
* - Data validation errors
|
|
13
|
+
*
|
|
14
|
+
* In-memory storage backend for unit tests, browser environments, and development.
|
|
15
|
+
* Provides full StorageAPI compatibility with data persistence during runtime session.
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - Full StorageAPI implementation using in-memory Maps
|
|
19
|
+
* - No external dependencies or file system access required
|
|
20
|
+
* - Suitable for unit tests, browser environments, and development
|
|
21
|
+
* - Complete chat lifecycle management with parent-child relationships
|
|
22
|
+
* - Cross-agent memory aggregation for world-level contexts
|
|
23
|
+
* - Data integrity through cascade deletion
|
|
24
|
+
* - Runtime property exclusion: eventEmitter, agents, chats, eventStorage are not persisted
|
|
25
|
+
*
|
|
26
|
+
* Changes:
|
|
27
|
+
* - 2026-02-13: Added compare-and-set chat title update helper (`updateChatNameIfCurrent`) for race-safe title commits.
|
|
28
|
+
* - 2025-11-01: Exclude runtime properties from saveWorld to prevent storing EventEmitter and Map instances
|
|
29
|
+
* - Batch operations with atomic-like behavior
|
|
30
|
+
* - Memory archiving and cleanup operations
|
|
31
|
+
* - Data validation and integrity checks
|
|
32
|
+
* - Compatible agentId inclusion in getMemory for export functionality
|
|
33
|
+
*
|
|
34
|
+
* Implementation:
|
|
35
|
+
* - Uses nested Maps for hierarchical data organization
|
|
36
|
+
* - Maintains separate stores for worlds, agents, chats, and archived memory
|
|
37
|
+
* - Deep cloning for data isolation and immutability
|
|
38
|
+
* - Proper error handling with meaningful error messages
|
|
39
|
+
* - ID-based lookups with existence validation
|
|
40
|
+
* - Ensures getMemory includes agentId for message source identification
|
|
41
|
+
*
|
|
42
|
+
* Changes:
|
|
43
|
+
* - 2025-08-07: Initial implementation for non-Node environments
|
|
44
|
+
* - 2025-08-09: Added agentId to getMemory response for storage compatibility
|
|
45
|
+
* - 2025-10-31: Updated to structured logging (storage.memory category)
|
|
46
|
+
*/
|
|
47
|
+
import type { StorageAPI, World, Agent, Chat, UpdateChatParams, WorldChat, AgentMessage } from '../types.js';
|
|
48
|
+
/**
|
|
49
|
+
* Memory-based storage implementation
|
|
50
|
+
*/
|
|
51
|
+
export declare class MemoryStorage implements StorageAPI {
|
|
52
|
+
private worlds;
|
|
53
|
+
private agents;
|
|
54
|
+
private chats;
|
|
55
|
+
private worldChats;
|
|
56
|
+
private archivedMemory;
|
|
57
|
+
saveWorld(worldData: World): Promise<void>;
|
|
58
|
+
loadWorld(worldId: string): Promise<World | null>;
|
|
59
|
+
deleteWorld(worldId: string): Promise<boolean>;
|
|
60
|
+
listWorlds(): Promise<World[]>;
|
|
61
|
+
worldExists(worldId: string): Promise<boolean>;
|
|
62
|
+
getMemory(worldId: string, chatId: string): Promise<AgentMessage[]>;
|
|
63
|
+
saveAgent(worldId: string, agent: Agent): Promise<void>;
|
|
64
|
+
loadAgent(worldId: string, agentId: string): Promise<Agent | null>;
|
|
65
|
+
loadAgentWithRetry(worldId: string, agentId: string, options?: any): Promise<Agent | null>;
|
|
66
|
+
deleteAgent(worldId: string, agentId: string): Promise<boolean>;
|
|
67
|
+
listAgents(worldId: string): Promise<Agent[]>;
|
|
68
|
+
agentExists(worldId: string, agentId: string): Promise<boolean>;
|
|
69
|
+
saveAgentMemory(worldId: string, agentId: string, memory: AgentMessage[]): Promise<void>;
|
|
70
|
+
archiveMemory(worldId: string, agentId: string, memory: AgentMessage[]): Promise<void>;
|
|
71
|
+
deleteMemoryByChatId(worldId: string, chatId: string): Promise<number>;
|
|
72
|
+
saveAgentsBatch(worldId: string, agents: Agent[]): Promise<void>;
|
|
73
|
+
loadAgentsBatch(worldId: string, agentIds: string[]): Promise<Agent[]>;
|
|
74
|
+
saveChatData(worldId: string, chat: Chat): Promise<void>;
|
|
75
|
+
loadChatData(worldId: string, chatId: string): Promise<Chat | null>;
|
|
76
|
+
deleteChatData(worldId: string, chatId: string): Promise<boolean>;
|
|
77
|
+
listChats(worldId: string): Promise<Chat[]>;
|
|
78
|
+
updateChatData(worldId: string, chatId: string, updates: UpdateChatParams): Promise<Chat | null>;
|
|
79
|
+
updateChatNameIfCurrent(worldId: string, chatId: string, expectedName: string, nextName: string): Promise<boolean>;
|
|
80
|
+
saveWorldChat(worldId: string, chatId: string, chat: WorldChat): Promise<void>;
|
|
81
|
+
loadWorldChat(worldId: string, chatId: string): Promise<WorldChat | null>;
|
|
82
|
+
loadWorldChatFull(worldId: string, chatId: string): Promise<WorldChat | null>;
|
|
83
|
+
restoreFromWorldChat(worldId: string, chat: WorldChat): Promise<boolean>;
|
|
84
|
+
validateIntegrity(worldId: string, agentId?: string): Promise<boolean>;
|
|
85
|
+
repairData(worldId: string, agentId?: string): Promise<boolean>;
|
|
86
|
+
/**
|
|
87
|
+
* Clear all stored data - useful for test cleanup
|
|
88
|
+
*/
|
|
89
|
+
clear(): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* Get storage statistics - useful for debugging
|
|
92
|
+
*/
|
|
93
|
+
getStats(): {
|
|
94
|
+
worlds: number;
|
|
95
|
+
totalAgents: number;
|
|
96
|
+
totalChats: number;
|
|
97
|
+
totalWorldChats: number;
|
|
98
|
+
totalArchivedMemory: number;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Create a new memory storage instance
|
|
103
|
+
*/
|
|
104
|
+
export declare function createMemoryStorage(): StorageAPI;
|
|
105
|
+
//# sourceMappingURL=memory-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-storage.d.ts","sourceRoot":"","sources":["../../../core/storage/memory-storage.ts"],"names":[],"mappings":"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"}
|