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.
- package/CHANGELOG.md +179 -0
- package/README.md +2 -2
- package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -1
- package/dist/agents/CodeIntelligenceAgent.js +7 -5
- package/dist/agents/CodeIntelligenceAgent.js.map +1 -1
- package/dist/cli/commands/knowledge-graph.d.ts.map +1 -1
- package/dist/cli/commands/knowledge-graph.js +4 -2
- package/dist/cli/commands/knowledge-graph.js.map +1 -1
- package/dist/cli/commands/migrate/index.d.ts +14 -0
- package/dist/cli/commands/migrate/index.d.ts.map +1 -0
- package/dist/cli/commands/migrate/index.js +283 -0
- package/dist/cli/commands/migrate/index.js.map +1 -0
- package/dist/cli/formatters/KGOutputFormatter.d.ts.map +1 -1
- package/dist/cli/formatters/KGOutputFormatter.js +15 -6
- package/dist/cli/formatters/KGOutputFormatter.js.map +1 -1
- package/dist/cli/index.js +3 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/database-init.d.ts.map +1 -1
- package/dist/cli/init/database-init.js +105 -0
- package/dist/cli/init/database-init.js.map +1 -1
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts +9 -3
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts.map +1 -1
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js +41 -3
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js.map +1 -1
- package/dist/code-intelligence/service/CodeIntelligenceService.js +1 -1
- package/dist/code-intelligence/service/CodeIntelligenceService.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/learning/QLearning.d.ts +110 -2
- package/dist/learning/QLearning.d.ts.map +1 -1
- package/dist/learning/QLearning.js +218 -1
- package/dist/learning/QLearning.js.map +1 -1
- package/dist/learning/metrics/LearningMetrics.d.ts +37 -0
- package/dist/learning/metrics/LearningMetrics.d.ts.map +1 -1
- package/dist/learning/metrics/LearningMetrics.js +73 -0
- package/dist/learning/metrics/LearningMetrics.js.map +1 -1
- package/dist/mcp/handlers/fleet-init.d.ts +10 -0
- package/dist/mcp/handlers/fleet-init.d.ts.map +1 -1
- package/dist/mcp/handlers/fleet-init.js +61 -0
- package/dist/mcp/handlers/fleet-init.js.map +1 -1
- package/dist/mcp/handlers/learning/learning-store-pattern.d.ts +13 -0
- package/dist/mcp/handlers/learning/learning-store-pattern.d.ts.map +1 -1
- package/dist/mcp/handlers/learning/learning-store-pattern.js +38 -0
- package/dist/mcp/handlers/learning/learning-store-pattern.js.map +1 -1
- package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts +89 -0
- package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts.map +1 -1
- package/dist/mcp/handlers/phase3/Phase3DomainTools.js +110 -1
- package/dist/mcp/handlers/phase3/Phase3DomainTools.js.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.d.ts +27 -1
- package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.js +188 -8
- package/dist/mcp/handlers/task-orchestrate.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/server.d.ts +6 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +92 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts +13 -0
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +66 -0
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts +55 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts.map +1 -1
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js +233 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js.map +1 -1
- package/dist/mcp/tools/qe/quality-gates/index.d.ts +5 -2
- package/dist/mcp/tools/qe/quality-gates/index.d.ts.map +1 -1
- package/dist/mcp/tools/qe/quality-gates/index.js +10 -1
- package/dist/mcp/tools/qe/quality-gates/index.js.map +1 -1
- package/dist/mcp/tools.d.ts +1 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +156 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/persistence/migrations/all-migrations.d.ts +18 -0
- package/dist/persistence/migrations/all-migrations.d.ts.map +1 -0
- package/dist/persistence/migrations/all-migrations.js +624 -0
- package/dist/persistence/migrations/all-migrations.js.map +1 -0
- package/dist/persistence/migrations/index.d.ts +110 -0
- package/dist/persistence/migrations/index.d.ts.map +1 -0
- package/dist/persistence/migrations/index.js +303 -0
- package/dist/persistence/migrations/index.js.map +1 -0
- package/dist/planning/GOAPPlanner.d.ts +170 -0
- package/dist/planning/GOAPPlanner.d.ts.map +1 -0
- package/dist/planning/GOAPPlanner.js +781 -0
- package/dist/planning/GOAPPlanner.js.map +1 -0
- package/dist/planning/PlanLearning.d.ts +184 -0
- package/dist/planning/PlanLearning.d.ts.map +1 -0
- package/dist/planning/PlanLearning.js +526 -0
- package/dist/planning/PlanLearning.js.map +1 -0
- package/dist/planning/PlanSimilarity.d.ts +148 -0
- package/dist/planning/PlanSimilarity.d.ts.map +1 -0
- package/dist/planning/PlanSimilarity.js +463 -0
- package/dist/planning/PlanSimilarity.js.map +1 -0
- package/dist/planning/WorldStateBuilder.d.ts +150 -0
- package/dist/planning/WorldStateBuilder.d.ts.map +1 -0
- package/dist/planning/WorldStateBuilder.js +267 -0
- package/dist/planning/WorldStateBuilder.js.map +1 -0
- package/dist/planning/actions/fleet-actions.d.ts +78 -0
- package/dist/planning/actions/fleet-actions.d.ts.map +1 -0
- package/dist/planning/actions/fleet-actions.js +329 -0
- package/dist/planning/actions/fleet-actions.js.map +1 -0
- package/dist/planning/actions/index.d.ts +61 -0
- package/dist/planning/actions/index.d.ts.map +1 -0
- package/dist/planning/actions/index.js +159 -0
- package/dist/planning/actions/index.js.map +1 -0
- package/dist/planning/actions/orchestration-actions.d.ts +61 -0
- package/dist/planning/actions/orchestration-actions.d.ts.map +1 -0
- package/dist/planning/actions/orchestration-actions.js +395 -0
- package/dist/planning/actions/orchestration-actions.js.map +1 -0
- package/dist/planning/actions/quality-gate-actions.d.ts +160 -0
- package/dist/planning/actions/quality-gate-actions.d.ts.map +1 -0
- package/dist/planning/actions/quality-gate-actions.js +639 -0
- package/dist/planning/actions/quality-gate-actions.js.map +1 -0
- package/dist/planning/actions/test-strategy-actions.d.ts +70 -0
- package/dist/planning/actions/test-strategy-actions.d.ts.map +1 -0
- package/dist/planning/actions/test-strategy-actions.js +278 -0
- package/dist/planning/actions/test-strategy-actions.js.map +1 -0
- package/dist/planning/execution/PlanExecutor.d.ts +223 -0
- package/dist/planning/execution/PlanExecutor.d.ts.map +1 -0
- package/dist/planning/execution/PlanExecutor.js +978 -0
- package/dist/planning/execution/PlanExecutor.js.map +1 -0
- package/dist/planning/execution/index.d.ts +12 -0
- package/dist/planning/execution/index.d.ts.map +1 -0
- package/dist/planning/execution/index.js +18 -0
- package/dist/planning/execution/index.js.map +1 -0
- package/dist/planning/goals/TaskWorkflowGoals.d.ts +67 -0
- package/dist/planning/goals/TaskWorkflowGoals.d.ts.map +1 -0
- package/dist/planning/goals/TaskWorkflowGoals.js +208 -0
- package/dist/planning/goals/TaskWorkflowGoals.js.map +1 -0
- package/dist/planning/goals/index.d.ts +10 -0
- package/dist/planning/goals/index.d.ts.map +1 -0
- package/dist/planning/goals/index.js +19 -0
- package/dist/planning/goals/index.js.map +1 -0
- package/dist/planning/index.d.ts +36 -0
- package/dist/planning/index.d.ts.map +1 -0
- package/dist/planning/index.js +187 -0
- package/dist/planning/index.js.map +1 -0
- package/dist/planning/integration/GOAPQualityGateIntegration.d.ts +235 -0
- package/dist/planning/integration/GOAPQualityGateIntegration.d.ts.map +1 -0
- package/dist/planning/integration/GOAPQualityGateIntegration.js +589 -0
- package/dist/planning/integration/GOAPQualityGateIntegration.js.map +1 -0
- package/dist/planning/integration/GOAPTaskOrchestration.d.ts +165 -0
- package/dist/planning/integration/GOAPTaskOrchestration.d.ts.map +1 -0
- package/dist/planning/integration/GOAPTaskOrchestration.js +490 -0
- package/dist/planning/integration/GOAPTaskOrchestration.js.map +1 -0
- package/dist/planning/integration/index.d.ts +14 -0
- package/dist/planning/integration/index.d.ts.map +1 -0
- package/dist/planning/integration/index.js +23 -0
- package/dist/planning/integration/index.js.map +1 -0
- package/dist/planning/types.d.ts +266 -0
- package/dist/planning/types.d.ts.map +1 -0
- package/dist/planning/types.js +63 -0
- package/dist/planning/types.js.map +1 -0
- package/dist/utils/Database.d.ts.map +1 -1
- package/dist/utils/Database.js +81 -2
- package/dist/utils/Database.js.map +1 -1
- 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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"}
|