agentic-qe 1.3.4 → 1.3.6
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/.claude/agents/qe-code-complexity.md +291 -0
- package/.claude/settings.json +2 -2
- package/CHANGELOG.md +289 -0
- package/README.md +56 -26
- package/dist/agents/BaseAgent.d.ts +6 -2
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +62 -51
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts +139 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts.map +1 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.js +403 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.js.map +1 -0
- package/dist/agents/FleetCommanderAgent.js +2 -2
- package/dist/agents/FleetCommanderAgent.js.map +1 -1
- package/dist/agents/QualityGateAgent.d.ts +5 -5
- package/dist/agents/QualityGateAgent.d.ts.map +1 -1
- package/dist/agents/QualityGateAgent.js +33 -19
- package/dist/agents/QualityGateAgent.js.map +1 -1
- package/dist/agents/TestDataArchitectAgent.d.ts +9 -0
- package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
- package/dist/agents/TestDataArchitectAgent.js +96 -2
- package/dist/agents/TestDataArchitectAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts +23 -1
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +279 -54
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/coordination/AgentCoordinator.d.ts +98 -0
- package/dist/agents/coordination/AgentCoordinator.d.ts.map +1 -0
- package/dist/agents/coordination/AgentCoordinator.js +196 -0
- package/dist/agents/coordination/AgentCoordinator.js.map +1 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts +107 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.js +220 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -0
- package/dist/agents/memory/AgentMemoryService.d.ts +173 -0
- package/dist/agents/memory/AgentMemoryService.d.ts.map +1 -0
- package/dist/agents/memory/AgentMemoryService.js +297 -0
- package/dist/agents/memory/AgentMemoryService.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +45 -3
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/routing/index.d.ts +1 -1
- package/dist/cli/commands/routing/index.d.ts.map +1 -1
- package/dist/cli/commands/routing/index.js +29 -19
- package/dist/cli/commands/routing/index.js.map +1 -1
- package/dist/cli/commands/skills/index.d.ts +4 -0
- package/dist/cli/commands/skills/index.d.ts.map +1 -1
- package/dist/cli/commands/skills/index.js +8 -2
- package/dist/cli/commands/skills/index.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts +2 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +4 -1
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/dao/AccessControlDAO.d.ts +66 -0
- package/dist/core/memory/dao/AccessControlDAO.d.ts.map +1 -0
- package/dist/core/memory/dao/AccessControlDAO.js +140 -0
- package/dist/core/memory/dao/AccessControlDAO.js.map +1 -0
- package/dist/core/memory/dao/BaseDAO.d.ts +34 -0
- package/dist/core/memory/dao/BaseDAO.d.ts.map +1 -0
- package/dist/core/memory/dao/BaseDAO.js +34 -0
- package/dist/core/memory/dao/BaseDAO.js.map +1 -0
- package/dist/core/memory/dao/BlackboardDAO.d.ts +90 -0
- package/dist/core/memory/dao/BlackboardDAO.d.ts.map +1 -0
- package/dist/core/memory/dao/BlackboardDAO.js +223 -0
- package/dist/core/memory/dao/BlackboardDAO.js.map +1 -0
- package/dist/core/memory/dao/EventDAO.d.ts +83 -0
- package/dist/core/memory/dao/EventDAO.d.ts.map +1 -0
- package/dist/core/memory/dao/EventDAO.js +177 -0
- package/dist/core/memory/dao/EventDAO.js.map +1 -0
- package/dist/core/memory/dao/MemoryEntryDAO.d.ts +57 -0
- package/dist/core/memory/dao/MemoryEntryDAO.d.ts.map +1 -0
- package/dist/core/memory/dao/MemoryEntryDAO.js +159 -0
- package/dist/core/memory/dao/MemoryEntryDAO.js.map +1 -0
- package/dist/core/memory/dao/WorkflowDAO.d.ts +85 -0
- package/dist/core/memory/dao/WorkflowDAO.d.ts.map +1 -0
- package/dist/core/memory/dao/WorkflowDAO.js +182 -0
- package/dist/core/memory/dao/WorkflowDAO.js.map +1 -0
- package/dist/core/memory/services/AccessControlService.d.ts +123 -0
- package/dist/core/memory/services/AccessControlService.d.ts.map +1 -0
- package/dist/core/memory/services/AccessControlService.js +249 -0
- package/dist/core/memory/services/AccessControlService.js.map +1 -0
- package/dist/core/memory/services/MemoryStoreService.d.ts +69 -0
- package/dist/core/memory/services/MemoryStoreService.d.ts.map +1 -0
- package/dist/core/memory/services/MemoryStoreService.js +214 -0
- package/dist/core/memory/services/MemoryStoreService.js.map +1 -0
- package/dist/learning/ExperienceReplayBuffer.d.ts +143 -0
- package/dist/learning/ExperienceReplayBuffer.d.ts.map +1 -0
- package/dist/learning/ExperienceReplayBuffer.js +255 -0
- package/dist/learning/ExperienceReplayBuffer.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +50 -1
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +140 -0
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/learning/QLearning.d.ts +154 -0
- package/dist/learning/QLearning.d.ts.map +1 -0
- package/dist/learning/QLearning.js +337 -0
- package/dist/learning/QLearning.js.map +1 -0
- package/dist/learning/index.d.ts +2 -0
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +2 -0
- package/dist/learning/index.js.map +1 -1
- package/dist/mcp/handlers/base-handler.d.ts.map +1 -1
- package/dist/mcp/handlers/base-handler.js +4 -1
- package/dist/mcp/handlers/base-handler.js.map +1 -1
- package/dist/mcp/handlers/prediction/regression-risk-analyze.d.ts +11 -1
- package/dist/mcp/handlers/prediction/regression-risk-analyze.d.ts.map +1 -1
- package/dist/mcp/handlers/prediction/regression-risk-analyze.js +63 -8
- package/dist/mcp/handlers/prediction/regression-risk-analyze.js.map +1 -1
- package/dist/mcp/handlers/quality-analyze.d.ts +7 -1
- package/dist/mcp/handlers/quality-analyze.d.ts.map +1 -1
- package/dist/mcp/handlers/quality-analyze.js +18 -1
- package/dist/mcp/handlers/quality-analyze.js.map +1 -1
- package/dist/mcp/handlers/test-generate.d.ts.map +1 -1
- package/dist/mcp/handlers/test-generate.js +24 -8
- package/dist/mcp/handlers/test-generate.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts +5 -0
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +19 -0
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts +11 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts.map +1 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js +12 -0
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js.map +1 -1
- package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts +10 -1
- package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts.map +1 -1
- package/dist/mcp/streaming/TestExecuteStreamHandler.js +11 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.js.map +1 -1
- package/dist/reasoning/QEReasoningBank.d.ts +89 -2
- package/dist/reasoning/QEReasoningBank.d.ts.map +1 -1
- package/dist/reasoning/QEReasoningBank.js +396 -10
- package/dist/reasoning/QEReasoningBank.js.map +1 -1
- package/dist/utils/__mocks__/Database.d.ts +64 -0
- package/dist/utils/__mocks__/Database.d.ts.map +1 -0
- package/dist/utils/__mocks__/Database.js +134 -0
- package/dist/utils/__mocks__/Database.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentMemoryService - Manages agent memory operations with automatic namespacing
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* - Namespaced memory operations (agent-specific and shared)
|
|
6
|
+
* - Task result storage and retrieval
|
|
7
|
+
* - State persistence and restoration
|
|
8
|
+
* - Memory key generation and validation
|
|
9
|
+
*
|
|
10
|
+
* Part of BaseAgent refactoring (Phase 3)
|
|
11
|
+
* Reduces BaseAgent complexity by ~150 LOC
|
|
12
|
+
*/
|
|
13
|
+
import { MemoryStore, AgentId, QEAgentType as AgentType } from '../../types';
|
|
14
|
+
export interface AgentMemoryServiceConfig {
|
|
15
|
+
agentId: AgentId;
|
|
16
|
+
memoryStore: MemoryStore;
|
|
17
|
+
}
|
|
18
|
+
export interface TaskResultData {
|
|
19
|
+
result: any;
|
|
20
|
+
timestamp: Date;
|
|
21
|
+
agentId: string;
|
|
22
|
+
}
|
|
23
|
+
export interface AgentStateData {
|
|
24
|
+
performanceMetrics?: any;
|
|
25
|
+
timestamp: Date;
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
}
|
|
28
|
+
export interface ErrorRecord {
|
|
29
|
+
error: {
|
|
30
|
+
message: string;
|
|
31
|
+
stack?: string;
|
|
32
|
+
name: string;
|
|
33
|
+
};
|
|
34
|
+
assignment: {
|
|
35
|
+
id: string;
|
|
36
|
+
taskType: string;
|
|
37
|
+
};
|
|
38
|
+
timestamp: Date;
|
|
39
|
+
agentId: string;
|
|
40
|
+
}
|
|
41
|
+
export declare class AgentMemoryService {
|
|
42
|
+
private readonly agentId;
|
|
43
|
+
private readonly memoryStore;
|
|
44
|
+
constructor(config: AgentMemoryServiceConfig);
|
|
45
|
+
/**
|
|
46
|
+
* Store data in agent-specific memory namespace
|
|
47
|
+
* @param key Memory key (will be prefixed with agent:agentId:)
|
|
48
|
+
* @param value Value to store
|
|
49
|
+
* @param ttl Optional time-to-live in seconds
|
|
50
|
+
*/
|
|
51
|
+
store(key: string, value: any, ttl?: number): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Retrieve data from agent-specific memory namespace
|
|
54
|
+
* @param key Memory key (will be prefixed with agent:agentId:)
|
|
55
|
+
* @returns Stored value or null if not found
|
|
56
|
+
*/
|
|
57
|
+
retrieve(key: string): Promise<any>;
|
|
58
|
+
/**
|
|
59
|
+
* Check if key exists in agent memory
|
|
60
|
+
* @param key Memory key to check
|
|
61
|
+
*/
|
|
62
|
+
has(key: string): Promise<boolean>;
|
|
63
|
+
/**
|
|
64
|
+
* Delete data from agent memory
|
|
65
|
+
* @param key Memory key to delete
|
|
66
|
+
*/
|
|
67
|
+
delete(key: string): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Store data in shared memory accessible by agents of the same type
|
|
70
|
+
* @param key Memory key (will be prefixed with shared:agentType:)
|
|
71
|
+
* @param value Value to store
|
|
72
|
+
* @param ttl Optional time-to-live in seconds
|
|
73
|
+
*/
|
|
74
|
+
storeShared(key: string, value: any, ttl?: number): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Retrieve data from shared memory of a specific agent type
|
|
77
|
+
* @param agentType Type of agent that stored the data
|
|
78
|
+
* @param key Memory key (will be prefixed with shared:agentType:)
|
|
79
|
+
* @returns Stored value or null if not found
|
|
80
|
+
*/
|
|
81
|
+
retrieveShared(agentType: AgentType, key: string): Promise<any>;
|
|
82
|
+
/**
|
|
83
|
+
* Retrieve shared memory from this agent's type
|
|
84
|
+
* @param key Memory key
|
|
85
|
+
*/
|
|
86
|
+
retrieveOwnShared(key: string): Promise<any>;
|
|
87
|
+
/**
|
|
88
|
+
* Store task execution result
|
|
89
|
+
* @param taskId Task identifier
|
|
90
|
+
* @param result Task result data
|
|
91
|
+
*/
|
|
92
|
+
storeTaskResult(taskId: string, result: any): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Retrieve task execution result
|
|
95
|
+
* @param taskId Task identifier
|
|
96
|
+
* @returns Task result or null if not found
|
|
97
|
+
*/
|
|
98
|
+
retrieveTaskResult(taskId: string): Promise<TaskResultData | null>;
|
|
99
|
+
/**
|
|
100
|
+
* Store task error information
|
|
101
|
+
* @param taskId Task identifier
|
|
102
|
+
* @param assignment Task assignment details
|
|
103
|
+
* @param error Error object
|
|
104
|
+
*/
|
|
105
|
+
storeTaskError(taskId: string, assignment: {
|
|
106
|
+
id: string;
|
|
107
|
+
taskType: string;
|
|
108
|
+
}, error: Error): Promise<void>;
|
|
109
|
+
/**
|
|
110
|
+
* Retrieve task error information
|
|
111
|
+
* @param taskId Task identifier
|
|
112
|
+
* @returns Error record or null if not found
|
|
113
|
+
*/
|
|
114
|
+
retrieveTaskError(taskId: string): Promise<ErrorRecord | null>;
|
|
115
|
+
/**
|
|
116
|
+
* Save agent state to memory
|
|
117
|
+
* @param state State data to persist
|
|
118
|
+
*/
|
|
119
|
+
saveState(state: AgentStateData): Promise<void>;
|
|
120
|
+
/**
|
|
121
|
+
* Restore agent state from memory
|
|
122
|
+
* @returns Stored state or null if not found
|
|
123
|
+
*/
|
|
124
|
+
restoreState(): Promise<AgentStateData | null>;
|
|
125
|
+
/**
|
|
126
|
+
* Clear saved state
|
|
127
|
+
*/
|
|
128
|
+
clearState(): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Report agent status to coordination system
|
|
131
|
+
* @param status Status string
|
|
132
|
+
* @param metrics Optional metrics data
|
|
133
|
+
*/
|
|
134
|
+
reportStatus(status: string, metrics?: any): Promise<void>;
|
|
135
|
+
/**
|
|
136
|
+
* Retrieve status of another agent of the same type
|
|
137
|
+
* @param agentId Agent identifier
|
|
138
|
+
* @returns Status information or null if not found
|
|
139
|
+
*/
|
|
140
|
+
retrieveAgentStatus(agentId: string): Promise<any>;
|
|
141
|
+
/**
|
|
142
|
+
* Build agent-specific namespaced key
|
|
143
|
+
* @param key Original key
|
|
144
|
+
* @returns Namespaced key (agent:agentId:key)
|
|
145
|
+
*/
|
|
146
|
+
private buildAgentKey;
|
|
147
|
+
/**
|
|
148
|
+
* Build shared memory key
|
|
149
|
+
* @param key Original key
|
|
150
|
+
* @returns Shared key (shared:agentType:key)
|
|
151
|
+
*/
|
|
152
|
+
private buildSharedKey;
|
|
153
|
+
/**
|
|
154
|
+
* Validate memory key format
|
|
155
|
+
* @param key Key to validate
|
|
156
|
+
* @throws Error if key is invalid
|
|
157
|
+
*/
|
|
158
|
+
private validateKey;
|
|
159
|
+
/**
|
|
160
|
+
* Get memory usage statistics (if supported by MemoryStore)
|
|
161
|
+
* @returns Statistics object or null if not supported
|
|
162
|
+
*/
|
|
163
|
+
getStatistics(): Promise<{
|
|
164
|
+
totalKeys: number;
|
|
165
|
+
agentKeys: number;
|
|
166
|
+
sharedKeys: number;
|
|
167
|
+
} | null>;
|
|
168
|
+
/**
|
|
169
|
+
* Get agent ID
|
|
170
|
+
*/
|
|
171
|
+
getAgentId(): AgentId;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=AgentMemoryService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentMemoryService.d.ts","sourceRoot":"","sources":["../../../src/agents/memory/AgentMemoryService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AgentMemoryService - Manages agent memory operations with automatic namespacing
|
|
4
|
+
*
|
|
5
|
+
* Responsibilities:
|
|
6
|
+
* - Namespaced memory operations (agent-specific and shared)
|
|
7
|
+
* - Task result storage and retrieval
|
|
8
|
+
* - State persistence and restoration
|
|
9
|
+
* - Memory key generation and validation
|
|
10
|
+
*
|
|
11
|
+
* Part of BaseAgent refactoring (Phase 3)
|
|
12
|
+
* Reduces BaseAgent complexity by ~150 LOC
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.AgentMemoryService = void 0;
|
|
16
|
+
class AgentMemoryService {
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.agentId = config.agentId;
|
|
19
|
+
this.memoryStore = config.memoryStore;
|
|
20
|
+
}
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// Agent-Specific Memory (Namespaced by agent ID)
|
|
23
|
+
// ============================================================================
|
|
24
|
+
/**
|
|
25
|
+
* Store data in agent-specific memory namespace
|
|
26
|
+
* @param key Memory key (will be prefixed with agent:agentId:)
|
|
27
|
+
* @param value Value to store
|
|
28
|
+
* @param ttl Optional time-to-live in seconds
|
|
29
|
+
*/
|
|
30
|
+
async store(key, value, ttl) {
|
|
31
|
+
this.validateKey(key);
|
|
32
|
+
const namespacedKey = this.buildAgentKey(key);
|
|
33
|
+
try {
|
|
34
|
+
await this.memoryStore.store(namespacedKey, value, ttl);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.warn(`[${this.agentId.id}] Failed to store memory at ${namespacedKey}:`, error);
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Retrieve data from agent-specific memory namespace
|
|
43
|
+
* @param key Memory key (will be prefixed with agent:agentId:)
|
|
44
|
+
* @returns Stored value or null if not found
|
|
45
|
+
*/
|
|
46
|
+
async retrieve(key) {
|
|
47
|
+
this.validateKey(key);
|
|
48
|
+
const namespacedKey = this.buildAgentKey(key);
|
|
49
|
+
try {
|
|
50
|
+
return await this.memoryStore.retrieve(namespacedKey);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.warn(`[${this.agentId.id}] Failed to retrieve memory from ${namespacedKey}:`, error);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if key exists in agent memory
|
|
59
|
+
* @param key Memory key to check
|
|
60
|
+
*/
|
|
61
|
+
async has(key) {
|
|
62
|
+
const value = await this.retrieve(key);
|
|
63
|
+
return value !== null && value !== undefined;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Delete data from agent memory
|
|
67
|
+
* @param key Memory key to delete
|
|
68
|
+
*/
|
|
69
|
+
async delete(key) {
|
|
70
|
+
this.validateKey(key);
|
|
71
|
+
const namespacedKey = this.buildAgentKey(key);
|
|
72
|
+
try {
|
|
73
|
+
// MemoryStore interface doesn't have delete, so we store null with TTL=1
|
|
74
|
+
await this.memoryStore.store(namespacedKey, null, 1);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.warn(`[${this.agentId.id}] Failed to delete memory at ${namespacedKey}:`, error);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// ============================================================================
|
|
81
|
+
// Shared Memory (Accessible by other agents)
|
|
82
|
+
// ============================================================================
|
|
83
|
+
/**
|
|
84
|
+
* Store data in shared memory accessible by agents of the same type
|
|
85
|
+
* @param key Memory key (will be prefixed with shared:agentType:)
|
|
86
|
+
* @param value Value to store
|
|
87
|
+
* @param ttl Optional time-to-live in seconds
|
|
88
|
+
*/
|
|
89
|
+
async storeShared(key, value, ttl) {
|
|
90
|
+
this.validateKey(key);
|
|
91
|
+
const sharedKey = this.buildSharedKey(key);
|
|
92
|
+
try {
|
|
93
|
+
await this.memoryStore.store(sharedKey, value, ttl);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
console.warn(`[${this.agentId.id}] Failed to store shared memory at ${sharedKey}:`, error);
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Retrieve data from shared memory of a specific agent type
|
|
102
|
+
* @param agentType Type of agent that stored the data
|
|
103
|
+
* @param key Memory key (will be prefixed with shared:agentType:)
|
|
104
|
+
* @returns Stored value or null if not found
|
|
105
|
+
*/
|
|
106
|
+
async retrieveShared(agentType, key) {
|
|
107
|
+
this.validateKey(key);
|
|
108
|
+
const sharedKey = `shared:${agentType}:${key}`;
|
|
109
|
+
try {
|
|
110
|
+
return await this.memoryStore.retrieve(sharedKey);
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
console.warn(`[${this.agentId.id}] Failed to retrieve shared memory from ${sharedKey}:`, error);
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Retrieve shared memory from this agent's type
|
|
119
|
+
* @param key Memory key
|
|
120
|
+
*/
|
|
121
|
+
async retrieveOwnShared(key) {
|
|
122
|
+
return this.retrieveShared(this.agentId.type, key);
|
|
123
|
+
}
|
|
124
|
+
// ============================================================================
|
|
125
|
+
// Task-Specific Memory
|
|
126
|
+
// ============================================================================
|
|
127
|
+
/**
|
|
128
|
+
* Store task execution result
|
|
129
|
+
* @param taskId Task identifier
|
|
130
|
+
* @param result Task result data
|
|
131
|
+
*/
|
|
132
|
+
async storeTaskResult(taskId, result) {
|
|
133
|
+
const data = {
|
|
134
|
+
result,
|
|
135
|
+
timestamp: new Date(),
|
|
136
|
+
agentId: this.agentId.id
|
|
137
|
+
};
|
|
138
|
+
await this.store(`task:${taskId}:result`, data);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Retrieve task execution result
|
|
142
|
+
* @param taskId Task identifier
|
|
143
|
+
* @returns Task result or null if not found
|
|
144
|
+
*/
|
|
145
|
+
async retrieveTaskResult(taskId) {
|
|
146
|
+
return await this.retrieve(`task:${taskId}:result`);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Store task error information
|
|
150
|
+
* @param taskId Task identifier
|
|
151
|
+
* @param assignment Task assignment details
|
|
152
|
+
* @param error Error object
|
|
153
|
+
*/
|
|
154
|
+
async storeTaskError(taskId, assignment, error) {
|
|
155
|
+
const errorRecord = {
|
|
156
|
+
error: {
|
|
157
|
+
message: error.message,
|
|
158
|
+
stack: error.stack,
|
|
159
|
+
name: error.name
|
|
160
|
+
},
|
|
161
|
+
assignment,
|
|
162
|
+
timestamp: new Date(),
|
|
163
|
+
agentId: this.agentId.id
|
|
164
|
+
};
|
|
165
|
+
await this.store(`error:${taskId}`, errorRecord);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Retrieve task error information
|
|
169
|
+
* @param taskId Task identifier
|
|
170
|
+
* @returns Error record or null if not found
|
|
171
|
+
*/
|
|
172
|
+
async retrieveTaskError(taskId) {
|
|
173
|
+
return await this.retrieve(`error:${taskId}`);
|
|
174
|
+
}
|
|
175
|
+
// ============================================================================
|
|
176
|
+
// State Persistence
|
|
177
|
+
// ============================================================================
|
|
178
|
+
/**
|
|
179
|
+
* Save agent state to memory
|
|
180
|
+
* @param state State data to persist
|
|
181
|
+
*/
|
|
182
|
+
async saveState(state) {
|
|
183
|
+
const stateWithTimestamp = {
|
|
184
|
+
...state,
|
|
185
|
+
timestamp: new Date()
|
|
186
|
+
};
|
|
187
|
+
await this.store('state', stateWithTimestamp);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Restore agent state from memory
|
|
191
|
+
* @returns Stored state or null if not found
|
|
192
|
+
*/
|
|
193
|
+
async restoreState() {
|
|
194
|
+
try {
|
|
195
|
+
const state = await this.retrieve('state');
|
|
196
|
+
if (!state) {
|
|
197
|
+
console.info(`[${this.agentId.id}] No saved state found`);
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
return state;
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
console.warn(`[${this.agentId.id}] Could not restore state:`, error);
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Clear saved state
|
|
209
|
+
*/
|
|
210
|
+
async clearState() {
|
|
211
|
+
await this.delete('state');
|
|
212
|
+
}
|
|
213
|
+
// ============================================================================
|
|
214
|
+
// Status Reporting
|
|
215
|
+
// ============================================================================
|
|
216
|
+
/**
|
|
217
|
+
* Report agent status to coordination system
|
|
218
|
+
* @param status Status string
|
|
219
|
+
* @param metrics Optional metrics data
|
|
220
|
+
*/
|
|
221
|
+
async reportStatus(status, metrics) {
|
|
222
|
+
try {
|
|
223
|
+
await this.storeShared('status', {
|
|
224
|
+
agentId: this.agentId.id,
|
|
225
|
+
status,
|
|
226
|
+
metrics,
|
|
227
|
+
timestamp: new Date()
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
console.warn(`[${this.agentId.id}] Failed to report status:`, error);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Retrieve status of another agent of the same type
|
|
236
|
+
* @param agentId Agent identifier
|
|
237
|
+
* @returns Status information or null if not found
|
|
238
|
+
*/
|
|
239
|
+
async retrieveAgentStatus(agentId) {
|
|
240
|
+
return await this.retrieveOwnShared('status');
|
|
241
|
+
}
|
|
242
|
+
// ============================================================================
|
|
243
|
+
// Helper Methods
|
|
244
|
+
// ============================================================================
|
|
245
|
+
/**
|
|
246
|
+
* Build agent-specific namespaced key
|
|
247
|
+
* @param key Original key
|
|
248
|
+
* @returns Namespaced key (agent:agentId:key)
|
|
249
|
+
*/
|
|
250
|
+
buildAgentKey(key) {
|
|
251
|
+
return `agent:${this.agentId.id}:${key}`;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Build shared memory key
|
|
255
|
+
* @param key Original key
|
|
256
|
+
* @returns Shared key (shared:agentType:key)
|
|
257
|
+
*/
|
|
258
|
+
buildSharedKey(key) {
|
|
259
|
+
return `shared:${this.agentId.type}:${key}`;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Validate memory key format
|
|
263
|
+
* @param key Key to validate
|
|
264
|
+
* @throws Error if key is invalid
|
|
265
|
+
*/
|
|
266
|
+
validateKey(key) {
|
|
267
|
+
if (!key || typeof key !== 'string') {
|
|
268
|
+
throw new Error('Memory key must be a non-empty string');
|
|
269
|
+
}
|
|
270
|
+
if (key.includes('..')) {
|
|
271
|
+
throw new Error('Memory key cannot contain ".." (path traversal)');
|
|
272
|
+
}
|
|
273
|
+
if (key.length > 256) {
|
|
274
|
+
throw new Error('Memory key too long (max 256 characters)');
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// ============================================================================
|
|
278
|
+
// Statistics
|
|
279
|
+
// ============================================================================
|
|
280
|
+
/**
|
|
281
|
+
* Get memory usage statistics (if supported by MemoryStore)
|
|
282
|
+
* @returns Statistics object or null if not supported
|
|
283
|
+
*/
|
|
284
|
+
async getStatistics() {
|
|
285
|
+
// This would require additional methods on MemoryStore interface
|
|
286
|
+
// For now, return null
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Get agent ID
|
|
291
|
+
*/
|
|
292
|
+
getAgentId() {
|
|
293
|
+
return this.agentId;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
exports.AgentMemoryService = AgentMemoryService;
|
|
297
|
+
//# sourceMappingURL=AgentMemoryService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentMemoryService.js","sourceRoot":"","sources":["../../../src/agents/memory/AgentMemoryService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AAMvD,qBAAa,WAAW;WACT,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;mBAiOpC,wBAAwB;mBAuCxB,kBAAkB;mBAsElB,iBAAiB;mBAiSjB,mBAAmB;mBAyFnB,eAAe;IAMpC;;OAEG;mBACkB,kBAAkB;IA+IvC;;OAEG;mBACkB,cAAc;IAiBnC;;OAEG;mBACkB,oBAAoB;IAoFzC;;OAEG;mBACkB,iBAAiB;mBAMjB,gBAAgB;IAyBrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;mBA4BR,kBAAkB;IAkDvC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA0BnC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAWnC,OAAO,CAAC,MAAM,CAAC,0BAA0B;mBAwBpB,0BAA0B;mBAoC1B,kBAAkB;mBAclB,sBAAsB;mBAoDtB,cAAc;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AAMvD,qBAAa,WAAW;WACT,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;mBAiOpC,wBAAwB;mBAuCxB,kBAAkB;mBAsElB,iBAAiB;mBAiSjB,mBAAmB;mBAyFnB,eAAe;IAMpC;;OAEG;mBACkB,kBAAkB;IA+IvC;;OAEG;mBACkB,cAAc;IAiBnC;;OAEG;mBACkB,oBAAoB;IAoFzC;;OAEG;mBACkB,iBAAiB;mBAMjB,gBAAgB;IAyBrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;mBA4BR,kBAAkB;IAkDvC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA0BnC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAWnC,OAAO,CAAC,MAAM,CAAC,0BAA0B;mBAwBpB,0BAA0B;mBAoC1B,kBAAkB;mBAclB,sBAAsB;mBAoDtB,cAAc;IAmgBnC;;OAEG;mBACkB,yBAAyB;IAoC9C;;OAEG;mBACkB,wBAAwB;IAsB7C;;OAEG;mBACkB,wBAAwB;IAqC7C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA8GnC;;OAEG;mBACkB,yBAAyB;IA2C9C;;OAEG;mBACkB,yBAAyB;IA6F9C;;OAEG;mBACkB,2BAA2B;IAoGhD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAwB7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;CAoBrC"}
|
|
@@ -185,7 +185,7 @@ class InitCommand {
|
|
|
185
185
|
}
|
|
186
186
|
spinner.text = 'Creating CLAUDE.md documentation...';
|
|
187
187
|
// Create or update CLAUDE.md with agent documentation
|
|
188
|
-
await this.createClaudeMd(fleetConfig);
|
|
188
|
+
await this.createClaudeMd(fleetConfig, options.yes);
|
|
189
189
|
// Initialize Claude Flow coordination
|
|
190
190
|
await this.initializeCoordination(fleetConfig);
|
|
191
191
|
// Phase 2: Initialize memory database FIRST (required for agents)
|
|
@@ -1173,16 +1173,42 @@ echo "[AQE] Post-execution coordination complete"
|
|
|
1173
1173
|
await fs.ensureDir('.agentic-qe/logs');
|
|
1174
1174
|
await fs.ensureDir('.agentic-qe/state/coordination');
|
|
1175
1175
|
}
|
|
1176
|
-
static async createClaudeMd(config) {
|
|
1176
|
+
static async createClaudeMd(config, isYesMode = false) {
|
|
1177
1177
|
const claudeMdPath = 'CLAUDE.md';
|
|
1178
1178
|
const agentCount = await this.countAgentFiles('.claude/agents');
|
|
1179
1179
|
// Check if CLAUDE.md exists
|
|
1180
1180
|
const exists = await fs.pathExists(claudeMdPath);
|
|
1181
|
+
let existingContent = '';
|
|
1182
|
+
let appendPosition = 'append'; // default for --yes mode (v1.3.7 fix)
|
|
1181
1183
|
if (exists) {
|
|
1182
1184
|
// Backup existing CLAUDE.md
|
|
1183
1185
|
const backupPath = 'CLAUDE.md.backup';
|
|
1184
1186
|
await fs.copy(claudeMdPath, backupPath);
|
|
1185
1187
|
console.log(chalk_1.default.yellow(` ℹ️ Existing CLAUDE.md backed up to ${backupPath}`));
|
|
1188
|
+
// Read existing content
|
|
1189
|
+
existingContent = await fs.readFile(claudeMdPath, 'utf8');
|
|
1190
|
+
// In interactive mode, ask where to add AQE instructions (v1.3.7 fix)
|
|
1191
|
+
if (!isYesMode) {
|
|
1192
|
+
const { position } = await inquirer_1.default.prompt([
|
|
1193
|
+
{
|
|
1194
|
+
type: 'list',
|
|
1195
|
+
name: 'position',
|
|
1196
|
+
message: 'Existing CLAUDE.md detected. Where should we add AQE instructions?',
|
|
1197
|
+
choices: [
|
|
1198
|
+
{
|
|
1199
|
+
name: 'At the end (append) - Recommended',
|
|
1200
|
+
value: 'append',
|
|
1201
|
+
},
|
|
1202
|
+
{
|
|
1203
|
+
name: 'At the beginning (prepend)',
|
|
1204
|
+
value: 'prepend',
|
|
1205
|
+
},
|
|
1206
|
+
],
|
|
1207
|
+
default: 'append',
|
|
1208
|
+
},
|
|
1209
|
+
]);
|
|
1210
|
+
appendPosition = position;
|
|
1211
|
+
}
|
|
1186
1212
|
}
|
|
1187
1213
|
const claudeMdContent = `# Claude Code Configuration - Agentic QE Fleet
|
|
1188
1214
|
|
|
@@ -1634,7 +1660,23 @@ tail -f .agentic-qe/logs/fleet.log
|
|
|
1634
1660
|
**Initialization Date**: ${new Date().toISOString()}
|
|
1635
1661
|
**Fleet Topology**: ${config.topology}
|
|
1636
1662
|
`;
|
|
1637
|
-
|
|
1663
|
+
// Write CLAUDE.md based on append strategy (v1.3.7 fix)
|
|
1664
|
+
let finalContent;
|
|
1665
|
+
if (exists && existingContent) {
|
|
1666
|
+
const separator = '\n\n---\n\n';
|
|
1667
|
+
if (appendPosition === 'append') {
|
|
1668
|
+
finalContent = existingContent + separator + claudeMdContent;
|
|
1669
|
+
console.log(chalk_1.default.green(` ✓ AQE instructions appended to existing CLAUDE.md`));
|
|
1670
|
+
}
|
|
1671
|
+
else {
|
|
1672
|
+
finalContent = claudeMdContent + separator + existingContent;
|
|
1673
|
+
console.log(chalk_1.default.green(` ✓ AQE instructions prepended to existing CLAUDE.md`));
|
|
1674
|
+
}
|
|
1675
|
+
}
|
|
1676
|
+
else {
|
|
1677
|
+
finalContent = claudeMdContent;
|
|
1678
|
+
}
|
|
1679
|
+
await fs.writeFile(claudeMdPath, finalContent);
|
|
1638
1680
|
}
|
|
1639
1681
|
// ============================================================================
|
|
1640
1682
|
// Phase 2 Initialization Methods (v1.1.0)
|