agentic-qe 1.7.0 → 1.8.1
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/skills/sherlock-review/SKILL.md +786 -0
- package/CHANGELOG.md +625 -0
- package/README.md +42 -55
- package/dist/agents/BaseAgent.d.ts +10 -10
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +96 -78
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +2 -2
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/LearningAgent.d.ts +2 -2
- package/dist/agents/LearningAgent.d.ts.map +1 -1
- package/dist/agents/LearningAgent.js +4 -4
- package/dist/agents/LearningAgent.js.map +1 -1
- package/dist/agents/TestExecutorAgent.d.ts +41 -2
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +314 -64
- package/dist/agents/TestExecutorAgent.js.map +1 -1
- package/dist/agents/examples/batchAnalyze.d.ts +252 -0
- package/dist/agents/examples/batchAnalyze.d.ts.map +1 -0
- package/dist/agents/examples/batchAnalyze.js +259 -0
- package/dist/agents/examples/batchAnalyze.js.map +1 -0
- package/dist/agents/examples/batchGenerate.d.ts +153 -0
- package/dist/agents/examples/batchGenerate.d.ts.map +1 -0
- package/dist/agents/examples/batchGenerate.js +166 -0
- package/dist/agents/examples/batchGenerate.js.map +1 -0
- package/dist/agents/generateWithPII.d.ts +128 -0
- package/dist/agents/generateWithPII.d.ts.map +1 -0
- package/dist/agents/generateWithPII.js +175 -0
- package/dist/agents/generateWithPII.js.map +1 -0
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts +1 -6
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.js +0 -7
- package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
- package/dist/cli/commands/init.d.ts +6 -3
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +51 -46
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts +4 -0
- package/dist/cli/commands/learn/index.d.ts.map +1 -1
- package/dist/cli/commands/learn/index.js +57 -0
- package/dist/cli/commands/learn/index.js.map +1 -1
- package/dist/cli/index.js +14 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/memory/AdapterConfig.d.ts +108 -0
- package/dist/core/memory/AdapterConfig.d.ts.map +1 -0
- package/dist/core/memory/AdapterConfig.js +189 -0
- package/dist/core/memory/AdapterConfig.js.map +1 -0
- package/dist/core/memory/AdapterFactory.d.ts +72 -0
- package/dist/core/memory/AdapterFactory.d.ts.map +1 -0
- package/dist/core/memory/AdapterFactory.js +152 -0
- package/dist/core/memory/AdapterFactory.js.map +1 -0
- package/dist/core/memory/AgentDBManager.d.ts +28 -5
- package/dist/core/memory/AgentDBManager.d.ts.map +1 -1
- package/dist/core/memory/AgentDBManager.js +99 -73
- package/dist/core/memory/AgentDBManager.js.map +1 -1
- package/dist/core/memory/PatternCache.d.ts +105 -0
- package/dist/core/memory/PatternCache.d.ts.map +1 -0
- package/dist/core/memory/PatternCache.js +183 -0
- package/dist/core/memory/PatternCache.js.map +1 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts +14 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.js +153 -16
- package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
- package/dist/core/memory/ReasoningBankAdapter.d.ts +4 -0
- package/dist/core/memory/ReasoningBankAdapter.d.ts.map +1 -1
- package/dist/core/memory/ReasoningBankAdapter.js +20 -0
- package/dist/core/memory/ReasoningBankAdapter.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts +8 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +33 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/index.d.ts +6 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +12 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/neural/NeuralTrainer.d.ts +2 -6
- package/dist/core/neural/NeuralTrainer.d.ts.map +1 -1
- package/dist/core/neural/NeuralTrainer.js +7 -25
- package/dist/core/neural/NeuralTrainer.js.map +1 -1
- package/dist/learning/ImprovementLoop.js +2 -2
- package/dist/learning/ImprovementLoop.js.map +1 -1
- package/dist/learning/LearningEngine.d.ts +11 -7
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +156 -72
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts +83 -0
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js +130 -0
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts +58 -0
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.js +84 -0
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/index.d.ts +47 -0
- package/dist/mcp/handlers/filtered/index.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/index.js +63 -0
- package/dist/mcp/handlers/filtered/index.js.map +1 -0
- package/dist/mcp/handlers/filtered/performance-tester-filtered.d.ts +57 -0
- package/dist/mcp/handlers/filtered/performance-tester-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/performance-tester-filtered.js +83 -0
- package/dist/mcp/handlers/filtered/performance-tester-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/quality-assessor-filtered.d.ts +57 -0
- package/dist/mcp/handlers/filtered/quality-assessor-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/quality-assessor-filtered.js +93 -0
- package/dist/mcp/handlers/filtered/quality-assessor-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts +54 -0
- package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/security-scanner-filtered.js +73 -0
- package/dist/mcp/handlers/filtered/security-scanner-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/test-executor-filtered.d.ts +61 -0
- package/dist/mcp/handlers/filtered/test-executor-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/test-executor-filtered.js +117 -0
- package/dist/mcp/handlers/filtered/test-executor-filtered.js.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js +2 -2
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
- package/dist/scripts/backup-helper.d.ts +64 -0
- package/dist/scripts/backup-helper.d.ts.map +1 -0
- package/dist/scripts/backup-helper.js +251 -0
- package/dist/scripts/backup-helper.js.map +1 -0
- package/dist/scripts/migrate-with-backup.d.ts +15 -0
- package/dist/scripts/migrate-with-backup.d.ts.map +1 -0
- package/dist/scripts/migrate-with-backup.js +194 -0
- package/dist/scripts/migrate-with-backup.js.map +1 -0
- package/dist/security/pii-tokenization.d.ts +216 -0
- package/dist/security/pii-tokenization.d.ts.map +1 -0
- package/dist/security/pii-tokenization.js +325 -0
- package/dist/security/pii-tokenization.js.map +1 -0
- package/dist/utils/EmbeddingGenerator.d.ts +35 -0
- package/dist/utils/EmbeddingGenerator.d.ts.map +1 -0
- package/dist/utils/EmbeddingGenerator.js +72 -0
- package/dist/utils/EmbeddingGenerator.js.map +1 -0
- package/dist/utils/batch-operations.d.ts +215 -0
- package/dist/utils/batch-operations.d.ts.map +1 -0
- package/dist/utils/batch-operations.js +266 -0
- package/dist/utils/batch-operations.js.map +1 -0
- package/dist/utils/filtering.d.ts +180 -0
- package/dist/utils/filtering.d.ts.map +1 -0
- package/dist/utils/filtering.js +288 -0
- package/dist/utils/filtering.js.map +1 -0
- package/dist/utils/prompt-cache-examples.d.ts +111 -0
- package/dist/utils/prompt-cache-examples.d.ts.map +1 -0
- package/dist/utils/prompt-cache-examples.js +416 -0
- package/dist/utils/prompt-cache-examples.js.map +1 -0
- package/dist/utils/prompt-cache.d.ts +305 -0
- package/dist/utils/prompt-cache.d.ts.map +1 -0
- package/dist/utils/prompt-cache.js +448 -0
- package/dist/utils/prompt-cache.js.map +1 -0
- package/package.json +7 -16
- package/dist/mcp/tools/deprecated.d.ts +0 -1390
- package/dist/mcp/tools/deprecated.d.ts.map +0 -1
- package/dist/mcp/tools/deprecated.js +0 -859
- package/dist/mcp/tools/deprecated.js.map +0 -1
package/README.md
CHANGED
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
<img alt="NPM Downloads" src="https://img.shields.io/npm/dw/agentic-qe">
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
**Version 1.
|
|
12
|
+
**Version 1.8.1** (Safety & Test Quality) | [Changelog](CHANGELOG.md) | [Issues](https://github.com/proffesor-for-testing/agentic-qe/issues) | [Discussions](https://github.com/proffesor-for-testing/agentic-qe/discussions)
|
|
13
13
|
|
|
14
|
-
> Enterprise-grade test automation with AI learning, comprehensive skills library (
|
|
14
|
+
> Enterprise-grade test automation with AI learning, comprehensive skills library (38 QE skills), and intelligent model routing.
|
|
15
15
|
|
|
16
|
-
🧠 **Q-Learning System** | 📚 **
|
|
16
|
+
🧠 **Q-Learning System** | 📚 **38 World-Class QE Skills** | 🎯 **Advanced Flaky Detection** | 💰 **Multi-Model Router** | 🔧 **32 Domain-Specific Tools**
|
|
17
17
|
|
|
18
18
|
</div>
|
|
19
19
|
|
|
@@ -60,7 +60,7 @@ claude "Use qe-flaky-test-hunter to analyze the last 100 test runs and identify
|
|
|
60
60
|
- ✅ ML Flaky Detection (100% accuracy)
|
|
61
61
|
- ✅ 18 Specialized agent definitions (including qe-code-complexity)
|
|
62
62
|
- ✅ 8 TDD subagent definitions (RED/GREEN/REFACTOR phases)
|
|
63
|
-
- ✅
|
|
63
|
+
- ✅ 38 World-class QE skills library
|
|
64
64
|
- ✅ 8 AQE slash commands
|
|
65
65
|
- ✅ Configuration directory
|
|
66
66
|
|
|
@@ -96,7 +96,7 @@ claude "Use qe-flaky-test-hunter to analyze the last 100 test runs and identify
|
|
|
96
96
|
- **Performance Testing**: k6, JMeter, Gatling integration
|
|
97
97
|
- **Real-Time Streaming**: Live progress updates for all operations
|
|
98
98
|
|
|
99
|
-
### 🎓
|
|
99
|
+
### 🎓 38 QE Skills Library (v1.3.0)
|
|
100
100
|
**95%+ coverage of modern QE practices**
|
|
101
101
|
|
|
102
102
|
<details>
|
|
@@ -114,8 +114,8 @@ claude "Use qe-flaky-test-hunter to analyze the last 100 test runs and identify
|
|
|
114
114
|
- **Specialized Testing (9)**: accessibility-testing, mobile-testing, database-testing, contract-testing, chaos-engineering-resilience, compatibility-testing, localization-testing, compliance-testing, visual-testing-advanced
|
|
115
115
|
- **Testing Infrastructure (2)**: test-environment-management, test-reporting-analytics
|
|
116
116
|
|
|
117
|
-
**Phase 3: Advanced Quality Engineering Skills (
|
|
118
|
-
- **Strategic Testing Methodologies (
|
|
117
|
+
**Phase 3: Advanced Quality Engineering Skills (4 skills)**
|
|
118
|
+
- **Strategic Testing Methodologies (4)**: six-thinking-hats, brutal-honesty-review, sherlock-review, cicd-pipeline-qe-orchestrator
|
|
119
119
|
|
|
120
120
|
</details>
|
|
121
121
|
|
|
@@ -539,56 +539,43 @@ The test generator automatically delegates to subagents for a complete RED-GREEN
|
|
|
539
539
|
|
|
540
540
|
---
|
|
541
541
|
|
|
542
|
-
## 📝 What's New in v1.
|
|
543
|
-
|
|
544
|
-
🚀 **Priority 1: Hardening Release** (2025-11-14)
|
|
545
|
-
|
|
546
|
-
- **Quality Improvements** - All critical ship-blockers eliminated
|
|
547
|
-
- ✅ TODO Elimination: 80% reduction (40+ → 8, remaining in whitelisted template generators)
|
|
548
|
-
- ✅ Async I/O: 100% conversion (0 blocking operations, excluding Logger.ts)
|
|
549
|
-
- ✅ Race Conditions: 91% reduction (109 → 10 setTimeout instances)
|
|
550
|
-
- ✅ Event-driven BaseAgent architecture with proper cleanup
|
|
551
|
-
- **AgentDB Learn CLI** - Fully implemented with real database integration
|
|
552
|
-
- 7 commands (status, train, stats, export, import, optimize, clear)
|
|
553
|
-
- Real-time learning statistics and pattern management
|
|
554
|
-
- Proper service initialization (no stub code)
|
|
555
|
-
- **Pre-commit Quality Gates** - Prevents regression
|
|
556
|
-
- Automatic TODO detection and blocking
|
|
557
|
-
- Whitelisted template generators for flexibility
|
|
558
|
-
- **Comprehensive Validation** - Production-ready verification
|
|
559
|
-
- 51/51 core BaseAgent tests passing
|
|
560
|
-
- 28 user-perspective validation scenarios
|
|
561
|
-
- Fresh installation verified with all features working
|
|
562
|
-
- **Build Quality** - Zero errors, production-grade
|
|
563
|
-
- 0 TypeScript errors (was 17)
|
|
564
|
-
- All 19 agents + 37 skills + 8 commands functional
|
|
565
|
-
|
|
566
|
-
**Upgrade from v1.6.x**: Fully backward-compatible. Run `npm install agentic-qe@1.7.0` and `aqe init`.
|
|
542
|
+
## 📝 What's New in v1.8.1
|
|
567
543
|
|
|
568
|
-
|
|
544
|
+
🛡️ **Safety & Test Quality Patch Release** (2025-11-18)
|
|
545
|
+
|
|
546
|
+
This patch release addresses critical runtime guards, error handling, and test isolation issues identified in brutal-honesty code reviews.
|
|
547
|
+
|
|
548
|
+
### Key Improvements
|
|
549
|
+
- **P0 - Simulation Mode Runtime Guards** - Prevents accidental test simulation in production
|
|
550
|
+
- ✅ Requires `AQE_ALLOW_SIMULATION=true` environment variable
|
|
551
|
+
- ✅ Explicit error if simulation mode is used without env flag
|
|
552
|
+
- ✅ Clear warnings when using simulated execution
|
|
553
|
+
|
|
554
|
+
- **P2 - Explicit Error Handling** - Database query failures now fail loudly with actionable diagnostics
|
|
555
|
+
- ✅ Replaced silent fallbacks with explicit validation
|
|
556
|
+
- ✅ Detailed error messages for faster debugging
|
|
557
|
+
- ✅ Schema mismatch detection
|
|
558
|
+
|
|
559
|
+
- **P1 - Test Isolation** - UUID-based database paths prevent race conditions
|
|
560
|
+
- ✅ Replaced `Date.now()` with `randomUUID()` for collision-free paths
|
|
561
|
+
- ✅ OS temp directory usage for proper cleanup
|
|
562
|
+
- ✅ Parallel test execution without conflicts
|
|
563
|
+
|
|
564
|
+
### Files Changed
|
|
565
|
+
- **Source**: `TestExecutorAgent.ts` (+13 lines), `RealAgentDBAdapter.ts` (+17 lines)
|
|
566
|
+
- **Tests**: 2 integration test files (+10 lines for UUID imports)
|
|
567
|
+
- **Documentation**: Complete release notes, code review, and changelog updates
|
|
568
|
+
|
|
569
|
+
### Impact
|
|
570
|
+
✅ **Build Status**: Passing (0 errors)
|
|
571
|
+
✅ **Runtime Safety**: Improved (guards added)
|
|
572
|
+
✅ **Error Handling**: Improved (explicit errors)
|
|
573
|
+
✅ **Test Isolation**: Improved (UUID-based)
|
|
574
|
+
❌ **Breaking Changes**: None
|
|
575
|
+
|
|
576
|
+
**Upgrade from v1.8.0**: Fully backward-compatible. Run `npm install agentic-qe@1.8.1` and `aqe init`.
|
|
569
577
|
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
🎯 **Phase 3: Domain-Specific Tool Refactoring** (2025-11-08)
|
|
573
|
-
|
|
574
|
-
- **32 Domain-Specific MCP Tools** organized by QE function for better discoverability
|
|
575
|
-
- 6 QE domains: Coverage, Flaky Detection, Performance, Visual, Security, Test Generation
|
|
576
|
-
- Improved type safety with strict TypeScript (no `any` types)
|
|
577
|
-
- Enhanced tool organization based on domain intent
|
|
578
|
-
- **Migration Support**: Comprehensive migration guide with backward compatibility
|
|
579
|
-
- Deprecated tools remain available until v3.0.0 (Feb 2026)
|
|
580
|
-
- Clear deprecation warnings with migration paths
|
|
581
|
-
- Zero breaking changes in v1.5.0
|
|
582
|
-
- **Tool Catalog**: Complete documentation of all 32 domain-specific tools
|
|
583
|
-
- Function signatures and parameter documentation
|
|
584
|
-
- Usage examples for each tool
|
|
585
|
-
- Domain-specific best practices
|
|
586
|
-
- **Agent Integration**: Updated 7 agent code execution examples with real imports
|
|
587
|
-
- Direct tool imports instead of generic MCP calls
|
|
588
|
-
- Type-safe parameter handling
|
|
589
|
-
- Better error messages
|
|
590
|
-
|
|
591
|
-
**Upgrade Path**: See [Migration Guide](docs/migration/phase3-tools.md) for step-by-step instructions.
|
|
578
|
+
**Previous Releases**: See [docs/releases/](docs/releases/) for detailed release notes.
|
|
592
579
|
|
|
593
580
|
[📖 View Full Changelog](CHANGELOG.md) | [🐛 Report Issues](https://github.com/proffesor-for-testing/agentic-qe/issues)
|
|
594
581
|
|
|
@@ -50,12 +50,14 @@ export declare abstract class BaseAgent extends EventEmitter {
|
|
|
50
50
|
lastActivity: Date;
|
|
51
51
|
};
|
|
52
52
|
private taskStartTime?;
|
|
53
|
+
private initializationMutex?;
|
|
53
54
|
protected readonly lifecycleManager: AgentLifecycleManager;
|
|
54
55
|
protected readonly coordinator: AgentCoordinator;
|
|
55
56
|
protected readonly memoryService: AgentMemoryService;
|
|
56
57
|
constructor(config: BaseAgentConfig);
|
|
57
58
|
/**
|
|
58
59
|
* Initialize the agent - must be called after construction
|
|
60
|
+
* Thread-safe: Multiple concurrent calls will wait for the first to complete
|
|
59
61
|
*/
|
|
60
62
|
initialize(): Promise<void>;
|
|
61
63
|
/**
|
|
@@ -130,16 +132,16 @@ export declare abstract class BaseAgent extends EventEmitter {
|
|
|
130
132
|
/**
|
|
131
133
|
* Get learned patterns from Q-learning
|
|
132
134
|
*/
|
|
133
|
-
getLearnedPatterns(): import("../learning/types").LearnedPattern[]
|
|
135
|
+
getLearnedPatterns(): Promise<import("../learning/types").LearnedPattern[]>;
|
|
134
136
|
/**
|
|
135
137
|
* Get learning engine status
|
|
136
138
|
*/
|
|
137
|
-
getLearningStatus(): {
|
|
139
|
+
getLearningStatus(): Promise<{
|
|
138
140
|
enabled: boolean;
|
|
139
141
|
totalExperiences: number;
|
|
140
142
|
explorationRate: number;
|
|
141
143
|
patterns: number;
|
|
142
|
-
} | null
|
|
144
|
+
} | null>;
|
|
143
145
|
/**
|
|
144
146
|
* Initialize AgentDB integration for distributed coordination
|
|
145
147
|
* Replaces custom QUIC and Neural code with production-ready AgentDB
|
|
@@ -162,6 +164,11 @@ export declare abstract class BaseAgent extends EventEmitter {
|
|
|
162
164
|
* Check if AgentDB integration is available
|
|
163
165
|
*/
|
|
164
166
|
hasAgentDB(): boolean;
|
|
167
|
+
/**
|
|
168
|
+
* Check if AgentDB is using a real adapter (vs mock)
|
|
169
|
+
* @returns true if using real AgentDB, false if mock
|
|
170
|
+
*/
|
|
171
|
+
private isRealAgentDB;
|
|
165
172
|
/**
|
|
166
173
|
* Start the agent (idempotent - safe to call multiple times)
|
|
167
174
|
*/
|
|
@@ -253,13 +260,6 @@ export declare abstract class BaseAgent extends EventEmitter {
|
|
|
253
260
|
private generateAgentId;
|
|
254
261
|
private generateEventId;
|
|
255
262
|
private generateMessageId;
|
|
256
|
-
/**
|
|
257
|
-
* Simple hash-based embedding generation
|
|
258
|
-
* In production, replace with actual embedding model (e.g., OpenAI, Cohere, local BERT)
|
|
259
|
-
* @param text Text to embed
|
|
260
|
-
* @returns 384-dimensional embedding vector
|
|
261
|
-
*/
|
|
262
|
-
private simpleHashEmbedding;
|
|
263
263
|
}
|
|
264
264
|
export interface AgentFactory {
|
|
265
265
|
createAgent(type: AgentType, config: BaseAgentConfig): Promise<BaseAgent>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAgent.d.ts","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"BaseAgent.d.ts","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/BaseAgent.js
CHANGED
|
@@ -8,6 +8,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
8
8
|
exports.BaseAgentFactory = exports.BaseAgent = void 0;
|
|
9
9
|
const events_1 = require("events");
|
|
10
10
|
const SecureRandom_js_1 = require("../utils/SecureRandom.js");
|
|
11
|
+
const EmbeddingGenerator_js_1 = require("../utils/EmbeddingGenerator.js");
|
|
11
12
|
const types_1 = require("../types");
|
|
12
13
|
const hooks_1 = require("../core/hooks");
|
|
13
14
|
const MemoryStoreAdapter_1 = require("../adapters/MemoryStoreAdapter");
|
|
@@ -44,7 +45,8 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
44
45
|
}
|
|
45
46
|
else if (config.agentDBPath || config.enableQUICSync) {
|
|
46
47
|
this.agentDBConfig = {
|
|
47
|
-
|
|
48
|
+
// Updated default path to use .agentic-qe directory for consolidation
|
|
49
|
+
dbPath: config.agentDBPath || '.agentic-qe/agentdb.db',
|
|
48
50
|
enableQUICSync: config.enableQUICSync || false,
|
|
49
51
|
syncPort: config.syncPort || 4433,
|
|
50
52
|
syncPeers: config.syncPeers || [],
|
|
@@ -82,19 +84,31 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
82
84
|
// ============================================================================
|
|
83
85
|
/**
|
|
84
86
|
* Initialize the agent - must be called after construction
|
|
87
|
+
* Thread-safe: Multiple concurrent calls will wait for the first to complete
|
|
85
88
|
*/
|
|
86
89
|
async initialize() {
|
|
90
|
+
// Thread-safety: If initialization is in progress, wait for it
|
|
91
|
+
if (this.initializationMutex) {
|
|
92
|
+
console.info(`[${this.agentId.id}] Initialization already in progress, waiting for completion`);
|
|
93
|
+
await this.initializationMutex;
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Guard: Skip if already initialized (ACTIVE or IDLE)
|
|
97
|
+
const currentStatus = this.lifecycleManager.getStatus();
|
|
98
|
+
if (currentStatus === types_1.AgentStatus.ACTIVE || currentStatus === types_1.AgentStatus.IDLE) {
|
|
99
|
+
console.warn(`[${this.agentId.id}] Agent already initialized (status: ${currentStatus}), skipping`);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
// Create initialization mutex - lock acquired
|
|
103
|
+
let resolveMutex;
|
|
104
|
+
this.initializationMutex = new Promise((resolve) => {
|
|
105
|
+
resolveMutex = resolve;
|
|
106
|
+
});
|
|
87
107
|
try {
|
|
88
|
-
// Guard: Skip if already initialized (ACTIVE or IDLE)
|
|
89
|
-
const currentStatus = this.lifecycleManager.getStatus();
|
|
90
|
-
if (currentStatus === types_1.AgentStatus.ACTIVE || currentStatus === types_1.AgentStatus.IDLE) {
|
|
91
|
-
console.warn(`[${this.agentId.id}] Agent already initialized (status: ${currentStatus}), skipping`);
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
108
|
// Guard: Reset from ERROR state before initializing
|
|
95
109
|
if (currentStatus === types_1.AgentStatus.ERROR) {
|
|
96
110
|
console.info(`[${this.agentId.id}] Resetting agent from ERROR state before initialization`);
|
|
97
|
-
this.lifecycleManager.
|
|
111
|
+
this.lifecycleManager.reset(false);
|
|
98
112
|
}
|
|
99
113
|
// Delegate lifecycle initialization to lifecycleManager
|
|
100
114
|
await this.lifecycleManager.initialize({
|
|
@@ -142,6 +156,11 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
142
156
|
this.coordinator.emitEvent('agent.error', { agentId: this.agentId, error });
|
|
143
157
|
throw error;
|
|
144
158
|
}
|
|
159
|
+
finally {
|
|
160
|
+
// Release mutex lock - allow future initializations
|
|
161
|
+
resolveMutex();
|
|
162
|
+
this.initializationMutex = undefined;
|
|
163
|
+
}
|
|
145
164
|
}
|
|
146
165
|
/**
|
|
147
166
|
* Execute a task assignment with integrated verification hooks
|
|
@@ -192,35 +211,38 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
192
211
|
*/
|
|
193
212
|
async terminate() {
|
|
194
213
|
try {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
214
|
+
// Use lifecycle manager's terminate method instead of manual status setting
|
|
215
|
+
await this.lifecycleManager.terminate({
|
|
216
|
+
onPreTermination: async () => {
|
|
217
|
+
await this.executeHook('pre-termination');
|
|
218
|
+
// Flush learning data before termination
|
|
219
|
+
if (this.learningEngine && this.learningEngine.isEnabled()) {
|
|
220
|
+
// LearningEngine persists data via SwarmMemoryManager (which uses AgentDB)
|
|
221
|
+
// No explicit flush needed - memoryStore handles persistence automatically
|
|
222
|
+
console.info(`[${this.agentId.id}] Learning data persisted via memoryStore (SwarmMemoryManager -> AgentDB)`);
|
|
223
|
+
}
|
|
224
|
+
// Close AgentDB if enabled
|
|
225
|
+
if (this.agentDB) {
|
|
226
|
+
await this.agentDB.close();
|
|
227
|
+
this.agentDB = undefined;
|
|
228
|
+
}
|
|
229
|
+
// Save current state
|
|
230
|
+
await this.saveState();
|
|
231
|
+
// Clean up agent-specific resources
|
|
232
|
+
await this.cleanup();
|
|
233
|
+
// Remove all event handlers from EventBus using coordinator
|
|
234
|
+
this.coordinator.clearAllHandlers();
|
|
235
|
+
},
|
|
236
|
+
onPostTermination: async () => {
|
|
237
|
+
await this.executeHook('post-termination');
|
|
238
|
+
this.emitEvent('agent.terminated', { agentId: this.agentId });
|
|
239
|
+
// Remove all listeners from this agent (EventEmitter)
|
|
240
|
+
this.removeAllListeners();
|
|
241
|
+
}
|
|
242
|
+
});
|
|
221
243
|
}
|
|
222
244
|
catch (error) {
|
|
223
|
-
this.lifecycleManager.
|
|
245
|
+
this.lifecycleManager.transitionTo(types_1.AgentStatus.ERROR, `Termination failed: ${error}`);
|
|
224
246
|
throw error;
|
|
225
247
|
}
|
|
226
248
|
}
|
|
@@ -359,16 +381,18 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
359
381
|
/**
|
|
360
382
|
* Get learned patterns from Q-learning
|
|
361
383
|
*/
|
|
362
|
-
getLearnedPatterns() {
|
|
363
|
-
|
|
384
|
+
async getLearnedPatterns() {
|
|
385
|
+
if (!this.learningEngine)
|
|
386
|
+
return [];
|
|
387
|
+
return await this.learningEngine.getPatterns();
|
|
364
388
|
}
|
|
365
389
|
/**
|
|
366
390
|
* Get learning engine status
|
|
367
391
|
*/
|
|
368
|
-
getLearningStatus() {
|
|
392
|
+
async getLearningStatus() {
|
|
369
393
|
if (!this.learningEngine)
|
|
370
394
|
return null;
|
|
371
|
-
const patterns = this.learningEngine.getPatterns();
|
|
395
|
+
const patterns = await this.learningEngine.getPatterns();
|
|
372
396
|
return {
|
|
373
397
|
enabled: this.learningEngine.isEnabled(),
|
|
374
398
|
totalExperiences: this.learningEngine.getTotalExperiences(),
|
|
@@ -430,6 +454,18 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
430
454
|
hasAgentDB() {
|
|
431
455
|
return this.agentDB !== undefined;
|
|
432
456
|
}
|
|
457
|
+
/**
|
|
458
|
+
* Check if AgentDB is using a real adapter (vs mock)
|
|
459
|
+
* @returns true if using real AgentDB, false if mock
|
|
460
|
+
*/
|
|
461
|
+
isRealAgentDB() {
|
|
462
|
+
if (!this.agentDB)
|
|
463
|
+
return false;
|
|
464
|
+
// Check adapter type or test mode flags
|
|
465
|
+
const isTestMode = process.env.NODE_ENV === 'test' || process.env.JEST_WORKER_ID !== undefined;
|
|
466
|
+
const useMock = process.env.AQE_USE_MOCK_AGENTDB === 'true';
|
|
467
|
+
return !isTestMode && !useMock;
|
|
468
|
+
}
|
|
433
469
|
/**
|
|
434
470
|
* Start the agent (idempotent - safe to call multiple times)
|
|
435
471
|
*/
|
|
@@ -574,9 +610,9 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
574
610
|
description: data.assignment.task.description || '',
|
|
575
611
|
requirements: data.assignment.task.requirements || {}
|
|
576
612
|
});
|
|
577
|
-
// Generate embedding
|
|
578
|
-
const queryEmbedding =
|
|
579
|
-
//
|
|
613
|
+
// Generate embedding using consolidated utility
|
|
614
|
+
const queryEmbedding = (0, EmbeddingGenerator_js_1.generateEmbedding)(taskQuery);
|
|
615
|
+
// Retrieve relevant context from AgentDB
|
|
580
616
|
const retrievalResult = await this.agentDB.retrieve(queryEmbedding, {
|
|
581
617
|
domain: `agent:${this.agentId.type}:tasks`,
|
|
582
618
|
k: 5,
|
|
@@ -586,6 +622,8 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
586
622
|
metric: 'cosine'
|
|
587
623
|
});
|
|
588
624
|
const searchTime = Date.now() - searchStart;
|
|
625
|
+
const isReal = this.isRealAgentDB();
|
|
626
|
+
const adapterType = isReal ? 'real AgentDB' : 'mock adapter';
|
|
589
627
|
// Enrich context with retrieved patterns
|
|
590
628
|
if (retrievalResult.memories.length > 0) {
|
|
591
629
|
const enrichedContext = {
|
|
@@ -605,17 +643,17 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
605
643
|
})
|
|
606
644
|
};
|
|
607
645
|
data.context = enrichedContext;
|
|
608
|
-
console.info(`[${this.agentId.id}]
|
|
609
|
-
`(${searchTime}ms,
|
|
646
|
+
console.info(`[${this.agentId.id}] Loaded ${retrievalResult.memories.length} patterns from ${adapterType} ` +
|
|
647
|
+
`(${searchTime}ms, ${retrievalResult.metadata.cacheHit ? 'cache hit' : 'cache miss'})`);
|
|
610
648
|
// Log top similar task
|
|
611
|
-
if (retrievalResult.memories.length > 0) {
|
|
649
|
+
if (retrievalResult.memories.length > 0 && isReal) {
|
|
612
650
|
const topMatch = retrievalResult.memories[0];
|
|
613
651
|
console.info(`[${this.agentId.id}] 🎯 Top match: similarity=${topMatch.similarity.toFixed(3)}, ` +
|
|
614
652
|
`confidence=${topMatch.confidence.toFixed(3)}`);
|
|
615
653
|
}
|
|
616
654
|
}
|
|
617
655
|
else {
|
|
618
|
-
console.info(`[${this.agentId.id}] No relevant patterns found in
|
|
656
|
+
console.info(`[${this.agentId.id}] No relevant patterns found in ${adapterType} (${searchTime}ms)`);
|
|
619
657
|
}
|
|
620
658
|
}
|
|
621
659
|
catch (agentDBError) {
|
|
@@ -675,9 +713,9 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
675
713
|
context: data.assignment.task.context || {},
|
|
676
714
|
timestamp: Date.now()
|
|
677
715
|
};
|
|
678
|
-
// Generate
|
|
679
|
-
const embedding =
|
|
680
|
-
//
|
|
716
|
+
// Generate embedding using consolidated utility
|
|
717
|
+
const embedding = (0, EmbeddingGenerator_js_1.generateEmbedding)(JSON.stringify(patternData));
|
|
718
|
+
// Store pattern in AgentDB
|
|
681
719
|
const pattern = {
|
|
682
720
|
id: `${this.agentId.id}-task-${data.assignment.id}`,
|
|
683
721
|
type: 'experience',
|
|
@@ -698,7 +736,9 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
698
736
|
};
|
|
699
737
|
const patternId = await this.agentDB.store(pattern);
|
|
700
738
|
const storeTime = Date.now() - startTime;
|
|
701
|
-
|
|
739
|
+
const isReal = this.isRealAgentDB();
|
|
740
|
+
const adapterType = isReal ? 'AgentDB' : 'mock adapter';
|
|
741
|
+
console.info(`[${this.agentId.id}] Stored pattern in ${adapterType}: ${patternId} (${storeTime}ms)`);
|
|
702
742
|
// ACTUAL Neural training integration if learning is enabled
|
|
703
743
|
if (this.agentDBConfig?.enableLearning) {
|
|
704
744
|
try {
|
|
@@ -816,8 +856,8 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
816
856
|
timestamp: Date.now()
|
|
817
857
|
};
|
|
818
858
|
// Generate embedding for error pattern
|
|
819
|
-
const embedding =
|
|
820
|
-
//
|
|
859
|
+
const embedding = (0, EmbeddingGenerator_js_1.generateEmbedding)(JSON.stringify(errorPattern));
|
|
860
|
+
// Store error pattern in AgentDB for failure analysis
|
|
821
861
|
const pattern = {
|
|
822
862
|
id: `${this.agentId.id}-error-${data.assignment.id}`,
|
|
823
863
|
type: 'error',
|
|
@@ -836,7 +876,9 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
836
876
|
};
|
|
837
877
|
const errorPatternId = await this.agentDB.store(pattern);
|
|
838
878
|
const storeTime = Date.now() - storeStart;
|
|
839
|
-
|
|
879
|
+
const isReal = this.isRealAgentDB();
|
|
880
|
+
const adapterType = isReal ? 'AgentDB' : 'mock adapter';
|
|
881
|
+
console.info(`[${this.agentId.id}] Stored error pattern in ${adapterType}: ${errorPatternId} ` +
|
|
840
882
|
`(${storeTime}ms, for failure analysis)`);
|
|
841
883
|
}
|
|
842
884
|
catch (agentDBError) {
|
|
@@ -905,7 +947,7 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
905
947
|
setupLifecycleHooks() {
|
|
906
948
|
// Setup default lifecycle behavior
|
|
907
949
|
this.on('error', (error) => {
|
|
908
|
-
this.lifecycleManager.
|
|
950
|
+
this.lifecycleManager.transitionTo(types_1.AgentStatus.ERROR, `Error event: ${error}`);
|
|
909
951
|
this.emitEvent('agent.error', { agentId: this.agentId, error });
|
|
910
952
|
});
|
|
911
953
|
}
|
|
@@ -986,30 +1028,6 @@ class BaseAgent extends events_1.EventEmitter {
|
|
|
986
1028
|
generateMessageId() {
|
|
987
1029
|
return `msg-${Date.now()}-${SecureRandom_js_1.SecureRandom.generateId(5)}`;
|
|
988
1030
|
}
|
|
989
|
-
/**
|
|
990
|
-
* Simple hash-based embedding generation
|
|
991
|
-
* In production, replace with actual embedding model (e.g., OpenAI, Cohere, local BERT)
|
|
992
|
-
* @param text Text to embed
|
|
993
|
-
* @returns 384-dimensional embedding vector
|
|
994
|
-
*/
|
|
995
|
-
simpleHashEmbedding(text) {
|
|
996
|
-
const dimensions = 384; // Common embedding dimension
|
|
997
|
-
const embedding = new Array(dimensions).fill(0);
|
|
998
|
-
// Simple hash-based embedding (for demonstration only)
|
|
999
|
-
for (let i = 0; i < text.length; i++) {
|
|
1000
|
-
const charCode = text.charCodeAt(i);
|
|
1001
|
-
const index = (charCode * (i + 1)) % dimensions;
|
|
1002
|
-
embedding[index] += Math.sin(charCode * 0.1) * 0.1;
|
|
1003
|
-
}
|
|
1004
|
-
// Normalize to unit vector
|
|
1005
|
-
const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));
|
|
1006
|
-
if (magnitude > 0) {
|
|
1007
|
-
for (let i = 0; i < dimensions; i++) {
|
|
1008
|
-
embedding[i] /= magnitude;
|
|
1009
|
-
}
|
|
1010
|
-
}
|
|
1011
|
-
return embedding;
|
|
1012
|
-
}
|
|
1013
1031
|
}
|
|
1014
1032
|
exports.BaseAgent = BaseAgent;
|
|
1015
1033
|
class BaseAgentFactory {
|