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.
Files changed (267) hide show
  1. package/README.md +17 -7
  2. package/dist/cli/commands.d.ts +109 -0
  3. package/dist/cli/commands.js +2024 -0
  4. package/dist/cli/display.d.ts +124 -0
  5. package/dist/cli/display.js +381 -0
  6. package/dist/cli/hitl.d.ts +33 -0
  7. package/dist/cli/hitl.js +81 -0
  8. package/dist/cli/index.d.ts +2 -0
  9. package/dist/cli/stream.d.ts +41 -0
  10. package/dist/cli/stream.js +222 -0
  11. package/dist/core/activity-tracker.d.ts +16 -0
  12. package/dist/core/activity-tracker.d.ts.map +1 -0
  13. package/dist/core/activity-tracker.js +91 -0
  14. package/dist/core/activity-tracker.js.map +1 -0
  15. package/dist/core/ai-commands.d.ts +16 -0
  16. package/dist/core/ai-commands.d.ts.map +1 -0
  17. package/dist/core/ai-commands.js +24 -0
  18. package/dist/core/ai-commands.js.map +1 -0
  19. package/dist/core/ai-sdk-patch.d.ts +24 -0
  20. package/dist/core/ai-sdk-patch.d.ts.map +1 -0
  21. package/dist/core/ai-sdk-patch.js +169 -0
  22. package/dist/core/ai-sdk-patch.js.map +1 -0
  23. package/dist/core/anthropic-direct.d.ts +52 -0
  24. package/dist/core/anthropic-direct.d.ts.map +1 -0
  25. package/dist/core/anthropic-direct.js +301 -0
  26. package/dist/core/anthropic-direct.js.map +1 -0
  27. package/dist/core/approval-cache.d.ts +104 -0
  28. package/dist/core/approval-cache.d.ts.map +1 -0
  29. package/dist/core/approval-cache.js +150 -0
  30. package/dist/core/approval-cache.js.map +1 -0
  31. package/dist/core/chat-constants.d.ts +20 -0
  32. package/dist/core/chat-constants.d.ts.map +1 -0
  33. package/dist/core/chat-constants.js +22 -0
  34. package/dist/core/chat-constants.js.map +1 -0
  35. package/dist/core/create-agent-tool.d.ts +66 -0
  36. package/dist/core/create-agent-tool.d.ts.map +1 -0
  37. package/dist/core/create-agent-tool.js +212 -0
  38. package/dist/core/create-agent-tool.js.map +1 -0
  39. package/dist/core/events/approval-checker.d.ts +61 -0
  40. package/dist/core/events/approval-checker.d.ts.map +1 -0
  41. package/dist/core/events/approval-checker.js +226 -0
  42. package/dist/core/events/approval-checker.js.map +1 -0
  43. package/dist/core/events/index.d.ts +25 -0
  44. package/dist/core/events/index.d.ts.map +1 -0
  45. package/dist/core/events/index.js +30 -0
  46. package/dist/core/events/index.js.map +1 -0
  47. package/dist/core/events/memory-manager.d.ts +73 -0
  48. package/dist/core/events/memory-manager.d.ts.map +1 -0
  49. package/dist/core/events/memory-manager.js +1218 -0
  50. package/dist/core/events/memory-manager.js.map +1 -0
  51. package/dist/core/events/mention-logic.d.ts +39 -0
  52. package/dist/core/events/mention-logic.d.ts.map +1 -0
  53. package/dist/core/events/mention-logic.js +163 -0
  54. package/dist/core/events/mention-logic.js.map +1 -0
  55. package/dist/core/events/orchestrator.d.ts +69 -0
  56. package/dist/core/events/orchestrator.d.ts.map +1 -0
  57. package/dist/core/events/orchestrator.js +883 -0
  58. package/dist/core/events/orchestrator.js.map +1 -0
  59. package/dist/core/events/persistence.d.ts +41 -0
  60. package/dist/core/events/persistence.d.ts.map +1 -0
  61. package/dist/core/events/persistence.js +296 -0
  62. package/dist/core/events/persistence.js.map +1 -0
  63. package/dist/core/events/publishers.d.ts +81 -0
  64. package/dist/core/events/publishers.d.ts.map +1 -0
  65. package/dist/core/events/publishers.js +272 -0
  66. package/dist/core/events/publishers.js.map +1 -0
  67. package/dist/core/events/subscribers.d.ts +45 -0
  68. package/dist/core/events/subscribers.d.ts.map +1 -0
  69. package/dist/core/events/subscribers.js +288 -0
  70. package/dist/core/events/subscribers.js.map +1 -0
  71. package/dist/core/events/tool-bridge-logging.d.ts +28 -0
  72. package/dist/core/events/tool-bridge-logging.d.ts.map +1 -0
  73. package/dist/core/events/tool-bridge-logging.js +94 -0
  74. package/dist/core/events/tool-bridge-logging.js.map +1 -0
  75. package/dist/core/events-metadata.d.ts +72 -0
  76. package/dist/core/events-metadata.d.ts.map +1 -0
  77. package/dist/core/events-metadata.js +167 -0
  78. package/dist/core/events-metadata.js.map +1 -0
  79. package/dist/core/events.d.ts +186 -0
  80. package/dist/core/events.d.ts.map +1 -0
  81. package/dist/core/events.js +1248 -0
  82. package/dist/core/events.js.map +1 -0
  83. package/dist/core/export.d.ts +106 -0
  84. package/dist/core/export.d.ts.map +1 -0
  85. package/dist/core/export.js +705 -0
  86. package/dist/core/export.js.map +1 -0
  87. package/dist/core/file-tools.d.ts +114 -0
  88. package/dist/core/file-tools.d.ts.map +1 -0
  89. package/dist/core/file-tools.js +370 -0
  90. package/dist/core/file-tools.js.map +1 -0
  91. package/dist/core/google-direct.d.ts +58 -0
  92. package/dist/core/google-direct.d.ts.map +1 -0
  93. package/dist/core/google-direct.js +298 -0
  94. package/dist/core/google-direct.js.map +1 -0
  95. package/dist/core/hitl.d.ts +54 -0
  96. package/dist/core/hitl.d.ts.map +1 -0
  97. package/dist/core/hitl.js +153 -0
  98. package/dist/core/hitl.js.map +1 -0
  99. package/dist/core/index.d.ts +59 -0
  100. package/dist/core/index.d.ts.map +1 -0
  101. package/dist/core/index.js +70 -0
  102. package/dist/core/index.js.map +1 -0
  103. package/dist/core/llm-config.d.ts +128 -0
  104. package/dist/core/llm-config.d.ts.map +1 -0
  105. package/dist/core/llm-config.js +164 -0
  106. package/dist/core/llm-config.js.map +1 -0
  107. package/dist/core/llm-manager.d.ts +163 -0
  108. package/dist/core/llm-manager.d.ts.map +1 -0
  109. package/dist/core/llm-manager.js +669 -0
  110. package/dist/core/llm-manager.js.map +1 -0
  111. package/dist/core/load-skill-tool.d.ts +55 -0
  112. package/dist/core/load-skill-tool.d.ts.map +1 -0
  113. package/dist/core/load-skill-tool.js +468 -0
  114. package/dist/core/load-skill-tool.js.map +1 -0
  115. package/dist/core/logger.d.ts +88 -0
  116. package/dist/core/logger.d.ts.map +1 -0
  117. package/dist/core/logger.js +358 -0
  118. package/dist/core/logger.js.map +1 -0
  119. package/dist/core/managers.d.ts +131 -0
  120. package/dist/core/managers.d.ts.map +1 -0
  121. package/dist/core/managers.js +1223 -0
  122. package/dist/core/managers.js.map +1 -0
  123. package/dist/core/mcp-server-registry.d.ts +304 -0
  124. package/dist/core/mcp-server-registry.d.ts.map +1 -0
  125. package/dist/core/mcp-server-registry.js +1769 -0
  126. package/dist/core/mcp-server-registry.js.map +1 -0
  127. package/dist/core/mcp-tools.d.ts +56 -0
  128. package/dist/core/mcp-tools.d.ts.map +1 -0
  129. package/dist/core/mcp-tools.js +186 -0
  130. package/dist/core/mcp-tools.js.map +1 -0
  131. package/dist/core/message-prep.d.ts +81 -0
  132. package/dist/core/message-prep.d.ts.map +1 -0
  133. package/dist/core/message-prep.js +223 -0
  134. package/dist/core/message-prep.js.map +1 -0
  135. package/dist/core/message-processing-control.d.ts +54 -0
  136. package/dist/core/message-processing-control.d.ts.map +1 -0
  137. package/dist/core/message-processing-control.js +139 -0
  138. package/dist/core/message-processing-control.js.map +1 -0
  139. package/dist/core/openai-direct.d.ts +80 -0
  140. package/dist/core/openai-direct.d.ts.map +1 -0
  141. package/dist/core/openai-direct.js +374 -0
  142. package/dist/core/openai-direct.js.map +1 -0
  143. package/dist/core/shell-cmd-tool.d.ts +235 -0
  144. package/dist/core/shell-cmd-tool.d.ts.map +1 -0
  145. package/dist/core/shell-cmd-tool.js +1157 -0
  146. package/dist/core/shell-cmd-tool.js.map +1 -0
  147. package/dist/core/shell-process-registry.d.ts +88 -0
  148. package/dist/core/shell-process-registry.d.ts.map +1 -0
  149. package/dist/core/shell-process-registry.js +309 -0
  150. package/dist/core/shell-process-registry.js.map +1 -0
  151. package/dist/core/skill-registry.d.ts +75 -0
  152. package/dist/core/skill-registry.d.ts.map +1 -0
  153. package/dist/core/skill-registry.js +369 -0
  154. package/dist/core/skill-registry.js.map +1 -0
  155. package/dist/core/skill-script-runner.d.ts +89 -0
  156. package/dist/core/skill-script-runner.d.ts.map +1 -0
  157. package/dist/core/skill-script-runner.js +274 -0
  158. package/dist/core/skill-script-runner.js.map +1 -0
  159. package/dist/core/skill-selector.d.ts +65 -0
  160. package/dist/core/skill-selector.d.ts.map +1 -0
  161. package/dist/core/skill-selector.js +190 -0
  162. package/dist/core/skill-selector.js.map +1 -0
  163. package/dist/core/skill-settings.d.ts +20 -0
  164. package/dist/core/skill-settings.d.ts.map +1 -0
  165. package/dist/core/skill-settings.js +40 -0
  166. package/dist/core/skill-settings.js.map +1 -0
  167. package/dist/core/storage/agent-storage.d.ts +134 -0
  168. package/dist/core/storage/agent-storage.d.ts.map +1 -0
  169. package/dist/core/storage/agent-storage.js +498 -0
  170. package/dist/core/storage/agent-storage.js.map +1 -0
  171. package/dist/core/storage/eventStorage/fileEventStorage.d.ts +100 -0
  172. package/dist/core/storage/eventStorage/fileEventStorage.d.ts.map +1 -0
  173. package/dist/core/storage/eventStorage/fileEventStorage.js +494 -0
  174. package/dist/core/storage/eventStorage/fileEventStorage.js.map +1 -0
  175. package/dist/core/storage/eventStorage/index.d.ts +31 -0
  176. package/dist/core/storage/eventStorage/index.d.ts.map +1 -0
  177. package/dist/core/storage/eventStorage/index.js +31 -0
  178. package/dist/core/storage/eventStorage/index.js.map +1 -0
  179. package/dist/core/storage/eventStorage/memoryEventStorage.d.ts +87 -0
  180. package/dist/core/storage/eventStorage/memoryEventStorage.d.ts.map +1 -0
  181. package/dist/core/storage/eventStorage/memoryEventStorage.js +244 -0
  182. package/dist/core/storage/eventStorage/memoryEventStorage.js.map +1 -0
  183. package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts +45 -0
  184. package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts.map +1 -0
  185. package/dist/core/storage/eventStorage/sqliteEventStorage.js +301 -0
  186. package/dist/core/storage/eventStorage/sqliteEventStorage.js.map +1 -0
  187. package/dist/core/storage/eventStorage/types.d.ts +142 -0
  188. package/dist/core/storage/eventStorage/types.d.ts.map +1 -0
  189. package/dist/core/storage/eventStorage/types.js +43 -0
  190. package/dist/core/storage/eventStorage/types.js.map +1 -0
  191. package/dist/core/storage/eventStorage/validation.d.ts +30 -0
  192. package/dist/core/storage/eventStorage/validation.d.ts.map +1 -0
  193. package/dist/core/storage/eventStorage/validation.js +68 -0
  194. package/dist/core/storage/eventStorage/validation.js.map +1 -0
  195. package/dist/core/storage/legacy-migrations.d.ts +45 -0
  196. package/dist/core/storage/legacy-migrations.d.ts.map +1 -0
  197. package/dist/core/storage/legacy-migrations.js +295 -0
  198. package/dist/core/storage/legacy-migrations.js.map +1 -0
  199. package/dist/core/storage/memory-storage.d.ts +105 -0
  200. package/dist/core/storage/memory-storage.d.ts.map +1 -0
  201. package/dist/core/storage/memory-storage.js +415 -0
  202. package/dist/core/storage/memory-storage.js.map +1 -0
  203. package/dist/core/storage/migration-runner.d.ts +96 -0
  204. package/dist/core/storage/migration-runner.d.ts.map +1 -0
  205. package/dist/core/storage/migration-runner.js +306 -0
  206. package/dist/core/storage/migration-runner.js.map +1 -0
  207. package/dist/core/storage/queue-storage.d.ts +147 -0
  208. package/dist/core/storage/queue-storage.d.ts.map +1 -0
  209. package/dist/core/storage/queue-storage.js +290 -0
  210. package/dist/core/storage/queue-storage.js.map +1 -0
  211. package/dist/core/storage/skill-storage.d.ts +136 -0
  212. package/dist/core/storage/skill-storage.d.ts.map +1 -0
  213. package/dist/core/storage/skill-storage.js +474 -0
  214. package/dist/core/storage/skill-storage.js.map +1 -0
  215. package/dist/core/storage/sqlite-schema.d.ts +95 -0
  216. package/dist/core/storage/sqlite-schema.d.ts.map +1 -0
  217. package/dist/core/storage/sqlite-schema.js +156 -0
  218. package/dist/core/storage/sqlite-schema.js.map +1 -0
  219. package/dist/core/storage/sqlite-storage.d.ts +146 -0
  220. package/dist/core/storage/sqlite-storage.d.ts.map +1 -0
  221. package/dist/core/storage/sqlite-storage.js +709 -0
  222. package/dist/core/storage/sqlite-storage.js.map +1 -0
  223. package/dist/core/storage/storage-factory.d.ts +61 -0
  224. package/dist/core/storage/storage-factory.d.ts.map +1 -0
  225. package/dist/core/storage/storage-factory.js +794 -0
  226. package/dist/core/storage/storage-factory.js.map +1 -0
  227. package/dist/core/storage/validation.d.ts +36 -0
  228. package/dist/core/storage/validation.d.ts.map +1 -0
  229. package/dist/core/storage/validation.js +79 -0
  230. package/dist/core/storage/validation.js.map +1 -0
  231. package/dist/core/storage/world-storage.d.ts +114 -0
  232. package/dist/core/storage/world-storage.d.ts.map +1 -0
  233. package/dist/core/storage/world-storage.js +378 -0
  234. package/dist/core/storage/world-storage.js.map +1 -0
  235. package/dist/core/subscription.d.ts +43 -0
  236. package/dist/core/subscription.d.ts.map +1 -0
  237. package/dist/core/subscription.js +227 -0
  238. package/dist/core/subscription.js.map +1 -0
  239. package/dist/core/tool-utils.d.ts +80 -0
  240. package/dist/core/tool-utils.d.ts.map +1 -0
  241. package/dist/core/tool-utils.js +273 -0
  242. package/dist/core/tool-utils.js.map +1 -0
  243. package/dist/core/types.d.ts +595 -0
  244. package/dist/core/types.d.ts.map +1 -0
  245. package/dist/core/types.js +158 -0
  246. package/dist/core/types.js.map +1 -0
  247. package/dist/core/utils.d.ts +138 -0
  248. package/dist/core/utils.d.ts.map +1 -0
  249. package/dist/core/utils.js +478 -0
  250. package/dist/core/utils.js.map +1 -0
  251. package/dist/core/world-class.d.ts +43 -0
  252. package/dist/core/world-class.d.ts.map +1 -0
  253. package/dist/core/world-class.js +90 -0
  254. package/dist/core/world-class.js.map +1 -0
  255. package/dist/index.d.ts +18 -0
  256. package/dist/public/assets/agent-sprites-DJFgj-zP.png +0 -0
  257. package/dist/public/assets/border-KHK37r8y.svg +83 -0
  258. package/dist/public/assets/index-C9kPXL6G.css +1 -0
  259. package/dist/public/assets/index-DOQEHGWt.js +96 -0
  260. package/dist/public/index.html +21 -0
  261. package/dist/server/api.d.ts +2 -0
  262. package/dist/server/api.js +1124 -0
  263. package/dist/server/index.d.ts +29 -0
  264. package/dist/server/sse-handler.d.ts +62 -0
  265. package/dist/server/sse-handler.js +234 -0
  266. package/package.json +15 -3
  267. 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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,OAAO,KAAK,EACV,UAAU,EACV,KAAK,EACL,KAAK,EACL,IAAI,EACJ,gBAAgB,EAChB,SAAS,EACT,YAAY,EACb,MAAM,aAAa,CAAC;AA2DrB;;GAEG;AACH,qBAAa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,KAAK,CAAwC;IACrD,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,cAAc,CAAkD;IAGlE,SAAS,CAAC,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB1C,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAKjD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY9C,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAI9B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9C,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA4BnE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCvD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAwBlE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAK1F,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe/D,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAO7C,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/D,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxF,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtF,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBtE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAYtE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAQnE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBjE,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAO3C,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAchG,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAelH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9E,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAQzE,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAK7E,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBxE,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBtE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQrE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B;;OAEG;IACH,QAAQ,IAAI;QACV,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;KAC7B;CA8BF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,UAAU,CAEhD"}