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,134 @@
1
+ /**
2
+ * Agent Storage Module - File I/O Operations for Agent Data
3
+ *
4
+ * Features:
5
+ * - Agent file persistence with three-file structure (config.json, system-prompt.md, memory.json)
6
+ * - Kebab-case directory naming from agent names
7
+ * - Date serialization handling for AgentMessage.createdAt
8
+ * - Atomic file operations with error handling
9
+ * - Enhanced loading with retry mechanism and partial recovery
10
+ * - Batch loading optimization for performance
11
+ * - Complete isolation from other internal modules
12
+ * - Memory archiving for data preservation before clearing
13
+ *
14
+ * Core Functions:
15
+ * - saveAgentToDisk: Save agent config, system prompt, and memory to separate files
16
+ * - saveAgentConfigToDisk: Save agent config and system prompt without memory
17
+ * - loadAgentFromDisk: Load complete agent data from files with Date reconstruction
18
+ * - loadAgentFromDiskWithRetry: Enhanced loading with retry mechanism
19
+ * - loadAllAgentsFromDisk: Scan and load all agents in world directory
20
+ * - loadAllAgentsFromDiskBatch: Optimized batch loading with parallel processing
21
+ * - deleteAgentFromDisk: Remove agent directory and all files
22
+ * - agentExistsOnDisk: Check if agent directory exists
23
+ * - getAgentDir: Get agent directory path
24
+ * - ensureAgentDirectory: Create agent directory structure
25
+ * - validateAgentIntegrity: Check agent data consistency
26
+ * - repairAgentData: Attempt to repair corrupted agent files
27
+ * - archiveAgentMemory: Archive current memory before clearing
28
+ *
29
+ * Implementation:
30
+ * - Extracted from world-persistence.ts functions
31
+ * - Uses only fs/promises, path, types.ts, and utils.js
32
+ * - Handles memory as simple AgentMessage[] array
33
+ * - Proper Date object serialization/deserialization
34
+ * - Enhanced error recovery and data validation
35
+ * - Memory archiving preserves conversation history with timestamps
36
+ */
37
+ import { Agent, AgentMessage } from '../types.js';
38
+ /**
39
+ * Agent loading options for enhanced control
40
+ */
41
+ export interface AgentLoadOptions {
42
+ includeMemory?: boolean;
43
+ retryCount?: number;
44
+ retryDelay?: number;
45
+ allowPartialLoad?: boolean;
46
+ validateIntegrity?: boolean;
47
+ }
48
+ /**
49
+ * Agent integrity check result
50
+ */
51
+ export interface AgentIntegrityResult {
52
+ isValid: boolean;
53
+ hasConfig: boolean;
54
+ hasSystemPrompt: boolean;
55
+ hasMemory: boolean;
56
+ errors: string[];
57
+ warnings: string[];
58
+ }
59
+ /**
60
+ * Batch loading result with success and failure tracking
61
+ */
62
+ export interface BatchLoadResult {
63
+ successful: Agent[];
64
+ failed: Array<{
65
+ agentId: string;
66
+ error: string;
67
+ }>;
68
+ totalCount: number;
69
+ successCount: number;
70
+ failureCount: number;
71
+ }
72
+ /**
73
+ * Get agent directory path using kebab-case agent name
74
+ */
75
+ export declare function getAgentDir(rootPath: string, worldId: string, agentId: string): string;
76
+ /**
77
+ * Ensure agent directory structure exists
78
+ */
79
+ export declare function ensureAgentDirectory(rootPath: string, worldId: string, agentId: string): Promise<void>;
80
+ /**
81
+ * Check if agent directory exists on disk
82
+ */
83
+ export declare function agentExists(rootPath: string, worldId: string, agentId: string): Promise<boolean>;
84
+ /**
85
+ * Validate agent data integrity
86
+ */
87
+ export declare function validateAgentIntegrity(rootPath: string, worldId: string, agentId: string): Promise<AgentIntegrityResult>;
88
+ /**
89
+ * Attempt to repair corrupted agent data
90
+ */
91
+ export declare function repairAgentData(rootPath: string, worldId: string, agentId: string): Promise<boolean>;
92
+ /**
93
+ * Save agent to disk with three-file structure
94
+ */
95
+ export declare function saveAgent(rootPath: string, worldId: string, agent: Agent): Promise<void>;
96
+ /**
97
+ * Save agent configuration and system prompt to disk without memory
98
+ * This is useful for saving agent metadata changes without including chat history
99
+ */
100
+ export declare function saveAgentConfig(rootPath: string, worldId: string, agent: Agent): Promise<void>;
101
+ /**
102
+ * Save only agent memory to disk (performance optimized)
103
+ */
104
+ export declare function saveAgentMemory(rootPath: string, worldId: string, agentId: string, memory: AgentMessage[]): Promise<void>;
105
+ /**
106
+ * Archive agent memory to timestamped file before clearing
107
+ */
108
+ export declare function archiveAgentMemory(rootPath: string, worldId: string, agentId: string, memory: AgentMessage[]): Promise<void>;
109
+ /**
110
+ * Enhanced agent loading with retry mechanism and partial recovery
111
+ */
112
+ export declare function loadAgentWithRetry(rootPath: string, worldId: string, agentId: string, options?: AgentLoadOptions): Promise<Agent | null>;
113
+ /**
114
+ * Load agent from disk with complete data reconstruction (original method)
115
+ */
116
+ export declare function loadAgent(rootPath: string, worldId: string, agentId: string): Promise<Agent | null>;
117
+ /**
118
+ * Optimized batch loading with parallel processing
119
+ */
120
+ export declare function loadAgentsBatch(rootPath: string, worldId: string, options?: AgentLoadOptions): Promise<BatchLoadResult>;
121
+ /**
122
+ * Load all agents from world directory (original method)
123
+ */
124
+ export declare function listAgents(rootPath: string, worldId: string): Promise<Agent[]>;
125
+ /**
126
+ * Delete agent directory and all files
127
+ */
128
+ export declare function deleteAgent(rootPath: string, worldId: string, agentId: string): Promise<boolean>;
129
+ /**
130
+ * Delete all memory items with a specific chat ID from all agents in a world
131
+ * Returns the number of memory items deleted
132
+ */
133
+ export declare function deleteMemoryByChatId(rootPath: string, worldId: string, chatId: string): Promise<number>;
134
+ //# sourceMappingURL=agent-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-storage.d.ts","sourceRoot":"","sources":["../../../core/storage/agent-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,498 @@
1
+ /**
2
+ * Agent Storage Module - File I/O Operations for Agent Data
3
+ *
4
+ * Features:
5
+ * - Agent file persistence with three-file structure (config.json, system-prompt.md, memory.json)
6
+ * - Kebab-case directory naming from agent names
7
+ * - Date serialization handling for AgentMessage.createdAt
8
+ * - Atomic file operations with error handling
9
+ * - Enhanced loading with retry mechanism and partial recovery
10
+ * - Batch loading optimization for performance
11
+ * - Complete isolation from other internal modules
12
+ * - Memory archiving for data preservation before clearing
13
+ *
14
+ * Core Functions:
15
+ * - saveAgentToDisk: Save agent config, system prompt, and memory to separate files
16
+ * - saveAgentConfigToDisk: Save agent config and system prompt without memory
17
+ * - loadAgentFromDisk: Load complete agent data from files with Date reconstruction
18
+ * - loadAgentFromDiskWithRetry: Enhanced loading with retry mechanism
19
+ * - loadAllAgentsFromDisk: Scan and load all agents in world directory
20
+ * - loadAllAgentsFromDiskBatch: Optimized batch loading with parallel processing
21
+ * - deleteAgentFromDisk: Remove agent directory and all files
22
+ * - agentExistsOnDisk: Check if agent directory exists
23
+ * - getAgentDir: Get agent directory path
24
+ * - ensureAgentDirectory: Create agent directory structure
25
+ * - validateAgentIntegrity: Check agent data consistency
26
+ * - repairAgentData: Attempt to repair corrupted agent files
27
+ * - archiveAgentMemory: Archive current memory before clearing
28
+ *
29
+ * Implementation:
30
+ * - Extracted from world-persistence.ts functions
31
+ * - Uses only fs/promises, path, types.ts, and utils.js
32
+ * - Handles memory as simple AgentMessage[] array
33
+ * - Proper Date object serialization/deserialization
34
+ * - Enhanced error recovery and data validation
35
+ * - Memory archiving preserves conversation history with timestamps
36
+ */
37
+ import { promises as fs } from 'fs';
38
+ import * as path from 'path';
39
+ import { toKebabCase } from '../utils.js';
40
+ /**
41
+ * Get agent directory path using kebab-case agent name
42
+ */
43
+ export function getAgentDir(rootPath, worldId, agentId) {
44
+ return path.join(rootPath, worldId, 'agents', agentId);
45
+ }
46
+ /**
47
+ * Ensure agent directory structure exists
48
+ */
49
+ export async function ensureAgentDirectory(rootPath, worldId, agentId) {
50
+ const agentDir = getAgentDir(rootPath, worldId, agentId);
51
+ await fs.mkdir(agentDir, { recursive: true });
52
+ }
53
+ /**
54
+ * Check if agent directory exists on disk
55
+ */
56
+ export async function agentExists(rootPath, worldId, agentId) {
57
+ try {
58
+ const agentDir = getAgentDir(rootPath, worldId, agentId);
59
+ const configPath = path.join(agentDir, 'config.json');
60
+ await fs.access(configPath);
61
+ return true;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ /**
68
+ * Validate agent data integrity
69
+ */
70
+ export async function validateAgentIntegrity(rootPath, worldId, agentId) {
71
+ const result = {
72
+ isValid: true,
73
+ hasConfig: false,
74
+ hasSystemPrompt: false,
75
+ hasMemory: false,
76
+ errors: [],
77
+ warnings: []
78
+ };
79
+ const agentDir = getAgentDir(rootPath, worldId, agentId);
80
+ try {
81
+ // Check config file
82
+ const configPath = path.join(agentDir, 'config.json');
83
+ try {
84
+ await fs.access(configPath);
85
+ result.hasConfig = true;
86
+ // Validate config content
87
+ const configData = await readJsonFile(configPath);
88
+ if (!configData.id || !configData.type || !configData.provider || !configData.model) {
89
+ result.errors.push('Invalid config structure');
90
+ result.isValid = false;
91
+ }
92
+ }
93
+ catch {
94
+ result.errors.push('Missing config.json file');
95
+ result.isValid = false;
96
+ }
97
+ // Check system prompt file
98
+ const systemPromptPath = path.join(agentDir, 'system-prompt.md');
99
+ try {
100
+ await fs.access(systemPromptPath);
101
+ result.hasSystemPrompt = true;
102
+ }
103
+ catch {
104
+ result.warnings.push('Missing system-prompt.md file');
105
+ }
106
+ // Check memory file
107
+ const memoryPath = path.join(agentDir, 'memory.json');
108
+ try {
109
+ await fs.access(memoryPath);
110
+ result.hasMemory = true;
111
+ // Validate memory content
112
+ try {
113
+ const memoryData = await readJsonFile(memoryPath);
114
+ if (!Array.isArray(memoryData)) {
115
+ result.errors.push('Invalid memory.json structure');
116
+ result.isValid = false;
117
+ }
118
+ }
119
+ catch {
120
+ result.errors.push('Corrupted memory.json file');
121
+ result.isValid = false;
122
+ }
123
+ }
124
+ catch {
125
+ result.warnings.push('Missing memory.json file');
126
+ }
127
+ }
128
+ catch (error) {
129
+ result.errors.push(`Directory access error: ${error}`);
130
+ result.isValid = false;
131
+ }
132
+ return result;
133
+ }
134
+ /**
135
+ * Attempt to repair corrupted agent data
136
+ */
137
+ export async function repairAgentData(rootPath, worldId, agentId) {
138
+ try {
139
+ const integrity = await validateAgentIntegrity(rootPath, worldId, agentId);
140
+ const agentDir = getAgentDir(rootPath, worldId, agentId);
141
+ let repaired = false;
142
+ // Repair missing system prompt
143
+ if (!integrity.hasSystemPrompt) {
144
+ const systemPromptPath = path.join(agentDir, 'system-prompt.md');
145
+ const defaultPrompt = `You are ${agentId}, an AI agent.`;
146
+ await writeTextFile(systemPromptPath, defaultPrompt);
147
+ repaired = true;
148
+ }
149
+ // Repair missing memory file
150
+ if (!integrity.hasMemory) {
151
+ const memoryPath = path.join(agentDir, 'memory.json');
152
+ await writeJsonFile(memoryPath, []);
153
+ repaired = true;
154
+ }
155
+ return repaired;
156
+ }
157
+ catch {
158
+ return false;
159
+ }
160
+ }
161
+ /**
162
+ * Save agent to disk with three-file structure
163
+ */
164
+ export async function saveAgent(rootPath, worldId, agent) {
165
+ const agentId = toKebabCase(agent.id);
166
+ await ensureAgentDirectory(rootPath, worldId, agentId);
167
+ const agentDir = getAgentDir(rootPath, worldId, agentId);
168
+ // Save system prompt as markdown file
169
+ const systemPromptPath = path.join(agentDir, 'system-prompt.md');
170
+ const systemPromptContent = agent.systemPrompt || `You are ${agent.id}, an AI agent.`;
171
+ await writeTextFile(systemPromptPath, systemPromptContent);
172
+ // Save memory as JSON with Date serialization
173
+ const memoryPath = path.join(agentDir, 'memory.json');
174
+ // Serialize memory, preserving new lines as \n
175
+ const serializedMemory = (agent.memory || []).map(msg => ({
176
+ ...msg,
177
+ content: typeof msg.content === 'string' ? msg.content.replace(/\n/g, '\\n') : msg.content
178
+ }));
179
+ await writeJsonFile(memoryPath, serializedMemory);
180
+ // Save agent data without system prompt (stored separately) and with Date serialization
181
+ // Exclude systemPrompt and memory from config.json
182
+ const { systemPrompt, memory, ...agentWithoutPromptAndMemory } = agent;
183
+ const agentData = {
184
+ ...agentWithoutPromptAndMemory,
185
+ createdAt: agent.createdAt instanceof Date ? agent.createdAt.toISOString() : agent.createdAt,
186
+ lastActive: agent.lastActive instanceof Date ? agent.lastActive.toISOString() : agent.lastActive,
187
+ lastLLMCall: agent.lastLLMCall instanceof Date ? agent.lastLLMCall.toISOString() : agent.lastLLMCall
188
+ };
189
+ const configPath = path.join(agentDir, 'config.json');
190
+ await writeJsonFile(configPath, agentData);
191
+ }
192
+ /**
193
+ * Save agent configuration and system prompt to disk without memory
194
+ * This is useful for saving agent metadata changes without including chat history
195
+ */
196
+ export async function saveAgentConfig(rootPath, worldId, agent) {
197
+ const agentId = toKebabCase(agent.id);
198
+ await ensureAgentDirectory(rootPath, worldId, agentId);
199
+ const agentDir = getAgentDir(rootPath, worldId, agentId);
200
+ // Save system prompt as markdown file
201
+ const systemPromptPath = path.join(agentDir, 'system-prompt.md');
202
+ const systemPromptContent = agent.systemPrompt || `You are ${agent.id}, an AI agent.`;
203
+ await writeTextFile(systemPromptPath, systemPromptContent);
204
+ // Save agent data without system prompt and memory, with Date serialization
205
+ const { systemPrompt, memory, ...agentWithoutPromptAndMemory } = agent;
206
+ const agentData = {
207
+ ...agentWithoutPromptAndMemory,
208
+ createdAt: agent.createdAt instanceof Date ? agent.createdAt.toISOString() : agent.createdAt,
209
+ lastActive: agent.lastActive instanceof Date ? agent.lastActive.toISOString() : agent.lastActive,
210
+ lastLLMCall: agent.lastLLMCall instanceof Date ? agent.lastLLMCall.toISOString() : agent.lastLLMCall
211
+ };
212
+ const configPath = path.join(agentDir, 'config.json');
213
+ await writeJsonFile(configPath, agentData);
214
+ }
215
+ /**
216
+ * Save only agent memory to disk (performance optimized)
217
+ */
218
+ export async function saveAgentMemory(rootPath, worldId, agentId, memory) {
219
+ const agentDir = getAgentDir(rootPath, worldId, agentId);
220
+ // Ensure directory exists
221
+ await ensureAgentDirectory(rootPath, worldId, agentId);
222
+ // Save memory as JSON with Date serialization
223
+ const memoryPath = path.join(agentDir, 'memory.json');
224
+ // Serialize memory, preserving new lines as \n
225
+ const serializedMemory = (memory || []).map(msg => ({
226
+ ...msg,
227
+ content: typeof msg.content === 'string' ? msg.content.replace(/\n/g, '\\n') : msg.content
228
+ }));
229
+ await writeJsonFile(memoryPath, serializedMemory);
230
+ }
231
+ /**
232
+ * Archive agent memory to timestamped file before clearing
233
+ */
234
+ export async function archiveAgentMemory(rootPath, worldId, agentId, memory) {
235
+ const agentDir = getAgentDir(rootPath, worldId, agentId);
236
+ // Create archive directory if it doesn't exist
237
+ const archiveDir = path.join(agentDir, 'archive');
238
+ await fs.mkdir(archiveDir, { recursive: true });
239
+ // Generate timestamp for archive filename
240
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
241
+ const archiveFilename = `memory-${timestamp}.json`;
242
+ const archivePath = path.join(archiveDir, archiveFilename);
243
+ // Save memory to archive file
244
+ // Serialize memory, preserving new lines as \n
245
+ const serializedMemory = (memory || []).map(msg => ({
246
+ ...msg,
247
+ content: typeof msg.content === 'string' ? msg.content.replace(/\n/g, '\\n') : msg.content
248
+ }));
249
+ await writeJsonFile(archivePath, serializedMemory);
250
+ }
251
+ /**
252
+ * Enhanced agent loading with retry mechanism and partial recovery
253
+ */
254
+ export async function loadAgentWithRetry(rootPath, worldId, agentId, options = {}) {
255
+ const { includeMemory = true, retryCount = 2, retryDelay = 100, allowPartialLoad = false, validateIntegrity = false } = options;
256
+ for (let attempt = 0; attempt <= retryCount; attempt++) {
257
+ try {
258
+ // Validate integrity if requested
259
+ if (validateIntegrity) {
260
+ const integrity = await validateAgentIntegrity(rootPath, worldId, agentId);
261
+ if (!integrity.isValid && !allowPartialLoad) {
262
+ // Attempt repair on first try
263
+ if (attempt === 0) {
264
+ await repairAgentData(rootPath, worldId, agentId);
265
+ continue; // Retry after repair
266
+ }
267
+ throw new Error(`Agent integrity check failed: ${integrity.errors.join(', ')}`);
268
+ }
269
+ }
270
+ const agentDir = getAgentDir(rootPath, worldId, agentId);
271
+ // Load config
272
+ const configPath = path.join(agentDir, 'config.json');
273
+ const agentData = await readJsonFile(configPath);
274
+ // Load system prompt with fallback
275
+ const systemPromptPath = path.join(agentDir, 'system-prompt.md');
276
+ let systemPrompt;
277
+ try {
278
+ systemPrompt = await fs.readFile(systemPromptPath, 'utf8');
279
+ }
280
+ catch {
281
+ systemPrompt = `You are ${agentId}, an AI agent.`;
282
+ // Create missing system prompt file if allowing partial load
283
+ if (allowPartialLoad) {
284
+ await writeTextFile(systemPromptPath, systemPrompt);
285
+ }
286
+ }
287
+ // Load memory with fallback
288
+ let memory = [];
289
+ if (includeMemory) {
290
+ const memoryPath = path.join(agentDir, 'memory.json');
291
+ try {
292
+ const rawMemory = await readJsonFile(memoryPath);
293
+ memory = rawMemory.map(msg => ({
294
+ ...msg,
295
+ content: typeof msg.content === 'string' ? msg.content.replace(/\\n/g, '\n') : msg.content,
296
+ createdAt: msg.createdAt ? new Date(msg.createdAt) : new Date(),
297
+ chatId: msg.chatId, // Preserve chatId field for filtering
298
+ messageId: msg.messageId // Preserve messageId field
299
+ }));
300
+ }
301
+ catch {
302
+ // Create missing memory file if allowing partial load
303
+ if (allowPartialLoad) {
304
+ await writeJsonFile(memoryPath, []);
305
+ }
306
+ }
307
+ }
308
+ // Reconstruct agent with Date objects and system prompt
309
+ const agent = {
310
+ ...agentData,
311
+ id: agentId, // Ensure the id is always set correctly
312
+ systemPrompt,
313
+ memory,
314
+ createdAt: agentData.createdAt ? new Date(agentData.createdAt) : new Date(),
315
+ lastActive: agentData.lastActive ? new Date(agentData.lastActive) : new Date(),
316
+ lastLLMCall: agentData.lastLLMCall ? new Date(agentData.lastLLMCall) : undefined
317
+ };
318
+ return agent;
319
+ }
320
+ catch (error) {
321
+ if (attempt === retryCount) {
322
+ // Last attempt failed
323
+ return null;
324
+ }
325
+ // Wait before retry
326
+ if (retryDelay > 0) {
327
+ await new Promise(resolve => setTimeout(resolve, retryDelay));
328
+ }
329
+ }
330
+ }
331
+ return null;
332
+ }
333
+ /**
334
+ * Load agent from disk with complete data reconstruction (original method)
335
+ */
336
+ export async function loadAgent(rootPath, worldId, agentId) {
337
+ return loadAgentWithRetry(rootPath, worldId, agentId, {
338
+ includeMemory: true,
339
+ retryCount: 1,
340
+ allowPartialLoad: true,
341
+ validateIntegrity: false
342
+ });
343
+ }
344
+ /**
345
+ * Optimized batch loading with parallel processing
346
+ */
347
+ export async function loadAgentsBatch(rootPath, worldId, options = {}) {
348
+ const result = {
349
+ successful: [],
350
+ failed: [],
351
+ totalCount: 0,
352
+ successCount: 0,
353
+ failureCount: 0
354
+ };
355
+ try {
356
+ const agentsDir = path.join(rootPath, worldId, 'agents');
357
+ const entries = await fs.readdir(agentsDir, { withFileTypes: true });
358
+ const agentDirs = entries.filter(entry => entry.isDirectory());
359
+ result.totalCount = agentDirs.length;
360
+ // Load agents in parallel batches to avoid overwhelming the system
361
+ const batchSize = 10;
362
+ const batches = [];
363
+ for (let i = 0; i < agentDirs.length; i += batchSize) {
364
+ batches.push(agentDirs.slice(i, i + batchSize).map(entry => entry.name));
365
+ }
366
+ for (const batch of batches) {
367
+ const batchPromises = batch.map(async (agentId) => {
368
+ try {
369
+ const agent = await loadAgentWithRetry(rootPath, worldId, agentId, options);
370
+ if (agent) {
371
+ result.successful.push(agent);
372
+ result.successCount++;
373
+ }
374
+ else {
375
+ result.failed.push({ agentId, error: 'Failed to load agent data' });
376
+ result.failureCount++;
377
+ }
378
+ }
379
+ catch (error) {
380
+ result.failed.push({
381
+ agentId,
382
+ error: error instanceof Error ? error.message : 'Unknown error'
383
+ });
384
+ result.failureCount++;
385
+ }
386
+ });
387
+ await Promise.all(batchPromises);
388
+ }
389
+ }
390
+ catch (error) {
391
+ // Directory doesn't exist or other filesystem error
392
+ result.failed.push({
393
+ agentId: 'SYSTEM',
394
+ error: error instanceof Error ? error.message : 'Failed to access agents directory'
395
+ });
396
+ }
397
+ return result;
398
+ }
399
+ /**
400
+ * Load all agents from world directory (original method)
401
+ */
402
+ export async function listAgents(rootPath, worldId) {
403
+ const result = await loadAgentsBatch(rootPath, worldId, {
404
+ includeMemory: true,
405
+ allowPartialLoad: true,
406
+ validateIntegrity: false
407
+ });
408
+ return result.successful;
409
+ }
410
+ /**
411
+ * Delete agent directory and all files
412
+ */
413
+ export async function deleteAgent(rootPath, worldId, agentId) {
414
+ try {
415
+ const agentDir = getAgentDir(rootPath, worldId, agentId);
416
+ // Check if directory exists first
417
+ await fs.access(agentDir);
418
+ // If we get here, directory exists, so delete it
419
+ await fs.rm(agentDir, { recursive: true, force: true });
420
+ return true;
421
+ }
422
+ catch {
423
+ return false;
424
+ }
425
+ }
426
+ /**
427
+ * Delete all memory items with a specific chat ID from all agents in a world
428
+ * Returns the number of memory items deleted
429
+ */
430
+ export async function deleteMemoryByChatId(rootPath, worldId, chatId) {
431
+ let deletedCount = 0;
432
+ try {
433
+ // Get list of all agents in the world
434
+ const agents = await listAgents(rootPath, worldId);
435
+ // Process each agent
436
+ for (const agent of agents) {
437
+ try {
438
+ // Load full agent data including memory
439
+ const fullAgent = await loadAgent(rootPath, worldId, agent.id);
440
+ if (!fullAgent || !fullAgent.memory)
441
+ continue;
442
+ // Filter out memory items with the specified chat ID
443
+ const originalMemoryLength = fullAgent.memory.length;
444
+ fullAgent.memory = fullAgent.memory.filter(msg => msg.chatId !== chatId);
445
+ const newMemoryLength = fullAgent.memory.length;
446
+ // If memory was modified, save the agent
447
+ if (originalMemoryLength !== newMemoryLength) {
448
+ await saveAgentMemory(rootPath, worldId, agent.id, fullAgent.memory);
449
+ deletedCount += (originalMemoryLength - newMemoryLength);
450
+ }
451
+ }
452
+ catch (error) {
453
+ // Log error but continue processing other agents
454
+ console.warn(`Failed to process agent ${agent.id} for memory deletion:`, error);
455
+ }
456
+ }
457
+ }
458
+ catch (error) {
459
+ console.error(`Failed to delete memory by chat ID ${chatId}:`, error);
460
+ }
461
+ return deletedCount;
462
+ }
463
+ /**
464
+ * Write JSON file with atomic operation
465
+ */
466
+ async function writeJsonFile(filePath, data) {
467
+ const tempPath = `${filePath}.tmp`;
468
+ const jsonData = JSON.stringify(data, null, 2);
469
+ await fs.writeFile(tempPath, jsonData, 'utf8');
470
+ await fs.rename(tempPath, filePath);
471
+ }
472
+ /**
473
+ * Read JSON file
474
+ */
475
+ async function readJsonFile(filePath) {
476
+ const data = await fs.readFile(filePath, 'utf8');
477
+ return JSON.parse(data);
478
+ }
479
+ /**
480
+ * Write text file with atomic operation
481
+ */
482
+ async function writeTextFile(filePath, content) {
483
+ const tempPath = `${filePath}.tmp`;
484
+ await fs.writeFile(tempPath, content, 'utf8');
485
+ await fs.rename(tempPath, filePath);
486
+ }
487
+ /**
488
+ * Read text file
489
+ */
490
+ async function readTextFile(filePath) {
491
+ try {
492
+ return await fs.readFile(filePath, 'utf8');
493
+ }
494
+ catch {
495
+ return `You are an AI agent.`; // Default fallback
496
+ }
497
+ }
498
+ //# sourceMappingURL=agent-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-storage.js","sourceRoot":"","sources":["../../../core/storage/agent-storage.ts"],"names":[],"mappings":"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"}