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,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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"}
|