agentic-qe 1.5.1 → 1.6.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.
Files changed (188) hide show
  1. package/.claude/agents/qe-api-contract-validator.md +118 -0
  2. package/.claude/agents/qe-chaos-engineer.md +320 -5
  3. package/.claude/agents/qe-code-complexity.md +360 -0
  4. package/.claude/agents/qe-coverage-analyzer.md +112 -0
  5. package/.claude/agents/qe-deployment-readiness.md +322 -6
  6. package/.claude/agents/qe-flaky-test-hunter.md +115 -0
  7. package/.claude/agents/qe-fleet-commander.md +319 -6
  8. package/.claude/agents/qe-performance-tester.md +234 -0
  9. package/.claude/agents/qe-production-intelligence.md +114 -0
  10. package/.claude/agents/qe-quality-analyzer.md +126 -0
  11. package/.claude/agents/qe-quality-gate.md +119 -0
  12. package/.claude/agents/qe-regression-risk-analyzer.md +114 -0
  13. package/.claude/agents/qe-requirements-validator.md +114 -0
  14. package/.claude/agents/qe-security-scanner.md +118 -0
  15. package/.claude/agents/qe-test-data-architect.md +234 -0
  16. package/.claude/agents/qe-test-executor.md +115 -0
  17. package/.claude/agents/qe-test-generator.md +114 -0
  18. package/.claude/agents/qe-visual-tester.md +305 -6
  19. package/.claude/agents/subagents/qe-code-reviewer.md +0 -4
  20. package/.claude/agents/subagents/qe-data-generator.md +0 -16
  21. package/.claude/agents/subagents/qe-integration-tester.md +0 -17
  22. package/.claude/agents/subagents/qe-performance-validator.md +0 -16
  23. package/.claude/agents/subagents/qe-security-auditor.md +0 -16
  24. package/.claude/agents/subagents/qe-test-implementer.md +0 -17
  25. package/.claude/agents/subagents/qe-test-refactorer.md +0 -17
  26. package/.claude/agents/subagents/qe-test-writer.md +0 -19
  27. package/.claude/skills/brutal-honesty-review/README.md +218 -0
  28. package/.claude/skills/brutal-honesty-review/SKILL.md +725 -0
  29. package/.claude/skills/brutal-honesty-review/resources/assessment-rubrics.md +295 -0
  30. package/.claude/skills/brutal-honesty-review/resources/review-template.md +102 -0
  31. package/.claude/skills/brutal-honesty-review/scripts/assess-code.sh +179 -0
  32. package/.claude/skills/brutal-honesty-review/scripts/assess-tests.sh +223 -0
  33. package/.claude/skills/cicd-pipeline-qe-orchestrator/README.md +301 -0
  34. package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +510 -0
  35. package/.claude/skills/cicd-pipeline-qe-orchestrator/resources/workflows/microservice-pipeline.md +239 -0
  36. package/.claude/skills/cicd-pipeline-qe-orchestrator/resources/workflows/mobile-pipeline.md +375 -0
  37. package/.claude/skills/cicd-pipeline-qe-orchestrator/resources/workflows/monolith-pipeline.md +268 -0
  38. package/.claude/skills/six-thinking-hats/README.md +190 -0
  39. package/.claude/skills/six-thinking-hats/SKILL.md +1215 -0
  40. package/.claude/skills/six-thinking-hats/resources/examples/api-testing-example.md +345 -0
  41. package/.claude/skills/six-thinking-hats/resources/templates/solo-session-template.md +167 -0
  42. package/.claude/skills/six-thinking-hats/resources/templates/team-session-template.md +336 -0
  43. package/CHANGELOG.md +2472 -2129
  44. package/README.md +48 -10
  45. package/dist/adapters/MemoryStoreAdapter.d.ts +38 -0
  46. package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
  47. package/dist/adapters/MemoryStoreAdapter.js +22 -0
  48. package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
  49. package/dist/agents/BaseAgent.d.ts.map +1 -1
  50. package/dist/agents/BaseAgent.js +13 -0
  51. package/dist/agents/BaseAgent.js.map +1 -1
  52. package/dist/cli/commands/init-claude-md-template.d.ts +16 -0
  53. package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -0
  54. package/dist/cli/commands/init-claude-md-template.js +69 -0
  55. package/dist/cli/commands/init-claude-md-template.js.map +1 -0
  56. package/dist/cli/commands/init.d.ts +1 -1
  57. package/dist/cli/commands/init.d.ts.map +1 -1
  58. package/dist/cli/commands/init.js +509 -460
  59. package/dist/cli/commands/init.js.map +1 -1
  60. package/dist/core/memory/AgentDBService.d.ts +33 -28
  61. package/dist/core/memory/AgentDBService.d.ts.map +1 -1
  62. package/dist/core/memory/AgentDBService.js +233 -290
  63. package/dist/core/memory/AgentDBService.js.map +1 -1
  64. package/dist/core/memory/EnhancedAgentDBService.d.ts.map +1 -1
  65. package/dist/core/memory/EnhancedAgentDBService.js +5 -3
  66. package/dist/core/memory/EnhancedAgentDBService.js.map +1 -1
  67. package/dist/core/memory/RealAgentDBAdapter.d.ts +9 -2
  68. package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
  69. package/dist/core/memory/RealAgentDBAdapter.js +126 -100
  70. package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
  71. package/dist/core/memory/SwarmMemoryManager.d.ts +58 -0
  72. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  73. package/dist/core/memory/SwarmMemoryManager.js +176 -0
  74. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  75. package/dist/core/memory/index.d.ts.map +1 -1
  76. package/dist/core/memory/index.js +2 -1
  77. package/dist/core/memory/index.js.map +1 -1
  78. package/dist/learning/LearningEngine.d.ts +14 -27
  79. package/dist/learning/LearningEngine.d.ts.map +1 -1
  80. package/dist/learning/LearningEngine.js +57 -119
  81. package/dist/learning/LearningEngine.js.map +1 -1
  82. package/dist/learning/index.d.ts +0 -1
  83. package/dist/learning/index.d.ts.map +1 -1
  84. package/dist/learning/index.js +0 -1
  85. package/dist/learning/index.js.map +1 -1
  86. package/dist/mcp/handlers/learning/learning-query.d.ts +34 -0
  87. package/dist/mcp/handlers/learning/learning-query.d.ts.map +1 -0
  88. package/dist/mcp/handlers/learning/learning-query.js +156 -0
  89. package/dist/mcp/handlers/learning/learning-query.js.map +1 -0
  90. package/dist/mcp/handlers/learning/learning-store-experience.d.ts +30 -0
  91. package/dist/mcp/handlers/learning/learning-store-experience.d.ts.map +1 -0
  92. package/dist/mcp/handlers/learning/learning-store-experience.js +86 -0
  93. package/dist/mcp/handlers/learning/learning-store-experience.js.map +1 -0
  94. package/dist/mcp/handlers/learning/learning-store-pattern.d.ts +31 -0
  95. package/dist/mcp/handlers/learning/learning-store-pattern.d.ts.map +1 -0
  96. package/dist/mcp/handlers/learning/learning-store-pattern.js +126 -0
  97. package/dist/mcp/handlers/learning/learning-store-pattern.js.map +1 -0
  98. package/dist/mcp/handlers/learning/learning-store-qvalue.d.ts +30 -0
  99. package/dist/mcp/handlers/learning/learning-store-qvalue.d.ts.map +1 -0
  100. package/dist/mcp/handlers/learning/learning-store-qvalue.js +100 -0
  101. package/dist/mcp/handlers/learning/learning-store-qvalue.js.map +1 -0
  102. package/dist/mcp/server.d.ts +11 -0
  103. package/dist/mcp/server.d.ts.map +1 -1
  104. package/dist/mcp/server.js +98 -1
  105. package/dist/mcp/server.js.map +1 -1
  106. package/dist/mcp/services/LearningEventListener.d.ts +123 -0
  107. package/dist/mcp/services/LearningEventListener.d.ts.map +1 -0
  108. package/dist/mcp/services/LearningEventListener.js +322 -0
  109. package/dist/mcp/services/LearningEventListener.js.map +1 -0
  110. package/dist/mcp/tools.d.ts +4 -0
  111. package/dist/mcp/tools.d.ts.map +1 -1
  112. package/dist/mcp/tools.js +179 -0
  113. package/dist/mcp/tools.js.map +1 -1
  114. package/dist/types/memory-interfaces.d.ts +71 -0
  115. package/dist/types/memory-interfaces.d.ts.map +1 -1
  116. package/dist/utils/Calculator.d.ts +35 -0
  117. package/dist/utils/Calculator.d.ts.map +1 -0
  118. package/dist/utils/Calculator.js +50 -0
  119. package/dist/utils/Calculator.js.map +1 -0
  120. package/dist/utils/Logger.d.ts.map +1 -1
  121. package/dist/utils/Logger.js +4 -1
  122. package/dist/utils/Logger.js.map +1 -1
  123. package/package.json +7 -5
  124. package/.claude/agents/qe-api-contract-validator.md.backup +0 -1148
  125. package/.claude/agents/qe-api-contract-validator.md.backup-20251107-134747 +0 -1148
  126. package/.claude/agents/qe-api-contract-validator.md.backup-phase2-20251107-140039 +0 -1123
  127. package/.claude/agents/qe-chaos-engineer.md.backup +0 -808
  128. package/.claude/agents/qe-chaos-engineer.md.backup-20251107-134747 +0 -808
  129. package/.claude/agents/qe-chaos-engineer.md.backup-phase2-20251107-140039 +0 -787
  130. package/.claude/agents/qe-code-complexity.md.backup +0 -291
  131. package/.claude/agents/qe-code-complexity.md.backup-20251107-134747 +0 -291
  132. package/.claude/agents/qe-code-complexity.md.backup-phase2-20251107-140039 +0 -286
  133. package/.claude/agents/qe-coverage-analyzer.md.backup +0 -467
  134. package/.claude/agents/qe-coverage-analyzer.md.backup-20251107-134747 +0 -467
  135. package/.claude/agents/qe-coverage-analyzer.md.backup-phase2-20251107-140039 +0 -438
  136. package/.claude/agents/qe-deployment-readiness.md.backup +0 -1166
  137. package/.claude/agents/qe-deployment-readiness.md.backup-20251107-134747 +0 -1166
  138. package/.claude/agents/qe-deployment-readiness.md.backup-phase2-20251107-140039 +0 -1140
  139. package/.claude/agents/qe-flaky-test-hunter.md.backup +0 -1195
  140. package/.claude/agents/qe-flaky-test-hunter.md.backup-20251107-134747 +0 -1195
  141. package/.claude/agents/qe-flaky-test-hunter.md.backup-phase2-20251107-140039 +0 -1162
  142. package/.claude/agents/qe-fleet-commander.md.backup +0 -718
  143. package/.claude/agents/qe-fleet-commander.md.backup-20251107-134747 +0 -718
  144. package/.claude/agents/qe-fleet-commander.md.backup-phase2-20251107-140039 +0 -697
  145. package/.claude/agents/qe-performance-tester.md.backup +0 -428
  146. package/.claude/agents/qe-performance-tester.md.backup-20251107-134747 +0 -428
  147. package/.claude/agents/qe-performance-tester.md.backup-phase2-20251107-140039 +0 -372
  148. package/.claude/agents/qe-production-intelligence.md.backup +0 -1219
  149. package/.claude/agents/qe-production-intelligence.md.backup-20251107-134747 +0 -1219
  150. package/.claude/agents/qe-production-intelligence.md.backup-phase2-20251107-140039 +0 -1194
  151. package/.claude/agents/qe-quality-analyzer.md.backup +0 -425
  152. package/.claude/agents/qe-quality-analyzer.md.backup-20251107-134747 +0 -425
  153. package/.claude/agents/qe-quality-analyzer.md.backup-phase2-20251107-140039 +0 -394
  154. package/.claude/agents/qe-quality-gate.md.backup +0 -446
  155. package/.claude/agents/qe-quality-gate.md.backup-20251107-134747 +0 -446
  156. package/.claude/agents/qe-quality-gate.md.backup-phase2-20251107-140039 +0 -415
  157. package/.claude/agents/qe-regression-risk-analyzer.md.backup +0 -1009
  158. package/.claude/agents/qe-regression-risk-analyzer.md.backup-20251107-134747 +0 -1009
  159. package/.claude/agents/qe-regression-risk-analyzer.md.backup-phase2-20251107-140039 +0 -984
  160. package/.claude/agents/qe-requirements-validator.md.backup +0 -748
  161. package/.claude/agents/qe-requirements-validator.md.backup-20251107-134747 +0 -748
  162. package/.claude/agents/qe-requirements-validator.md.backup-phase2-20251107-140039 +0 -723
  163. package/.claude/agents/qe-security-scanner.md.backup +0 -634
  164. package/.claude/agents/qe-security-scanner.md.backup-20251107-134747 +0 -634
  165. package/.claude/agents/qe-security-scanner.md.backup-phase2-20251107-140039 +0 -573
  166. package/.claude/agents/qe-test-data-architect.md.backup +0 -1064
  167. package/.claude/agents/qe-test-data-architect.md.backup-20251107-134747 +0 -1064
  168. package/.claude/agents/qe-test-data-architect.md.backup-phase2-20251107-140039 +0 -1040
  169. package/.claude/agents/qe-test-executor.md.backup +0 -389
  170. package/.claude/agents/qe-test-executor.md.backup-20251107-134747 +0 -389
  171. package/.claude/agents/qe-test-executor.md.backup-phase2-20251107-140039 +0 -369
  172. package/.claude/agents/qe-test-generator.md.backup +0 -997
  173. package/.claude/agents/qe-test-generator.md.backup-20251107-134747 +0 -997
  174. package/.claude/agents/qe-visual-tester.md.backup +0 -777
  175. package/.claude/agents/qe-visual-tester.md.backup-20251107-134747 +0 -777
  176. package/.claude/agents/qe-visual-tester.md.backup-phase2-20251107-140039 +0 -756
  177. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +0 -54
  178. package/.claude/commands/analysis/performance-bottlenecks.md +0 -59
  179. package/.claude/commands/flow-nexus/app-store.md +0 -124
  180. package/.claude/commands/flow-nexus/challenges.md +0 -120
  181. package/.claude/commands/flow-nexus/login-registration.md +0 -65
  182. package/.claude/commands/flow-nexus/neural-network.md +0 -134
  183. package/.claude/commands/flow-nexus/payments.md +0 -116
  184. package/.claude/commands/flow-nexus/sandbox.md +0 -83
  185. package/.claude/commands/flow-nexus/swarm.md +0 -87
  186. package/.claude/commands/flow-nexus/user-tools.md +0 -152
  187. package/.claude/commands/flow-nexus/workflow.md +0 -115
  188. package/.claude/commands/memory/usage.md +0 -46
@@ -0,0 +1,30 @@
1
+ /**
2
+ * MCP Tool: learning_store_experience
3
+ *
4
+ * Stores a learning experience for an agent. This includes task execution
5
+ * details, reward assessment, and outcome data.
6
+ *
7
+ * Part of Phase 1 implementation of Option C (Hybrid Approach) for
8
+ * enabling learning persistence with Claude Code Task tool.
9
+ */
10
+ import { BaseHandler, HandlerResponse } from '../base-handler';
11
+ import type { SwarmMemoryManager } from '../../../core/memory/SwarmMemoryManager';
12
+ import type { AgentRegistry } from '../../services/AgentRegistry';
13
+ import type { HookExecutor } from '../../services/HookExecutor';
14
+ export interface LearningExperience {
15
+ agentId: string;
16
+ taskType: string;
17
+ reward: number;
18
+ outcome: Record<string, any>;
19
+ timestamp?: number;
20
+ metadata?: Record<string, any>;
21
+ }
22
+ export declare class LearningStoreExperienceHandler extends BaseHandler {
23
+ private registry?;
24
+ private hookExecutor?;
25
+ private memoryManager?;
26
+ private eventBus?;
27
+ constructor(registry?: AgentRegistry | undefined, hookExecutor?: HookExecutor | undefined, memoryManager?: SwarmMemoryManager | undefined, eventBus?: import("events").EventEmitter | undefined);
28
+ handle(args: LearningExperience): Promise<HandlerResponse>;
29
+ }
30
+ //# sourceMappingURL=learning-store-experience.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-store-experience.d.ts","sourceRoot":"","sources":["../../../../src/mcp/handlers/learning/learning-store-experience.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,qBAAa,8BAA+B,SAAQ,WAAW;IAE3D,OAAO,CAAC,QAAQ,CAAC;IACjB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC;gBAHT,QAAQ,CAAC,EAAE,aAAa,YAAA,EACxB,YAAY,CAAC,EAAE,YAAY,YAAA,EAC3B,aAAa,CAAC,EAAE,kBAAkB,YAAA,EAClC,QAAQ,CAAC,EAAE,OAAO,QAAQ,EAAE,YAAY,YAAA;IAK5C,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC;CAsFjE"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Tool: learning_store_experience
4
+ *
5
+ * Stores a learning experience for an agent. This includes task execution
6
+ * details, reward assessment, and outcome data.
7
+ *
8
+ * Part of Phase 1 implementation of Option C (Hybrid Approach) for
9
+ * enabling learning persistence with Claude Code Task tool.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.LearningStoreExperienceHandler = void 0;
13
+ const base_handler_1 = require("../base-handler");
14
+ class LearningStoreExperienceHandler extends base_handler_1.BaseHandler {
15
+ constructor(registry, hookExecutor, memoryManager, eventBus) {
16
+ super();
17
+ this.registry = registry;
18
+ this.hookExecutor = hookExecutor;
19
+ this.memoryManager = memoryManager;
20
+ this.eventBus = eventBus;
21
+ }
22
+ async handle(args) {
23
+ return this.safeHandle(async () => {
24
+ const requestId = this.generateRequestId();
25
+ const { agentId, taskType, reward, outcome, timestamp = Date.now(), metadata = {} } = args;
26
+ // Validate inputs
27
+ this.validateRequired(args, ['agentId', 'taskType', 'reward', 'outcome']);
28
+ if (typeof reward !== 'number' || reward < 0 || reward > 1) {
29
+ throw new Error('reward must be a number between 0 and 1');
30
+ }
31
+ if (typeof outcome !== 'object') {
32
+ throw new Error('outcome must be an object');
33
+ }
34
+ // Get memory manager
35
+ if (!this.memoryManager) {
36
+ throw new Error('SwarmMemoryManager not initialized');
37
+ }
38
+ // Store experience in learning_experiences table
39
+ // Note: metadata and created_at columns added via migration
40
+ const experienceData = {
41
+ agent_id: agentId,
42
+ task_id: `task-${Date.now()}`, // Generate task ID
43
+ task_type: taskType,
44
+ state: JSON.stringify({ type: taskType, timestamp }),
45
+ action: JSON.stringify(outcome),
46
+ reward,
47
+ next_state: JSON.stringify({ completed: true, timestamp }),
48
+ episode_id: null, // Optional episode grouping
49
+ timestamp, // Uses existing timestamp column (DATETIME)
50
+ metadata: JSON.stringify(metadata),
51
+ created_at: timestamp
52
+ };
53
+ // Use direct database access
54
+ const db = this.memoryManager.db;
55
+ if (!db) {
56
+ throw new Error('Database connection not available');
57
+ }
58
+ const stmt = db.prepare(`
59
+ INSERT INTO learning_experiences (
60
+ agent_id, task_id, task_type, state, action, reward, next_state,
61
+ episode_id, timestamp, metadata, created_at
62
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
63
+ `);
64
+ const result = stmt.run(experienceData.agent_id, experienceData.task_id, experienceData.task_type, experienceData.state, experienceData.action, experienceData.reward, experienceData.next_state, experienceData.episode_id, experienceData.timestamp, experienceData.metadata, experienceData.created_at);
65
+ const experienceId = `exp-${result.lastInsertRowid}`;
66
+ this.log('info', `Learning experience stored: ${experienceId}`, {
67
+ agentId,
68
+ taskType,
69
+ reward
70
+ });
71
+ // Emit event to track explicit learning (prevents duplicate auto-storage)
72
+ if (this.eventBus) {
73
+ this.eventBus.emit('learning:experience:stored', {
74
+ agentId,
75
+ type: 'experience'
76
+ });
77
+ }
78
+ return this.createSuccessResponse({
79
+ experienceId,
80
+ message: `Learning experience stored successfully for ${agentId}`
81
+ }, requestId);
82
+ });
83
+ }
84
+ }
85
+ exports.LearningStoreExperienceHandler = LearningStoreExperienceHandler;
86
+ //# sourceMappingURL=learning-store-experience.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-store-experience.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/learning/learning-store-experience.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * MCP Tool: learning_store_pattern
3
+ *
4
+ * Stores a successful pattern for an agent. Patterns capture proven approaches,
5
+ * strategies, and techniques that worked well and should be reused.
6
+ *
7
+ * Part of Phase 1 implementation of Option C (Hybrid Approach) for
8
+ * enabling learning persistence with Claude Code Task tool.
9
+ */
10
+ import { BaseHandler, HandlerResponse } from '../base-handler';
11
+ import type { SwarmMemoryManager } from '../../../core/memory/SwarmMemoryManager';
12
+ import type { AgentRegistry } from '../../services/AgentRegistry';
13
+ import type { HookExecutor } from '../../services/HookExecutor';
14
+ export interface LearningPattern {
15
+ agentId?: string;
16
+ pattern: string;
17
+ confidence: number;
18
+ domain?: string;
19
+ usageCount?: number;
20
+ successRate?: number;
21
+ metadata?: Record<string, any>;
22
+ }
23
+ export declare class LearningStorePatternHandler extends BaseHandler {
24
+ private registry?;
25
+ private hookExecutor?;
26
+ private memoryManager?;
27
+ private eventBus?;
28
+ constructor(registry?: AgentRegistry | undefined, hookExecutor?: HookExecutor | undefined, memoryManager?: SwarmMemoryManager | undefined, eventBus?: import("events").EventEmitter | undefined);
29
+ handle(args: LearningPattern): Promise<HandlerResponse>;
30
+ }
31
+ //# sourceMappingURL=learning-store-pattern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-store-pattern.d.ts","sourceRoot":"","sources":["../../../../src/mcp/handlers/learning/learning-store-pattern.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,qBAAa,2BAA4B,SAAQ,WAAW;IAExD,OAAO,CAAC,QAAQ,CAAC;IACjB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC;gBAHT,QAAQ,CAAC,EAAE,aAAa,YAAA,EACxB,YAAY,CAAC,EAAE,YAAY,YAAA,EAC3B,aAAa,CAAC,EAAE,kBAAkB,YAAA,EAClC,QAAQ,CAAC,EAAE,OAAO,QAAQ,EAAE,YAAY,YAAA;IAK5C,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;CA+I9D"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Tool: learning_store_pattern
4
+ *
5
+ * Stores a successful pattern for an agent. Patterns capture proven approaches,
6
+ * strategies, and techniques that worked well and should be reused.
7
+ *
8
+ * Part of Phase 1 implementation of Option C (Hybrid Approach) for
9
+ * enabling learning persistence with Claude Code Task tool.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.LearningStorePatternHandler = void 0;
13
+ const base_handler_1 = require("../base-handler");
14
+ class LearningStorePatternHandler extends base_handler_1.BaseHandler {
15
+ constructor(registry, hookExecutor, memoryManager, eventBus) {
16
+ super();
17
+ this.registry = registry;
18
+ this.hookExecutor = hookExecutor;
19
+ this.memoryManager = memoryManager;
20
+ this.eventBus = eventBus;
21
+ }
22
+ async handle(args) {
23
+ return this.safeHandle(async () => {
24
+ const requestId = this.generateRequestId();
25
+ const { agentId, pattern, confidence, domain = 'general', usageCount = 1, successRate = 1.0, metadata = {} } = args;
26
+ // Validate inputs
27
+ this.validateRequired(args, ['pattern', 'confidence']);
28
+ if (typeof confidence !== 'number' || confidence < 0 || confidence > 1) {
29
+ throw new Error('confidence must be a number between 0 and 1');
30
+ }
31
+ if (typeof pattern !== 'string' || pattern.trim().length === 0) {
32
+ throw new Error('pattern must be a non-empty string');
33
+ }
34
+ // Get memory manager
35
+ if (!this.memoryManager) {
36
+ throw new Error('SwarmMemoryManager not initialized');
37
+ }
38
+ const db = this.memoryManager.db;
39
+ if (!db) {
40
+ throw new Error('Database connection not available');
41
+ }
42
+ // Use existing patterns table instead of creating test_patterns
43
+ // Note: patterns table should have agent_id, domain, success_rate columns (added via migration)
44
+ // Generate unique pattern ID
45
+ const patternId = `pattern-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
46
+ // Check if pattern already exists (for the same agent + pattern text)
47
+ const existing = agentId ? db.prepare(`
48
+ SELECT id, usage_count, success_rate, confidence FROM patterns
49
+ WHERE agent_id = ? AND pattern = ?
50
+ `).get(agentId, pattern) : undefined;
51
+ if (existing) {
52
+ // Update existing pattern (weighted average for confidence and success rate)
53
+ const newUsageCount = existing.usage_count + usageCount;
54
+ const weightedConfidence = (existing.confidence * existing.usage_count + confidence * usageCount) / newUsageCount;
55
+ const weightedSuccessRate = (existing.success_rate * existing.usage_count + successRate * usageCount) / newUsageCount;
56
+ db.prepare(`
57
+ UPDATE patterns
58
+ SET usage_count = ?, confidence = ?, success_rate = ?, metadata = ?
59
+ WHERE id = ?
60
+ `).run(newUsageCount, weightedConfidence, weightedSuccessRate, JSON.stringify(metadata), existing.id);
61
+ this.log('info', `Pattern updated: ${existing.id}`, {
62
+ agentId,
63
+ domain,
64
+ usageCount: newUsageCount,
65
+ confidence: weightedConfidence,
66
+ successRate: weightedSuccessRate
67
+ });
68
+ // Emit event to track explicit learning (prevents duplicate auto-storage)
69
+ if (this.eventBus) {
70
+ this.eventBus.emit('learning:pattern:stored', {
71
+ agentId,
72
+ type: 'pattern'
73
+ });
74
+ }
75
+ return this.createSuccessResponse({
76
+ patternId: existing.id,
77
+ message: `Pattern updated successfully${agentId ? ` for ${agentId}` : ''}`,
78
+ pattern: {
79
+ id: existing.id,
80
+ domain,
81
+ confidence: weightedConfidence,
82
+ usageCount: newUsageCount,
83
+ successRate: weightedSuccessRate
84
+ }
85
+ }, requestId);
86
+ }
87
+ else {
88
+ // Insert new pattern into patterns table
89
+ db.prepare(`
90
+ INSERT INTO patterns (
91
+ id, pattern, confidence, usage_count, agent_id, domain, success_rate,
92
+ metadata, ttl, created_at, expires_at
93
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
94
+ `).run(patternId, pattern, confidence, usageCount, agentId || null, domain, successRate, JSON.stringify(metadata), 0, // ttl (0 = no expiry)
95
+ Date.now(), null // expires_at
96
+ );
97
+ this.log('info', `Pattern stored: ${patternId}`, {
98
+ agentId,
99
+ domain,
100
+ confidence,
101
+ usageCount,
102
+ successRate
103
+ });
104
+ // Emit event to track explicit learning (prevents duplicate auto-storage)
105
+ if (this.eventBus) {
106
+ this.eventBus.emit('learning:pattern:stored', {
107
+ agentId,
108
+ type: 'pattern'
109
+ });
110
+ }
111
+ return this.createSuccessResponse({
112
+ patternId,
113
+ message: `Pattern stored successfully${agentId ? ` for ${agentId}` : ''}`,
114
+ pattern: {
115
+ id: patternId,
116
+ domain,
117
+ confidence,
118
+ usageCount
119
+ }
120
+ }, requestId);
121
+ }
122
+ });
123
+ }
124
+ }
125
+ exports.LearningStorePatternHandler = LearningStorePatternHandler;
126
+ //# sourceMappingURL=learning-store-pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-store-pattern.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/learning/learning-store-pattern.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * MCP Tool: learning_store_qvalue
3
+ *
4
+ * Stores or updates a Q-value for a state-action pair. Q-values represent
5
+ * the expected reward for taking a specific action in a given state.
6
+ *
7
+ * Part of Phase 1 implementation of Option C (Hybrid Approach) for
8
+ * enabling learning persistence with Claude Code Task tool.
9
+ */
10
+ import { BaseHandler, HandlerResponse } from '../base-handler';
11
+ import type { SwarmMemoryManager } from '../../../core/memory/SwarmMemoryManager';
12
+ import type { AgentRegistry } from '../../services/AgentRegistry';
13
+ import type { HookExecutor } from '../../services/HookExecutor';
14
+ export interface QValueData {
15
+ agentId: string;
16
+ stateKey: string;
17
+ actionKey: string;
18
+ qValue: number;
19
+ updateCount?: number;
20
+ metadata?: Record<string, any>;
21
+ }
22
+ export declare class LearningStoreQValueHandler extends BaseHandler {
23
+ private registry?;
24
+ private hookExecutor?;
25
+ private memoryManager?;
26
+ private eventBus?;
27
+ constructor(registry?: AgentRegistry | undefined, hookExecutor?: HookExecutor | undefined, memoryManager?: SwarmMemoryManager | undefined, eventBus?: import("events").EventEmitter | undefined);
28
+ handle(args: QValueData): Promise<HandlerResponse>;
29
+ }
30
+ //# sourceMappingURL=learning-store-qvalue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-store-qvalue.d.ts","sourceRoot":"","sources":["../../../../src/mcp/handlers/learning/learning-store-qvalue.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,qBAAa,0BAA2B,SAAQ,WAAW;IAEvD,OAAO,CAAC,QAAQ,CAAC;IACjB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC;gBAHT,QAAQ,CAAC,EAAE,aAAa,YAAA,EACxB,YAAY,CAAC,EAAE,YAAY,YAAA,EAC3B,aAAa,CAAC,EAAE,kBAAkB,YAAA,EAClC,QAAQ,CAAC,EAAE,OAAO,QAAQ,EAAE,YAAY,YAAA;IAK5C,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC;CA6GzD"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Tool: learning_store_qvalue
4
+ *
5
+ * Stores or updates a Q-value for a state-action pair. Q-values represent
6
+ * the expected reward for taking a specific action in a given state.
7
+ *
8
+ * Part of Phase 1 implementation of Option C (Hybrid Approach) for
9
+ * enabling learning persistence with Claude Code Task tool.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.LearningStoreQValueHandler = void 0;
13
+ const base_handler_1 = require("../base-handler");
14
+ class LearningStoreQValueHandler extends base_handler_1.BaseHandler {
15
+ constructor(registry, hookExecutor, memoryManager, eventBus) {
16
+ super();
17
+ this.registry = registry;
18
+ this.hookExecutor = hookExecutor;
19
+ this.memoryManager = memoryManager;
20
+ this.eventBus = eventBus;
21
+ }
22
+ async handle(args) {
23
+ return this.safeHandle(async () => {
24
+ const requestId = this.generateRequestId();
25
+ const { agentId, stateKey, actionKey, qValue, updateCount = 1, metadata = {} } = args;
26
+ // Validate inputs
27
+ this.validateRequired(args, ['agentId', 'stateKey', 'actionKey', 'qValue']);
28
+ if (typeof qValue !== 'number') {
29
+ throw new Error('qValue must be a number');
30
+ }
31
+ // Get memory manager
32
+ if (!this.memoryManager) {
33
+ throw new Error('SwarmMemoryManager not initialized');
34
+ }
35
+ const db = this.memoryManager.db;
36
+ if (!db) {
37
+ throw new Error('Database connection not available');
38
+ }
39
+ // Check if Q-value already exists
40
+ const existing = db.prepare(`
41
+ SELECT id, q_value, update_count FROM q_values
42
+ WHERE agent_id = ? AND state_key = ? AND action_key = ?
43
+ `).get(agentId, stateKey, actionKey);
44
+ let qValueId;
45
+ if (existing) {
46
+ // Update existing Q-value (weighted average)
47
+ const newUpdateCount = existing.update_count + updateCount;
48
+ const weightedQValue = (existing.q_value * existing.update_count + qValue * updateCount) / newUpdateCount;
49
+ // Note: Schema uses last_updated (DATETIME), not updated_at
50
+ // Note: metadata column added via migration
51
+ db.prepare(`
52
+ UPDATE q_values
53
+ SET q_value = ?, update_count = ?, metadata = ?, last_updated = datetime('now')
54
+ WHERE id = ?
55
+ `).run(weightedQValue, newUpdateCount, JSON.stringify(metadata), existing.id);
56
+ qValueId = `qval-${existing.id}`;
57
+ this.log('info', `Q-value updated: ${qValueId}`, {
58
+ agentId,
59
+ stateKey,
60
+ actionKey,
61
+ oldValue: existing.q_value,
62
+ newValue: weightedQValue,
63
+ updateCount: newUpdateCount
64
+ });
65
+ }
66
+ else {
67
+ // Insert new Q-value
68
+ // Note: Schema uses created_at and last_updated (DATETIME)
69
+ // Note: metadata column added via migration
70
+ const result = db.prepare(`
71
+ INSERT INTO q_values (
72
+ agent_id, state_key, action_key, q_value, update_count,
73
+ metadata, created_at, last_updated
74
+ ) VALUES (?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))
75
+ `).run(agentId, stateKey, actionKey, qValue, updateCount, JSON.stringify(metadata));
76
+ qValueId = `qval-${result.lastInsertRowid}`;
77
+ this.log('info', `Q-value stored: ${qValueId}`, {
78
+ agentId,
79
+ stateKey,
80
+ actionKey,
81
+ qValue,
82
+ updateCount
83
+ });
84
+ }
85
+ // Emit event to track explicit learning (prevents duplicate auto-storage)
86
+ if (this.eventBus) {
87
+ this.eventBus.emit('learning:qvalue:stored', {
88
+ agentId,
89
+ type: 'qvalue'
90
+ });
91
+ }
92
+ return this.createSuccessResponse({
93
+ qValueId,
94
+ message: `Q-value ${existing ? 'updated' : 'stored'} successfully for ${agentId}`
95
+ }, requestId);
96
+ });
97
+ }
98
+ }
99
+ exports.LearningStoreQValueHandler = LearningStoreQValueHandler;
100
+ //# sourceMappingURL=learning-store-qvalue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-store-qvalue.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/learning/learning-store-qvalue.ts"],"names":[],"mappings":"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"}
@@ -24,11 +24,22 @@ export declare class AgenticQEMCPServer {
24
24
  private memoryStore;
25
25
  private blackboard;
26
26
  private proposals;
27
+ private eventBus;
28
+ private learningListener;
27
29
  constructor();
28
30
  /**
29
31
  * Initialize tool handlers
30
32
  */
31
33
  private initializeHandlers;
34
+ /**
35
+ * Initialize Learning Event Listener (Phase 6 - Hybrid Approach)
36
+ *
37
+ * This sets up automatic learning persistence as a safety net when agents
38
+ * don't explicitly call MCP learning tools. It's part of our hybrid approach:
39
+ * - PRIMARY: Agents call MCP tools explicitly (Claude Flow's pattern)
40
+ * - FALLBACK: Event listener auto-stores (our innovation)
41
+ */
42
+ private initializeLearningListener;
32
43
  /**
33
44
  * Setup MCP request handlers
34
45
  */
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AA2FjF;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,SAAS,CAAmB;;IAwCpC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8I1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA8V5B;;OAEG;IACG,KAAK,CAAC,SAAS,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5D;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIR;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGxC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAIzE;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAuB1C"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAiGjF;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,gBAAgB,CAA+B;;IAgDvD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsJ1B;;;;;;;OAOG;IACH,OAAO,CAAC,0BAA0B;IAmClC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuW5B;;OAEG;IACG,KAAK,CAAC,SAAS,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5D;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIR;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGxC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAIzE;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAuB1C"}
@@ -8,6 +8,39 @@
8
8
  * @version 1.0.0
9
9
  * @author Agentic QE Team
10
10
  */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
11
44
  Object.defineProperty(exports, "__esModule", { value: true });
12
45
  exports.AgenticQEMCPServer = void 0;
13
46
  exports.createAgenticQEServer = createAgenticQEServer;
@@ -15,6 +48,7 @@ exports.main = main;
15
48
  const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
16
49
  const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
17
50
  const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
51
+ const path = __importStar(require("path"));
18
52
  const tools_js_1 = require("./tools.js");
19
53
  const fleet_init_js_1 = require("./handlers/fleet-init.js");
20
54
  const agent_spawn_js_1 = require("./handlers/agent-spawn.js");
@@ -70,6 +104,11 @@ const CoverageAnalyzeStreamHandler_js_1 = require("./streaming/CoverageAnalyzeSt
70
104
  const Phase2Tools_js_1 = require("./handlers/phase2/Phase2Tools.js");
71
105
  const Phase3DomainTools_js_1 = require("./handlers/phase3/Phase3DomainTools.js");
72
106
  const events_1 = require("events");
107
+ const learning_store_experience_js_1 = require("./handlers/learning/learning-store-experience.js");
108
+ const learning_store_qvalue_js_1 = require("./handlers/learning/learning-store-qvalue.js");
109
+ const learning_query_js_1 = require("./handlers/learning/learning-query.js");
110
+ const learning_store_pattern_js_1 = require("./handlers/learning/learning-store-pattern.js");
111
+ const LearningEventListener_js_1 = require("./services/LearningEventListener.js");
73
112
  // Phase 3: Domain-specific tool functions
74
113
  const index_js_2 = require("./tools/qe/api-contract/index.js");
75
114
  const index_js_3 = require("./tools/qe/test-data/index.js");
@@ -106,12 +145,19 @@ class AgenticQEMCPServer {
106
145
  timeout: 30000
107
146
  });
108
147
  // Initialize shared memory structures for coordination
109
- this.memory = new SwarmMemoryManager_js_1.SwarmMemoryManager();
148
+ // Use persistent database for learning data (matches AgentRegistry path)
149
+ const dbPath = path.join(process.cwd(), '.agentic-qe', 'memory.db');
150
+ this.memory = new SwarmMemoryManager_js_1.SwarmMemoryManager(dbPath);
110
151
  this.memoryStore = new Map();
111
152
  this.blackboard = new Map();
112
153
  this.proposals = new Map();
154
+ // Initialize event bus for learning event coordination
155
+ this.eventBus = new events_1.EventEmitter();
156
+ this.eventBus.setMaxListeners(100); // Support many concurrent agents
157
+ this.learningListener = null; // Will be initialized after handlers
113
158
  this.handlers = new Map();
114
159
  this.initializeHandlers();
160
+ this.initializeLearningListener(); // Initialize learning listener after handlers
115
161
  this.setupRequestHandlers();
116
162
  }
117
163
  /**
@@ -200,6 +246,13 @@ class AgenticQEMCPServer {
200
246
  this.handlers.set(tools_js_1.TOOL_NAMES.IMPROVEMENT_AB_TEST, phase2Handler);
201
247
  this.handlers.set(tools_js_1.TOOL_NAMES.IMPROVEMENT_FAILURES, phase2Handler);
202
248
  this.handlers.set(tools_js_1.TOOL_NAMES.PERFORMANCE_TRACK, phase2Handler);
249
+ // Phase 6: Learning Service Tools (Hybrid Approach - Option C)
250
+ // These tools enable learning persistence when using Claude Code Task tool
251
+ // Pass eventBus to enable explicit learning tracking (prevents duplicate auto-storage)
252
+ this.handlers.set(tools_js_1.TOOL_NAMES.LEARNING_STORE_EXPERIENCE, new learning_store_experience_js_1.LearningStoreExperienceHandler(this.registry, this.hookExecutor, this.memory, this.eventBus));
253
+ this.handlers.set(tools_js_1.TOOL_NAMES.LEARNING_STORE_QVALUE, new learning_store_qvalue_js_1.LearningStoreQValueHandler(this.registry, this.hookExecutor, this.memory, this.eventBus));
254
+ this.handlers.set(tools_js_1.TOOL_NAMES.LEARNING_STORE_PATTERN, new learning_store_pattern_js_1.LearningStorePatternHandler(this.registry, this.hookExecutor, this.memory, this.eventBus));
255
+ this.handlers.set(tools_js_1.TOOL_NAMES.LEARNING_QUERY, new learning_query_js_1.LearningQueryHandler(this.registry, this.hookExecutor, this.memory));
203
256
  // Phase 3 Domain-Specific Tools Handler
204
257
  const phase3Handler = new Phase3DomainTools_js_1.Phase3DomainToolsHandler(this.registry, this.hookExecutor);
205
258
  // Coverage Domain Tools
@@ -240,6 +293,40 @@ class AgenticQEMCPServer {
240
293
  this.handlers.set(tools_js_1.TOOL_NAMES.QE_QUALITYGATE_VALIDATE_METRICS, phase3Handler);
241
294
  this.handlers.set(tools_js_1.TOOL_NAMES.QE_QUALITYGATE_GENERATE_REPORT, phase3Handler);
242
295
  }
296
+ /**
297
+ * Initialize Learning Event Listener (Phase 6 - Hybrid Approach)
298
+ *
299
+ * This sets up automatic learning persistence as a safety net when agents
300
+ * don't explicitly call MCP learning tools. It's part of our hybrid approach:
301
+ * - PRIMARY: Agents call MCP tools explicitly (Claude Flow's pattern)
302
+ * - FALLBACK: Event listener auto-stores (our innovation)
303
+ */
304
+ initializeLearningListener() {
305
+ try {
306
+ const storeExperienceHandler = this.handlers.get(tools_js_1.TOOL_NAMES.LEARNING_STORE_EXPERIENCE);
307
+ const storeQValueHandler = this.handlers.get(tools_js_1.TOOL_NAMES.LEARNING_STORE_QVALUE);
308
+ const storePatternHandler = this.handlers.get(tools_js_1.TOOL_NAMES.LEARNING_STORE_PATTERN);
309
+ if (!storeExperienceHandler || !storeQValueHandler || !storePatternHandler) {
310
+ console.warn('[AgenticQEMCPServer] Learning handlers not initialized - skipping event listener');
311
+ return;
312
+ }
313
+ this.learningListener = (0, LearningEventListener_js_1.initLearningEventListener)(this.eventBus, this.memory, {
314
+ storeExperienceHandler,
315
+ storeQValueHandler,
316
+ storePatternHandler
317
+ }, {
318
+ enabled: true,
319
+ autoStore: true
320
+ });
321
+ console.log('[AgenticQEMCPServer] ✅ Learning Event Listener initialized (Hybrid Approach)');
322
+ console.log('[AgenticQEMCPServer] PRIMARY: Explicit MCP tool calls');
323
+ console.log('[AgenticQEMCPServer] FALLBACK: Automatic event-based persistence');
324
+ }
325
+ catch (error) {
326
+ console.error('[AgenticQEMCPServer] Failed to initialize learning listener:', error);
327
+ this.learningListener = null;
328
+ }
329
+ }
243
330
  /**
244
331
  * Setup MCP request handlers
245
332
  */
@@ -260,6 +347,14 @@ class AgenticQEMCPServer {
260
347
  }
261
348
  // Get handler
262
349
  const handler = this.handlers.get(name);
350
+ // Phase 6 learning tools have dedicated handlers - call them directly
351
+ if (name === tools_js_1.TOOL_NAMES.LEARNING_STORE_EXPERIENCE ||
352
+ name === tools_js_1.TOOL_NAMES.LEARNING_STORE_QVALUE ||
353
+ name === tools_js_1.TOOL_NAMES.LEARNING_STORE_PATTERN ||
354
+ name === tools_js_1.TOOL_NAMES.LEARNING_QUERY) {
355
+ const result = await handler.handle(args || {});
356
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
357
+ }
263
358
  // Special handling for Phase 2 tools - route to specific methods
264
359
  if (name.startsWith('mcp__agentic_qe__learning_')) {
265
360
  const phase2Handler = handler;
@@ -600,6 +695,8 @@ class AgenticQEMCPServer {
600
695
  * Start the MCP server
601
696
  */
602
697
  async start(transport) {
698
+ // Initialize database before starting server
699
+ await this.memory.initialize();
603
700
  const serverTransport = transport || new stdio_js_1.StdioServerTransport();
604
701
  await this.server.connect(serverTransport);
605
702
  // Log to stderr to not interfere with MCP stdio protocol