agentic-qe 2.7.2 → 2.7.4

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 (132) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/README.md +1 -1
  3. package/dist/agents/AccessibilityAllyAgent.d.ts +0 -7
  4. package/dist/agents/AccessibilityAllyAgent.d.ts.map +1 -1
  5. package/dist/agents/AccessibilityAllyAgent.js +0 -15
  6. package/dist/agents/AccessibilityAllyAgent.js.map +1 -1
  7. package/dist/agents/ApiContractValidatorAgent.js +4 -4
  8. package/dist/agents/ApiContractValidatorAgent.js.map +1 -1
  9. package/dist/agents/BaseAgent.d.ts +2 -0
  10. package/dist/agents/BaseAgent.d.ts.map +1 -1
  11. package/dist/agents/BaseAgent.js +43 -41
  12. package/dist/agents/BaseAgent.js.map +1 -1
  13. package/dist/agents/CodeComplexityAnalyzerAgent.d.ts +0 -8
  14. package/dist/agents/CodeComplexityAnalyzerAgent.d.ts.map +1 -1
  15. package/dist/agents/CodeComplexityAnalyzerAgent.js +0 -15
  16. package/dist/agents/CodeComplexityAnalyzerAgent.js.map +1 -1
  17. package/dist/agents/CodeIntelligenceAgent.d.ts +0 -1
  18. package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -1
  19. package/dist/agents/CodeIntelligenceAgent.js +0 -2
  20. package/dist/agents/CodeIntelligenceAgent.js.map +1 -1
  21. package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
  22. package/dist/agents/DeploymentReadinessAgent.js +30 -30
  23. package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
  24. package/dist/agents/FlakyTestHunterAgent.d.ts +0 -10
  25. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
  26. package/dist/agents/FlakyTestHunterAgent.js +10 -20
  27. package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
  28. package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
  29. package/dist/agents/FleetCommanderAgent.js +28 -28
  30. package/dist/agents/FleetCommanderAgent.js.map +1 -1
  31. package/dist/agents/LearningAgent.js +1 -1
  32. package/dist/agents/LearningAgent.js.map +1 -1
  33. package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
  34. package/dist/agents/PerformanceTesterAgent.js +25 -25
  35. package/dist/agents/PerformanceTesterAgent.js.map +1 -1
  36. package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -1
  37. package/dist/agents/ProductionIntelligenceAgent.js +20 -20
  38. package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
  39. package/dist/agents/QXPartnerAgent.d.ts +0 -8
  40. package/dist/agents/QXPartnerAgent.d.ts.map +1 -1
  41. package/dist/agents/QXPartnerAgent.js +0 -15
  42. package/dist/agents/QXPartnerAgent.js.map +1 -1
  43. package/dist/agents/QualityAnalyzerAgent.d.ts +0 -7
  44. package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
  45. package/dist/agents/QualityAnalyzerAgent.js +0 -16
  46. package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
  47. package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -1
  48. package/dist/agents/RegressionRiskAnalyzerAgent.js +18 -18
  49. package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
  50. package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
  51. package/dist/agents/RequirementsValidatorAgent.js +21 -21
  52. package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
  53. package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
  54. package/dist/agents/SecurityScannerAgent.js +38 -38
  55. package/dist/agents/SecurityScannerAgent.js.map +1 -1
  56. package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
  57. package/dist/agents/TestDataArchitectAgent.js +29 -29
  58. package/dist/agents/TestDataArchitectAgent.js.map +1 -1
  59. package/dist/agents/TestExecutorAgent.d.ts +0 -7
  60. package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
  61. package/dist/agents/TestExecutorAgent.js +35 -51
  62. package/dist/agents/TestExecutorAgent.js.map +1 -1
  63. package/dist/agents/TestGeneratorAgent.d.ts +0 -7
  64. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
  65. package/dist/agents/TestGeneratorAgent.js +0 -16
  66. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  67. package/dist/agents/adapters/AgentLLMAdapter.d.ts.map +1 -1
  68. package/dist/agents/adapters/AgentLLMAdapter.js +5 -4
  69. package/dist/agents/adapters/AgentLLMAdapter.js.map +1 -1
  70. package/dist/agents/adapters/CoordinatorAdapter.d.ts.map +1 -1
  71. package/dist/agents/adapters/CoordinatorAdapter.js +2 -1
  72. package/dist/agents/adapters/CoordinatorAdapter.js.map +1 -1
  73. package/dist/agents/n8n/N8nAPIClient.d.ts.map +1 -1
  74. package/dist/agents/n8n/N8nAPIClient.js +3 -2
  75. package/dist/agents/n8n/N8nAPIClient.js.map +1 -1
  76. package/dist/agents/n8n/N8nAuditPersistence.d.ts.map +1 -1
  77. package/dist/agents/n8n/N8nAuditPersistence.js +2 -1
  78. package/dist/agents/n8n/N8nAuditPersistence.js.map +1 -1
  79. package/dist/agents/n8n/N8nBaseAgent.js +1 -1
  80. package/dist/agents/n8n/N8nBaseAgent.js.map +1 -1
  81. package/dist/agents/n8n/N8nComplianceValidatorAgent.js +1 -1
  82. package/dist/agents/n8n/N8nComplianceValidatorAgent.js.map +1 -1
  83. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js +1 -1
  84. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js.map +1 -1
  85. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js +1 -1
  86. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js.map +1 -1
  87. package/dist/agents/n8n/N8nSecurityAuditorAgent.js +1 -1
  88. package/dist/agents/n8n/N8nSecurityAuditorAgent.js.map +1 -1
  89. package/dist/agents/pool/AgentPool.d.ts.map +1 -1
  90. package/dist/agents/pool/AgentPool.js +2 -1
  91. package/dist/agents/pool/AgentPool.js.map +1 -1
  92. package/dist/agents/pool/QEAgentPoolFactory.d.ts.map +1 -1
  93. package/dist/agents/pool/QEAgentPoolFactory.js +2 -1
  94. package/dist/agents/pool/QEAgentPoolFactory.js.map +1 -1
  95. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  96. package/dist/learning/QLearning.d.ts +101 -1
  97. package/dist/learning/QLearning.d.ts.map +1 -1
  98. package/dist/learning/QLearning.js +168 -0
  99. package/dist/learning/QLearning.js.map +1 -1
  100. package/dist/mcp/server-instructions.d.ts +1 -1
  101. package/dist/mcp/server-instructions.js +1 -1
  102. package/dist/persistence/migrations/all-migrations.d.ts.map +1 -1
  103. package/dist/persistence/migrations/all-migrations.js +44 -1
  104. package/dist/persistence/migrations/all-migrations.js.map +1 -1
  105. package/dist/planning/GOAPPlanner.d.ts +42 -0
  106. package/dist/planning/GOAPPlanner.d.ts.map +1 -1
  107. package/dist/planning/GOAPPlanner.js +153 -1
  108. package/dist/planning/GOAPPlanner.js.map +1 -1
  109. package/dist/planning/PlanLearning.d.ts +184 -0
  110. package/dist/planning/PlanLearning.d.ts.map +1 -0
  111. package/dist/planning/PlanLearning.js +527 -0
  112. package/dist/planning/PlanLearning.js.map +1 -0
  113. package/dist/planning/PlanSimilarity.d.ts +148 -0
  114. package/dist/planning/PlanSimilarity.d.ts.map +1 -0
  115. package/dist/planning/PlanSimilarity.js +464 -0
  116. package/dist/planning/PlanSimilarity.js.map +1 -0
  117. package/dist/planning/execution/PlanExecutor.d.ts +101 -2
  118. package/dist/planning/execution/PlanExecutor.d.ts.map +1 -1
  119. package/dist/planning/execution/PlanExecutor.js +587 -14
  120. package/dist/planning/execution/PlanExecutor.js.map +1 -1
  121. package/dist/planning/index.d.ts +2 -0
  122. package/dist/planning/index.d.ts.map +1 -1
  123. package/dist/planning/index.js +15 -4
  124. package/dist/planning/index.js.map +1 -1
  125. package/dist/planning/integration/GOAPQualityGateIntegration.d.ts +6 -0
  126. package/dist/planning/integration/GOAPQualityGateIntegration.d.ts.map +1 -1
  127. package/dist/planning/integration/GOAPQualityGateIntegration.js +7 -0
  128. package/dist/planning/integration/GOAPQualityGateIntegration.js.map +1 -1
  129. package/dist/planning/types.d.ts +2 -0
  130. package/dist/planning/types.d.ts.map +1 -1
  131. package/dist/planning/types.js.map +1 -1
  132. package/package.json +1 -1
@@ -0,0 +1,527 @@
1
+ "use strict";
2
+ /**
3
+ * PlanLearning - Learning from Plan Executions
4
+ *
5
+ * Implements reinforcement learning integration for GOAP planning:
6
+ * - Updates action success rates based on execution outcomes
7
+ * - Adjusts action costs based on actual execution times
8
+ * - Provides GOAP state encoding for Q-Learning integration
9
+ * - Tracks plan reuse and learning metrics
10
+ *
11
+ * Integrates with:
12
+ * - PlanSimilarity for plan reuse
13
+ * - QLearning for state-action value updates
14
+ * - PlanExecutor for execution feedback
15
+ *
16
+ * @module planning/PlanLearning
17
+ * @version 1.0.0
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.PlanLearning = void 0;
21
+ const Logger_1 = require("../utils/Logger");
22
+ const SecureRandom_1 = require("../utils/SecureRandom");
23
+ const PlanSimilarity_1 = require("./PlanSimilarity");
24
+ const QLearning_1 = require("../learning/QLearning");
25
+ const DEFAULT_CONFIG = {
26
+ learningRate: 0.1,
27
+ costAdjustmentRate: 0.05,
28
+ minExecutionsForUpdate: 3,
29
+ successRateDecay: 0.99,
30
+ enableQLearning: true,
31
+ planReuseThreshold: 0.7
32
+ };
33
+ /**
34
+ * PlanLearning - Reinforcement learning integration for GOAP
35
+ */
36
+ class PlanLearning {
37
+ constructor(db, config = {}, qLearner) {
38
+ this.actionStatsCache = new Map();
39
+ this.schemaInitialized = false;
40
+ this.db = db;
41
+ this.logger = Logger_1.Logger.getInstance();
42
+ this.config = { ...DEFAULT_CONFIG, ...config };
43
+ this.similarity = new PlanSimilarity_1.PlanSimilarity(db);
44
+ if (config.enableQLearning !== false) {
45
+ this.qLearner = qLearner || new QLearning_1.QLearning({
46
+ learningRate: this.config.learningRate,
47
+ discountFactor: 0.95,
48
+ explorationRate: 0.2,
49
+ explorationDecay: 0.995,
50
+ minExplorationRate: 0.05,
51
+ useExperienceReplay: true,
52
+ replayBufferSize: 5000,
53
+ batchSize: 32
54
+ }, 'goap-plan-learner');
55
+ }
56
+ }
57
+ /**
58
+ * Initialize schema for learning tables
59
+ */
60
+ ensureSchema() {
61
+ if (this.schemaInitialized)
62
+ return;
63
+ // Action statistics table
64
+ this.db.exec(`
65
+ CREATE TABLE IF NOT EXISTS goap_action_stats (
66
+ action_id TEXT PRIMARY KEY,
67
+ execution_count INTEGER DEFAULT 0,
68
+ success_count INTEGER DEFAULT 0,
69
+ failure_count INTEGER DEFAULT 0,
70
+ success_rate REAL DEFAULT 1.0,
71
+ avg_execution_time_ms REAL DEFAULT 0,
72
+ avg_cost REAL DEFAULT 1.0,
73
+ last_executed DATETIME,
74
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
75
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
76
+ )
77
+ `);
78
+ // Learning history table
79
+ this.db.exec(`
80
+ CREATE TABLE IF NOT EXISTS goap_learning_history (
81
+ id TEXT PRIMARY KEY,
82
+ plan_id TEXT NOT NULL,
83
+ action_id TEXT NOT NULL,
84
+ state_before TEXT NOT NULL,
85
+ state_after TEXT NOT NULL,
86
+ success INTEGER NOT NULL,
87
+ execution_time_ms INTEGER NOT NULL,
88
+ reward REAL NOT NULL,
89
+ q_value_update REAL,
90
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
91
+ )
92
+ `);
93
+ // Indexes
94
+ try {
95
+ this.db.exec('CREATE INDEX IF NOT EXISTS idx_action_stats_success ON goap_action_stats (success_rate DESC)');
96
+ this.db.exec('CREATE INDEX IF NOT EXISTS idx_learning_history_plan ON goap_learning_history (plan_id)');
97
+ this.db.exec('CREATE INDEX IF NOT EXISTS idx_learning_history_action ON goap_learning_history (action_id)');
98
+ }
99
+ catch {
100
+ // Indexes may already exist
101
+ }
102
+ // Ensure similarity schema
103
+ this.similarity.ensureSchema();
104
+ this.schemaInitialized = true;
105
+ this.logger.debug('[PlanLearning] Schema initialized');
106
+ }
107
+ /**
108
+ * Encode WorldState to discretized GOAP state for Q-Learning
109
+ */
110
+ encodeWorldState(state) {
111
+ return {
112
+ coverageLevel: this.discretizeCoverage(state.coverage.line),
113
+ qualityLevel: this.discretizeQuality(state.quality.testsPassing),
114
+ securityLevel: this.discretizeSecurity(state.quality.securityScore),
115
+ fleetCapacity: this.discretizeFleet(state.fleet.availableAgents.length),
116
+ timeConstraint: this.discretizeTime(state.resources.timeRemaining),
117
+ riskLevel: state.context.riskLevel
118
+ };
119
+ }
120
+ /**
121
+ * Encode GOAP action for Q-Learning
122
+ */
123
+ encodeGOAPAction(action) {
124
+ return {
125
+ category: action.category,
126
+ agentType: action.agentType,
127
+ costLevel: this.discretizeCost(action.cost)
128
+ };
129
+ }
130
+ /**
131
+ * Convert GOAP state to Q-Learning TaskState
132
+ */
133
+ toTaskState(goapState) {
134
+ const complexityMap = { low: 0.3, medium: 0.5, high: 0.8, critical: 1.0 };
135
+ const resourceMap = { limited: 0.3, normal: 0.6, high: 0.9 };
136
+ const timeMap = { tight: 60000, normal: 300000, relaxed: 600000 };
137
+ return {
138
+ taskComplexity: complexityMap[goapState.riskLevel] ?? 0.5,
139
+ requiredCapabilities: [goapState.coverageLevel, goapState.qualityLevel, goapState.securityLevel],
140
+ contextFeatures: {
141
+ coverageLevel: goapState.coverageLevel,
142
+ qualityLevel: goapState.qualityLevel,
143
+ securityLevel: goapState.securityLevel,
144
+ fleetCapacity: goapState.fleetCapacity,
145
+ timeConstraint: goapState.timeConstraint,
146
+ riskLevel: goapState.riskLevel
147
+ },
148
+ previousAttempts: 0,
149
+ availableResources: resourceMap[goapState.fleetCapacity] ?? 0.6,
150
+ timeConstraint: timeMap[goapState.timeConstraint] ?? 300000
151
+ };
152
+ }
153
+ /**
154
+ * Convert GOAP action to Q-Learning AgentAction
155
+ */
156
+ toAgentAction(goapAction) {
157
+ return {
158
+ strategy: goapAction.category,
159
+ toolsUsed: [goapAction.agentType],
160
+ parallelization: goapAction.costLevel === 'high' ? 0.3 : 0.7,
161
+ retryPolicy: 'exponential',
162
+ resourceAllocation: goapAction.costLevel === 'low' ? 0.3 : goapAction.costLevel === 'medium' ? 0.5 : 0.8
163
+ };
164
+ }
165
+ // Discretization helpers
166
+ discretizeCoverage(coverage) {
167
+ if (coverage < 50)
168
+ return 'low';
169
+ if (coverage < 80)
170
+ return 'medium';
171
+ return 'high';
172
+ }
173
+ discretizeQuality(quality) {
174
+ if (quality < 70)
175
+ return 'low';
176
+ if (quality < 90)
177
+ return 'medium';
178
+ return 'high';
179
+ }
180
+ discretizeSecurity(score) {
181
+ if (score < 60)
182
+ return 'low';
183
+ if (score < 85)
184
+ return 'medium';
185
+ return 'high';
186
+ }
187
+ discretizeFleet(agents) {
188
+ if (agents < 3)
189
+ return 'limited';
190
+ if (agents < 7)
191
+ return 'normal';
192
+ return 'high';
193
+ }
194
+ discretizeTime(seconds) {
195
+ if (seconds < 300)
196
+ return 'tight'; // < 5 min
197
+ if (seconds < 1800)
198
+ return 'normal'; // < 30 min
199
+ return 'relaxed';
200
+ }
201
+ discretizeCost(cost) {
202
+ if (cost < 1.5)
203
+ return 'low';
204
+ if (cost < 3)
205
+ return 'medium';
206
+ return 'high';
207
+ }
208
+ /**
209
+ * Calculate reward for an action execution
210
+ */
211
+ calculateReward(executed) {
212
+ let reward = 0;
213
+ // Base reward for success/failure
214
+ reward += executed.success ? 1.0 : -0.5;
215
+ // Time efficiency bonus (faster = better)
216
+ const expectedTime = executed.action.durationEstimate || 60000;
217
+ const timeRatio = expectedTime / Math.max(executed.executionTimeMs, 1);
218
+ reward += Math.min(timeRatio - 1, 0.5) * 0.3; // Max 0.15 bonus for being 50% faster
219
+ // Cost efficiency
220
+ reward -= executed.action.cost * 0.1; // Penalize high-cost actions slightly
221
+ // Coverage improvement bonus
222
+ const coverageBefore = executed.stateBefore.coverage.line;
223
+ const coverageAfter = executed.stateAfter.coverage.line;
224
+ reward += (coverageAfter - coverageBefore) * 0.02; // 0.02 per % improvement
225
+ // Quality improvement bonus
226
+ const qualityBefore = executed.stateBefore.quality.testsPassing;
227
+ const qualityAfter = executed.stateAfter.quality.testsPassing;
228
+ reward += (qualityAfter - qualityBefore) * 0.02;
229
+ return Math.max(-1, Math.min(1, reward)); // Clamp to [-1, 1]
230
+ }
231
+ /**
232
+ * Learn from a plan execution
233
+ */
234
+ async learnFromExecution(plan, executedActions, success) {
235
+ this.ensureSchema();
236
+ const startTime = Date.now();
237
+ let actionsUpdated = 0;
238
+ let qValueUpdates = 0;
239
+ let totalSuccessRateChange = 0;
240
+ let totalCostChange = 0;
241
+ // Process each executed action
242
+ for (let i = 0; i < executedActions.length; i++) {
243
+ const executed = executedActions[i];
244
+ // Update action statistics
245
+ const statsChange = await this.updateActionStats(executed);
246
+ actionsUpdated++;
247
+ totalSuccessRateChange += statsChange.successRateChange;
248
+ totalCostChange += statsChange.costChange;
249
+ // Q-Learning update if enabled
250
+ if (this.qLearner) {
251
+ const goapStateBefore = this.encodeWorldState(executed.stateBefore);
252
+ const goapStateAfter = this.encodeWorldState(executed.stateAfter);
253
+ const goapAction = this.encodeGOAPAction(executed.action);
254
+ const experience = {
255
+ taskId: `${plan.id}-${i}`,
256
+ taskType: executed.action.category,
257
+ state: this.toTaskState(goapStateBefore),
258
+ action: this.toAgentAction(goapAction),
259
+ reward: this.calculateReward(executed),
260
+ nextState: this.toTaskState(goapStateAfter),
261
+ timestamp: new Date(),
262
+ agentId: executed.agentId || 'goap-executor',
263
+ done: i === executedActions.length - 1
264
+ };
265
+ this.qLearner.update(experience);
266
+ qValueUpdates++;
267
+ // Record learning history
268
+ this.recordLearningHistory(plan.id, executed, experience.reward);
269
+ }
270
+ }
271
+ // Store plan signature for future reuse
272
+ if (success && plan.initialState) {
273
+ this.similarity.storePlanSignature(plan.id, plan.goalConditions, plan.initialState, plan.actions, plan.totalCost);
274
+ }
275
+ const outcome = {
276
+ planId: plan.id,
277
+ success,
278
+ actionsUpdated,
279
+ qValueUpdates,
280
+ totalExecutionTimeMs: Date.now() - startTime,
281
+ learningMetrics: {
282
+ avgSuccessRateChange: actionsUpdated > 0 ? totalSuccessRateChange / actionsUpdated : 0,
283
+ avgCostChange: actionsUpdated > 0 ? totalCostChange / actionsUpdated : 0
284
+ }
285
+ };
286
+ this.logger.info('[PlanLearning] Learned from execution', {
287
+ planId: plan.id,
288
+ success,
289
+ actionsUpdated,
290
+ qValueUpdates,
291
+ elapsed: outcome.totalExecutionTimeMs
292
+ });
293
+ return outcome;
294
+ }
295
+ /**
296
+ * Update action statistics based on execution
297
+ */
298
+ async updateActionStats(executed) {
299
+ const actionId = executed.action.id;
300
+ // Get current stats
301
+ let stats = this.actionStatsCache.get(actionId);
302
+ if (!stats) {
303
+ const row = this.db.prepare(`
304
+ SELECT * FROM goap_action_stats WHERE action_id = ?
305
+ `).get(actionId);
306
+ if (row) {
307
+ stats = {
308
+ actionId: row.action_id,
309
+ executionCount: row.execution_count,
310
+ successCount: row.success_count,
311
+ failureCount: row.failure_count,
312
+ successRate: row.success_rate,
313
+ avgExecutionTimeMs: row.avg_execution_time_ms,
314
+ avgCost: row.avg_cost,
315
+ lastExecuted: new Date(row.last_executed)
316
+ };
317
+ }
318
+ else {
319
+ stats = {
320
+ actionId,
321
+ executionCount: 0,
322
+ successCount: 0,
323
+ failureCount: 0,
324
+ successRate: 1.0,
325
+ avgExecutionTimeMs: executed.action.durationEstimate || 60000,
326
+ avgCost: executed.action.cost,
327
+ lastExecuted: new Date()
328
+ };
329
+ }
330
+ }
331
+ const oldSuccessRate = stats.successRate;
332
+ const oldCost = stats.avgCost;
333
+ // Update statistics
334
+ stats.executionCount++;
335
+ if (executed.success) {
336
+ stats.successCount++;
337
+ }
338
+ else {
339
+ stats.failureCount++;
340
+ }
341
+ // Exponential moving average for success rate
342
+ const alpha = this.config.learningRate;
343
+ stats.successRate = stats.successRate * (1 - alpha) + (executed.success ? 1 : 0) * alpha;
344
+ // Update average execution time
345
+ const timeAlpha = this.config.costAdjustmentRate;
346
+ stats.avgExecutionTimeMs = stats.avgExecutionTimeMs * (1 - timeAlpha) +
347
+ executed.executionTimeMs * timeAlpha;
348
+ // Adjust cost based on actual execution time vs estimate
349
+ const expectedTime = executed.action.durationEstimate || 60000;
350
+ const timeRatio = executed.executionTimeMs / expectedTime;
351
+ const costAdjustment = (timeRatio - 1) * 0.1; // Adjust cost by 10% per time ratio deviation
352
+ stats.avgCost = Math.max(0.1, stats.avgCost + costAdjustment);
353
+ stats.lastExecuted = new Date();
354
+ // Persist to database
355
+ this.db.prepare(`
356
+ INSERT INTO goap_action_stats (
357
+ action_id, execution_count, success_count, failure_count,
358
+ success_rate, avg_execution_time_ms, avg_cost, last_executed, updated_at
359
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
360
+ ON CONFLICT(action_id) DO UPDATE SET
361
+ execution_count = excluded.execution_count,
362
+ success_count = excluded.success_count,
363
+ failure_count = excluded.failure_count,
364
+ success_rate = excluded.success_rate,
365
+ avg_execution_time_ms = excluded.avg_execution_time_ms,
366
+ avg_cost = excluded.avg_cost,
367
+ last_executed = excluded.last_executed,
368
+ updated_at = CURRENT_TIMESTAMP
369
+ `).run(stats.actionId, stats.executionCount, stats.successCount, stats.failureCount, stats.successRate, stats.avgExecutionTimeMs, stats.avgCost, stats.lastExecuted.toISOString());
370
+ // Update cache
371
+ this.actionStatsCache.set(actionId, stats);
372
+ // Also update the goap_actions table success_rate if enough executions
373
+ if (stats.executionCount >= this.config.minExecutionsForUpdate) {
374
+ this.db.prepare(`
375
+ UPDATE goap_actions
376
+ SET success_rate = ?, execution_count = ?, updated_at = CURRENT_TIMESTAMP
377
+ WHERE id = ?
378
+ `).run(stats.successRate, stats.executionCount, actionId);
379
+ }
380
+ return {
381
+ successRateChange: stats.successRate - oldSuccessRate,
382
+ costChange: stats.avgCost - oldCost
383
+ };
384
+ }
385
+ /**
386
+ * Record learning history entry
387
+ */
388
+ recordLearningHistory(planId, executed, reward) {
389
+ const id = `lh-${Date.now()}-${SecureRandom_1.SecureRandom.randomString(9)}`;
390
+ this.db.prepare(`
391
+ INSERT INTO goap_learning_history (
392
+ id, plan_id, action_id, state_before, state_after,
393
+ success, execution_time_ms, reward, created_at
394
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
395
+ `).run(id, planId, executed.action.id, JSON.stringify(executed.stateBefore), JSON.stringify(executed.stateAfter), executed.success ? 1 : 0, executed.executionTimeMs, reward);
396
+ }
397
+ /**
398
+ * Try to find a reusable plan for the given goal and state
399
+ */
400
+ async findReusablePlan(goalConditions, currentState) {
401
+ const similar = await this.similarity.findSimilarPlans(goalConditions, currentState, {
402
+ maxCandidates: 1,
403
+ minSimilarity: this.config.planReuseThreshold
404
+ });
405
+ if (similar.length > 0 && similar[0].goalMatch && similar[0].similarityScore >= this.config.planReuseThreshold) {
406
+ this.logger.info('[PlanLearning] Found reusable plan', {
407
+ planId: similar[0].planId,
408
+ similarity: similar[0].similarityScore,
409
+ goalMatch: similar[0].goalMatch
410
+ });
411
+ return similar[0];
412
+ }
413
+ return null;
414
+ }
415
+ /**
416
+ * Record plan reuse
417
+ */
418
+ recordPlanReuse(planId, success) {
419
+ this.similarity.recordPlanReuse(planId, success);
420
+ }
421
+ /**
422
+ * Get action statistics
423
+ */
424
+ getActionStats(actionId) {
425
+ // Check cache first
426
+ if (this.actionStatsCache.has(actionId)) {
427
+ return this.actionStatsCache.get(actionId);
428
+ }
429
+ // Load from database
430
+ const row = this.db.prepare(`
431
+ SELECT * FROM goap_action_stats WHERE action_id = ?
432
+ `).get(actionId);
433
+ if (!row)
434
+ return null;
435
+ const stats = {
436
+ actionId: row.action_id,
437
+ executionCount: row.execution_count,
438
+ successCount: row.success_count,
439
+ failureCount: row.failure_count,
440
+ successRate: row.success_rate,
441
+ avgExecutionTimeMs: row.avg_execution_time_ms,
442
+ avgCost: row.avg_cost,
443
+ lastExecuted: new Date(row.last_executed)
444
+ };
445
+ this.actionStatsCache.set(actionId, stats);
446
+ return stats;
447
+ }
448
+ /**
449
+ * Get all action statistics sorted by usage
450
+ */
451
+ getAllActionStats() {
452
+ this.ensureSchema();
453
+ const rows = this.db.prepare(`
454
+ SELECT * FROM goap_action_stats
455
+ ORDER BY execution_count DESC
456
+ `).all();
457
+ return rows.map(row => ({
458
+ actionId: row.action_id,
459
+ executionCount: row.execution_count,
460
+ successCount: row.success_count,
461
+ failureCount: row.failure_count,
462
+ successRate: row.success_rate,
463
+ avgExecutionTimeMs: row.avg_execution_time_ms,
464
+ avgCost: row.avg_cost,
465
+ lastExecuted: new Date(row.last_executed)
466
+ }));
467
+ }
468
+ /**
469
+ * Get plan reuse statistics
470
+ */
471
+ getPlanReuseStats() {
472
+ return this.similarity.getReuseStats();
473
+ }
474
+ /**
475
+ * Get Q-Learning statistics if enabled
476
+ */
477
+ getQLearningStats() {
478
+ if (!this.qLearner)
479
+ return null;
480
+ return this.qLearner.getDetailedStatistics();
481
+ }
482
+ /**
483
+ * Get comprehensive learning metrics
484
+ */
485
+ getLearningMetrics() {
486
+ this.ensureSchema();
487
+ // Action stats summary
488
+ const actionRow = this.db.prepare(`
489
+ SELECT COUNT(*) as total, AVG(success_rate) as avg_success
490
+ FROM goap_action_stats
491
+ `).get();
492
+ // Recent learning history
493
+ const historyRow = this.db.prepare(`
494
+ SELECT COUNT(*) as total, AVG(reward) as avg_reward
495
+ FROM goap_learning_history
496
+ WHERE created_at > datetime('now', '-24 hours')
497
+ `).get();
498
+ return {
499
+ actionStats: {
500
+ total: actionRow.total,
501
+ avgSuccessRate: actionRow.avg_success ?? 1.0
502
+ },
503
+ planReuse: this.getPlanReuseStats(),
504
+ qLearning: this.getQLearningStats(),
505
+ learningHistory: {
506
+ totalEntries: historyRow.total,
507
+ recentReward: historyRow.avg_reward ?? 0
508
+ }
509
+ };
510
+ }
511
+ /**
512
+ * Get the PlanSimilarity instance for direct access
513
+ */
514
+ getSimilarity() {
515
+ return this.similarity;
516
+ }
517
+ /**
518
+ * Clear all caches
519
+ */
520
+ clearCaches() {
521
+ this.actionStatsCache.clear();
522
+ this.similarity.clearCache();
523
+ this.logger.debug('[PlanLearning] Caches cleared');
524
+ }
525
+ }
526
+ exports.PlanLearning = PlanLearning;
527
+ //# sourceMappingURL=PlanLearning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanLearning.js","sourceRoot":"","sources":["../../src/planning/PlanLearning.ts"],"names":[],"mappings":"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"}