agentic-qe 2.7.1 → 2.7.3

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