agentic-qe 2.7.1 → 2.7.2

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 (149) hide show
  1. package/CHANGELOG.md +105 -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 +9 -1
  29. package/dist/learning/QLearning.d.ts.map +1 -1
  30. package/dist/learning/QLearning.js +50 -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 +128 -0
  83. package/dist/planning/GOAPPlanner.d.ts.map +1 -0
  84. package/dist/planning/GOAPPlanner.js +630 -0
  85. package/dist/planning/GOAPPlanner.js.map +1 -0
  86. package/dist/planning/WorldStateBuilder.d.ts +150 -0
  87. package/dist/planning/WorldStateBuilder.d.ts.map +1 -0
  88. package/dist/planning/WorldStateBuilder.js +267 -0
  89. package/dist/planning/WorldStateBuilder.js.map +1 -0
  90. package/dist/planning/actions/fleet-actions.d.ts +78 -0
  91. package/dist/planning/actions/fleet-actions.d.ts.map +1 -0
  92. package/dist/planning/actions/fleet-actions.js +329 -0
  93. package/dist/planning/actions/fleet-actions.js.map +1 -0
  94. package/dist/planning/actions/index.d.ts +61 -0
  95. package/dist/planning/actions/index.d.ts.map +1 -0
  96. package/dist/planning/actions/index.js +159 -0
  97. package/dist/planning/actions/index.js.map +1 -0
  98. package/dist/planning/actions/orchestration-actions.d.ts +61 -0
  99. package/dist/planning/actions/orchestration-actions.d.ts.map +1 -0
  100. package/dist/planning/actions/orchestration-actions.js +395 -0
  101. package/dist/planning/actions/orchestration-actions.js.map +1 -0
  102. package/dist/planning/actions/quality-gate-actions.d.ts +160 -0
  103. package/dist/planning/actions/quality-gate-actions.d.ts.map +1 -0
  104. package/dist/planning/actions/quality-gate-actions.js +639 -0
  105. package/dist/planning/actions/quality-gate-actions.js.map +1 -0
  106. package/dist/planning/actions/test-strategy-actions.d.ts +70 -0
  107. package/dist/planning/actions/test-strategy-actions.d.ts.map +1 -0
  108. package/dist/planning/actions/test-strategy-actions.js +278 -0
  109. package/dist/planning/actions/test-strategy-actions.js.map +1 -0
  110. package/dist/planning/execution/PlanExecutor.d.ts +124 -0
  111. package/dist/planning/execution/PlanExecutor.d.ts.map +1 -0
  112. package/dist/planning/execution/PlanExecutor.js +405 -0
  113. package/dist/planning/execution/PlanExecutor.js.map +1 -0
  114. package/dist/planning/execution/index.d.ts +12 -0
  115. package/dist/planning/execution/index.d.ts.map +1 -0
  116. package/dist/planning/execution/index.js +18 -0
  117. package/dist/planning/execution/index.js.map +1 -0
  118. package/dist/planning/goals/TaskWorkflowGoals.d.ts +67 -0
  119. package/dist/planning/goals/TaskWorkflowGoals.d.ts.map +1 -0
  120. package/dist/planning/goals/TaskWorkflowGoals.js +208 -0
  121. package/dist/planning/goals/TaskWorkflowGoals.js.map +1 -0
  122. package/dist/planning/goals/index.d.ts +10 -0
  123. package/dist/planning/goals/index.d.ts.map +1 -0
  124. package/dist/planning/goals/index.js +19 -0
  125. package/dist/planning/goals/index.js.map +1 -0
  126. package/dist/planning/index.d.ts +34 -0
  127. package/dist/planning/index.d.ts.map +1 -0
  128. package/dist/planning/index.js +176 -0
  129. package/dist/planning/index.js.map +1 -0
  130. package/dist/planning/integration/GOAPQualityGateIntegration.d.ts +229 -0
  131. package/dist/planning/integration/GOAPQualityGateIntegration.d.ts.map +1 -0
  132. package/dist/planning/integration/GOAPQualityGateIntegration.js +582 -0
  133. package/dist/planning/integration/GOAPQualityGateIntegration.js.map +1 -0
  134. package/dist/planning/integration/GOAPTaskOrchestration.d.ts +165 -0
  135. package/dist/planning/integration/GOAPTaskOrchestration.d.ts.map +1 -0
  136. package/dist/planning/integration/GOAPTaskOrchestration.js +490 -0
  137. package/dist/planning/integration/GOAPTaskOrchestration.js.map +1 -0
  138. package/dist/planning/integration/index.d.ts +14 -0
  139. package/dist/planning/integration/index.d.ts.map +1 -0
  140. package/dist/planning/integration/index.js +23 -0
  141. package/dist/planning/integration/index.js.map +1 -0
  142. package/dist/planning/types.d.ts +264 -0
  143. package/dist/planning/types.d.ts.map +1 -0
  144. package/dist/planning/types.js +63 -0
  145. package/dist/planning/types.js.map +1 -0
  146. package/dist/utils/Database.d.ts.map +1 -1
  147. package/dist/utils/Database.js +81 -2
  148. package/dist/utils/Database.js.map +1 -1
  149. package/package.json +6 -3
@@ -0,0 +1,582 @@
1
+ "use strict";
2
+ /**
3
+ * GOAP Quality Gate Integration
4
+ *
5
+ * Bridges GOAP planning with quality gate evaluation:
6
+ * - Converts quality metrics to WorldState
7
+ * - Generates remediation plans on gate failure
8
+ * - Tracks plan execution and success rates
9
+ * - Provides alternative paths when primary actions fail
10
+ *
11
+ * @module planning/integration/GOAPQualityGateIntegration
12
+ * @version 1.0.0
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.GOAPQualityGateIntegration = exports.QUALITY_GATE_GOALS = void 0;
16
+ exports.createQualityGateIntegration = createQualityGateIntegration;
17
+ const GOAPPlanner_1 = require("../GOAPPlanner");
18
+ const WorldStateBuilder_1 = require("../WorldStateBuilder");
19
+ const quality_gate_actions_1 = require("../actions/quality-gate-actions");
20
+ const test_strategy_actions_1 = require("../actions/test-strategy-actions");
21
+ const fleet_actions_1 = require("../actions/fleet-actions");
22
+ const Logger_1 = require("../../utils/Logger");
23
+ /**
24
+ * Goal definitions for quality gate scenarios
25
+ */
26
+ exports.QUALITY_GATE_GOALS = {
27
+ /**
28
+ * Pass all quality gates with standard thresholds
29
+ */
30
+ PASS_QUALITY_GATE: {
31
+ id: 'goal-pass-quality-gate',
32
+ name: 'Pass Quality Gate',
33
+ conditions: {
34
+ 'quality.testsPassing': { gte: 95 },
35
+ 'coverage.line': { gte: 80 },
36
+ 'quality.securityScore': { gte: 70 },
37
+ 'quality.performanceScore': { gte: 70 },
38
+ 'quality.gateStatus': { eq: 'passed' }
39
+ },
40
+ priority: 5
41
+ },
42
+ /**
43
+ * Achieve minimum viable quality for hotfix
44
+ */
45
+ HOTFIX_QUALITY: {
46
+ id: 'goal-hotfix-quality',
47
+ name: 'Hotfix Quality',
48
+ conditions: {
49
+ 'quality.testsPassing': { gte: 90 },
50
+ 'quality.securityScore': { gte: 80 },
51
+ 'quality.smokeTestsPassing': { eq: true }
52
+ },
53
+ priority: 4
54
+ },
55
+ /**
56
+ * Fix test failures to reach passing threshold
57
+ */
58
+ TEST_SUCCESS: {
59
+ id: 'goal-test-success',
60
+ name: 'Test Success',
61
+ conditions: {
62
+ 'quality.testsPassing': { gte: 95 }
63
+ },
64
+ priority: 3
65
+ },
66
+ /**
67
+ * Improve coverage to target threshold
68
+ */
69
+ COVERAGE_TARGET: {
70
+ id: 'goal-coverage-target',
71
+ name: 'Coverage Target',
72
+ conditions: {
73
+ 'coverage.line': { gte: 80 },
74
+ 'coverage.branch': { gte: 70 }
75
+ },
76
+ priority: 3
77
+ },
78
+ /**
79
+ * Resolve security vulnerabilities
80
+ */
81
+ SECURITY_CLEAR: {
82
+ id: 'goal-security-clear',
83
+ name: 'Security Clear',
84
+ conditions: {
85
+ 'quality.securityScore': { gte: 90 }
86
+ },
87
+ priority: 5
88
+ },
89
+ /**
90
+ * Performance meets SLA
91
+ */
92
+ PERFORMANCE_SLA: {
93
+ id: 'goal-performance-sla',
94
+ name: 'Performance SLA',
95
+ conditions: {
96
+ 'quality.performanceScore': { gte: 85 }
97
+ },
98
+ priority: 4
99
+ }
100
+ };
101
+ /**
102
+ * GOAP Quality Gate Integration
103
+ */
104
+ class GOAPQualityGateIntegration {
105
+ constructor(db) {
106
+ this.initialized = false;
107
+ this.db = db;
108
+ this.planner = new GOAPPlanner_1.GOAPPlanner(db);
109
+ this.logger = Logger_1.Logger.getInstance();
110
+ }
111
+ /**
112
+ * Initialize planner with quality gate actions
113
+ */
114
+ async initialize() {
115
+ if (this.initialized)
116
+ return;
117
+ // Register all relevant actions
118
+ this.planner.addActions(quality_gate_actions_1.qualityGateActions);
119
+ this.planner.addActions(test_strategy_actions_1.testStrategyActions);
120
+ this.planner.addActions(fleet_actions_1.fleetActions.filter(a => ['fleet-spawn-test-gen', 'fleet-spawn-coverage', 'fleet-spawn-security'].includes(a.id)));
121
+ this.initialized = true;
122
+ this.logger.info('[GOAPQualityGate] Initialized with actions', {
123
+ totalActions: this.planner.getActionLibrary().length
124
+ });
125
+ }
126
+ /**
127
+ * Close database connection and cleanup resources
128
+ * Call this in tests to prevent memory leaks
129
+ */
130
+ close() {
131
+ try {
132
+ this.db.close();
133
+ }
134
+ catch {
135
+ // Ignore close errors (may already be closed)
136
+ }
137
+ this.initialized = false;
138
+ }
139
+ /**
140
+ * Convert quality gate metrics to GOAP WorldState
141
+ */
142
+ buildWorldState(metrics, context) {
143
+ const qualityInput = {
144
+ coverage: {
145
+ line: metrics.coverage?.linePercentage ?? metrics.coverage?.overallPercentage ?? 0,
146
+ branch: metrics.coverage?.branchPercentage ?? 0,
147
+ function: metrics.coverage?.functionPercentage ?? 0
148
+ },
149
+ testsPassing: metrics.testResults?.passed,
150
+ testsTotal: metrics.testResults?.total,
151
+ securityVulnerabilities: {
152
+ critical: metrics.security?.summary?.critical ?? 0,
153
+ high: metrics.security?.summary?.high ?? 0,
154
+ medium: metrics.security?.summary?.medium ?? 0,
155
+ low: metrics.security?.summary?.low ?? 0
156
+ },
157
+ performanceMetrics: {
158
+ p95Latency: metrics.performance?.p95Latency,
159
+ throughput: metrics.performance?.throughput,
160
+ errorRate: metrics.performance?.errorRate
161
+ },
162
+ technicalDebt: {
163
+ days: metrics.codeQuality?.technicalDebtDays ?? 0
164
+ }
165
+ };
166
+ const contextInput = {
167
+ environment: context.environment,
168
+ riskLevel: this.mapCriticality(context.criticality),
169
+ changedFiles: context.changedFiles,
170
+ previousFailures: context.previousFailures ?? 0,
171
+ projectId: context.projectId
172
+ };
173
+ const builder = new WorldStateBuilder_1.WorldStateBuilder()
174
+ .withQualityMetrics(qualityInput)
175
+ .withContext(contextInput)
176
+ .withResources({
177
+ timeRemaining: context.timeRemaining ?? 3600,
178
+ parallelSlots: 4
179
+ });
180
+ // Add available agents if specified
181
+ if (context.availableAgents && context.availableAgents.length > 0) {
182
+ builder.withFleetStatus({
183
+ activeAgents: context.availableAgents.length,
184
+ availableAgents: context.availableAgents
185
+ });
186
+ }
187
+ else {
188
+ // Default available agents
189
+ builder.withFleetStatus({
190
+ activeAgents: 5,
191
+ availableAgents: [
192
+ 'qe-test-executor',
193
+ 'qe-test-generator',
194
+ 'qe-coverage-analyzer',
195
+ 'qe-security-scanner',
196
+ 'qe-performance-tester'
197
+ ]
198
+ });
199
+ }
200
+ return builder.build();
201
+ }
202
+ /**
203
+ * Generate remediation plan for quality gate failure
204
+ */
205
+ async generateRemediationPlan(metrics, context, targetGoal) {
206
+ await this.initialize();
207
+ const worldState = this.buildWorldState(metrics, context);
208
+ const goal = exports.QUALITY_GATE_GOALS[targetGoal ?? 'PASS_QUALITY_GATE'];
209
+ this.logger.info('[GOAPQualityGate] Generating remediation plan', {
210
+ goal: goal.name,
211
+ currentCoverage: worldState.coverage.line,
212
+ targetConditions: Object.keys(goal.conditions)
213
+ });
214
+ // Define constraints based on context and goal type
215
+ const constraints = {
216
+ maxIterations: 3000,
217
+ timeoutMs: 8000,
218
+ maxPlanLength: 10
219
+ };
220
+ // Add goal-specific category preferences for faster search
221
+ if (targetGoal === 'SECURITY_CLEAR') {
222
+ // Focus on security actions for security goals
223
+ constraints.allowedCategories = ['security', 'process'];
224
+ }
225
+ else if (targetGoal === 'COVERAGE_TARGET') {
226
+ // Focus on test actions for coverage goals
227
+ constraints.allowedCategories = ['test', 'analysis', 'process'];
228
+ }
229
+ else if (targetGoal === 'PERFORMANCE_SLA') {
230
+ // Focus on performance actions
231
+ constraints.allowedCategories = ['performance', 'analysis', 'process'];
232
+ }
233
+ // PASS_QUALITY_GATE needs all categories
234
+ // Restrict actions for production
235
+ if (context.environment === 'production') {
236
+ constraints.allowedCategories = ['test', 'security', 'analysis', 'process'];
237
+ // Exclude risky actions in production
238
+ constraints.excludedActions = ['qg-fix-critical-vulns'];
239
+ }
240
+ try {
241
+ const plan = await this.planner.findPlan(worldState, goal.conditions, constraints);
242
+ if (!plan) {
243
+ this.logger.warn('[GOAPQualityGate] No remediation plan found');
244
+ return null;
245
+ }
246
+ // Find alternative paths
247
+ const alternatives = await this.findAlternativePaths(worldState, goal.conditions, plan, constraints);
248
+ // Calculate success probability
249
+ const successProbability = this.calculateSuccessProbability(plan);
250
+ // Persist plan
251
+ await this.persistPlan(plan, context, goal.id);
252
+ return this.formatRemediationPlan(plan, alternatives, successProbability);
253
+ }
254
+ catch (error) {
255
+ this.logger.error('[GOAPQualityGate] Failed to generate remediation plan', { error });
256
+ return null;
257
+ }
258
+ }
259
+ /**
260
+ * Find alternative remediation paths
261
+ *
262
+ * STRATEGY: With flag-based actions, we have two types:
263
+ * 1. MEASUREMENT actions (set flags like testsMeasured=true) - MUST run, cannot be excluded
264
+ * 2. IMPROVEMENT actions (increase metrics) - CAN be swapped for alternatives
265
+ *
266
+ * We find diverse alternatives by:
267
+ * - Keeping measurement actions fixed (they're prerequisites)
268
+ * - Swapping improvement actions for alternatives with similar effects
269
+ */
270
+ async findAlternativePaths(worldState, goalConditions, primaryPlan, constraints) {
271
+ const alternatives = [];
272
+ const seenPlanKeys = new Set();
273
+ // Identify measurement vs improvement actions in primary plan
274
+ const measurementActionIds = new Set();
275
+ const improvementActions = [];
276
+ for (const action of primaryPlan.actions) {
277
+ // Check if this is a measurement action (effects set boolean flags)
278
+ const isMeasurement = Object.entries(action.effects).some(([key, effect]) => {
279
+ const effectObj = effect;
280
+ // Measurement actions set boolean flags like testsMeasured, securityMeasured
281
+ return effectObj?.set === true && (key.includes('Measured') ||
282
+ key.includes('measured') ||
283
+ key.includes('Tested') ||
284
+ key.includes('Evaluated') ||
285
+ key.includes('Analyzed'));
286
+ });
287
+ if (isMeasurement) {
288
+ measurementActionIds.add(action.id);
289
+ }
290
+ else {
291
+ improvementActions.push(action);
292
+ }
293
+ }
294
+ // Helper to generate plan key for deduplication
295
+ const getPlanKey = (actions) => actions.map(a => a.id).sort().join(',');
296
+ // Add primary plan to seen
297
+ seenPlanKeys.add(getPlanKey(primaryPlan.actions));
298
+ // Helper to add unique alternative
299
+ const addAlternative = (altPlan, description) => {
300
+ const planKey = getPlanKey(altPlan.actions);
301
+ if (seenPlanKeys.has(planKey))
302
+ return false;
303
+ // Check for actual action diversity (not just order)
304
+ const primaryIds = new Set(primaryPlan.actions.map(a => a.id));
305
+ const altIds = altPlan.actions.map(a => a.id);
306
+ const differentActions = altIds.filter(id => !primaryIds.has(id));
307
+ if (differentActions.length === 0 && altIds.length === primaryPlan.actions.length) {
308
+ return false; // No real difference
309
+ }
310
+ seenPlanKeys.add(planKey);
311
+ alternatives.push({
312
+ planId: altPlan.id,
313
+ actions: altIds,
314
+ totalCost: altPlan.totalCost,
315
+ estimatedDuration: altPlan.estimatedDuration,
316
+ differenceFromPrimary: description
317
+ });
318
+ return true;
319
+ };
320
+ // Strategy 1: For each improvement action, exclude it to force an alternative
321
+ // Keep measurement actions (they're prerequisites that MUST run)
322
+ for (const improvementAction of improvementActions) {
323
+ if (alternatives.length >= 3)
324
+ break;
325
+ const altConstraints = {
326
+ ...constraints,
327
+ excludedActions: [
328
+ ...(constraints.excludedActions ?? []),
329
+ improvementAction.id
330
+ ],
331
+ maxIterations: 1200
332
+ };
333
+ try {
334
+ const altPlan = await this.planner.findPlan(worldState, goalConditions, altConstraints);
335
+ if (altPlan && altPlan.actions.length > 0) {
336
+ // Find what replaced the excluded action
337
+ const newActions = altPlan.actions
338
+ .filter(a => !measurementActionIds.has(a.id))
339
+ .filter(a => !primaryPlan.actions.some(pa => pa.id === a.id));
340
+ const newActionNames = newActions.map(a => a.name).join(', ') || 'different approach';
341
+ addAlternative(altPlan, `Uses ${newActionNames} instead of ${improvementAction.name}`);
342
+ }
343
+ }
344
+ catch {
345
+ // Ignore failed searches
346
+ }
347
+ }
348
+ // Strategy 2: Find alternatives by category
349
+ // Group improvement actions by what they improve (category + effect target)
350
+ if (alternatives.length < 3) {
351
+ const effectGroups = new Map();
352
+ for (const action of this.planner.getActionLibrary()) {
353
+ // Skip measurement actions and actions already used
354
+ if (measurementActionIds.has(action.id))
355
+ continue;
356
+ if (improvementActions.some(ia => ia.id === action.id))
357
+ continue;
358
+ // Group by primary effect target
359
+ for (const [key, effect] of Object.entries(action.effects)) {
360
+ const effectObj = effect;
361
+ if (effectObj?.increase !== undefined) {
362
+ const effectKey = key; // e.g., 'coverage.line', 'quality.testsPassing'
363
+ if (!effectGroups.has(effectKey)) {
364
+ effectGroups.set(effectKey, []);
365
+ }
366
+ effectGroups.get(effectKey).push(action);
367
+ }
368
+ }
369
+ }
370
+ // For each improvement action in primary plan, find alternatives that improve same metric
371
+ for (const improvementAction of improvementActions) {
372
+ if (alternatives.length >= 3)
373
+ break;
374
+ // Find what this action improves
375
+ for (const [key, effect] of Object.entries(improvementAction.effects)) {
376
+ const effectObj = effect;
377
+ if (effectObj?.increase !== undefined) {
378
+ const alternativeActions = effectGroups.get(key) ?? [];
379
+ for (const altAction of alternativeActions) {
380
+ if (alternatives.length >= 3)
381
+ break;
382
+ // Exclude primary plan's improvement actions, keep this alternative
383
+ const excludeIds = improvementActions
384
+ .filter(ia => ia.id !== altAction.id)
385
+ .map(ia => ia.id);
386
+ const altConstraints = {
387
+ ...constraints,
388
+ excludedActions: [...(constraints.excludedActions ?? []), ...excludeIds],
389
+ maxIterations: 1000
390
+ };
391
+ try {
392
+ const altPlan = await this.planner.findPlan(worldState, goalConditions, altConstraints);
393
+ if (altPlan && altPlan.actions.length > 0) {
394
+ addAlternative(altPlan, `Uses ${altAction.name} to improve ${key}`);
395
+ }
396
+ }
397
+ catch {
398
+ // Ignore
399
+ }
400
+ }
401
+ }
402
+ }
403
+ }
404
+ }
405
+ // Strategy 3: Exclude all improvement actions from primary + alternatives to find new approaches
406
+ if (alternatives.length < 3 && alternatives.length > 0) {
407
+ const allUsedImprovements = new Set();
408
+ improvementActions.forEach(a => allUsedImprovements.add(a.id));
409
+ alternatives.forEach(alt => alt.actions.forEach(id => {
410
+ if (!measurementActionIds.has(id))
411
+ allUsedImprovements.add(id);
412
+ }));
413
+ const altConstraints = {
414
+ ...constraints,
415
+ excludedActions: [...(constraints.excludedActions ?? []), ...allUsedImprovements],
416
+ maxIterations: 1500
417
+ };
418
+ try {
419
+ const altPlan = await this.planner.findPlan(worldState, goalConditions, altConstraints);
420
+ if (altPlan && altPlan.actions.length > 0) {
421
+ addAlternative(altPlan, 'Completely different improvement approach');
422
+ }
423
+ }
424
+ catch {
425
+ // Ignore
426
+ }
427
+ }
428
+ return alternatives;
429
+ }
430
+ /**
431
+ * Calculate success probability for a plan
432
+ */
433
+ calculateSuccessProbability(plan) {
434
+ if (plan.actions.length === 0)
435
+ return 0;
436
+ // Multiply individual action success rates
437
+ let probability = 1.0;
438
+ for (const action of plan.actions) {
439
+ probability *= action.successRate ?? 0.9;
440
+ }
441
+ return Math.round(probability * 100) / 100;
442
+ }
443
+ /**
444
+ * Persist plan to database
445
+ */
446
+ async persistPlan(plan, context, goalId) {
447
+ try {
448
+ const actionSequence = JSON.stringify(plan.actions.map(a => a.id));
449
+ this.db.prepare(`
450
+ INSERT INTO goap_plans (
451
+ id, goal_id, sequence, total_cost, created_at,
452
+ initial_state, goal_state, action_sequence, estimated_duration, status
453
+ ) VALUES (?, ?, ?, ?, strftime('%s', 'now'), ?, ?, ?, ?, 'pending')
454
+ `).run(plan.id, goalId, actionSequence, // sequence (required NOT NULL)
455
+ Math.round(plan.totalCost), // total_cost as INTEGER
456
+ JSON.stringify({ projectId: context.projectId, buildId: context.buildId }), JSON.stringify(plan.goalConditions), actionSequence, // action_sequence (same as sequence)
457
+ Math.round(plan.estimatedDuration));
458
+ this.logger.debug('[GOAPQualityGate] Plan persisted', { planId: plan.id });
459
+ }
460
+ catch (error) {
461
+ this.logger.warn('[GOAPQualityGate] Failed to persist plan', { error });
462
+ }
463
+ }
464
+ /**
465
+ * Format plan for external consumption
466
+ */
467
+ formatRemediationPlan(plan, alternatives, successProbability) {
468
+ return {
469
+ planId: plan.id,
470
+ actions: plan.actions.map(a => ({
471
+ id: a.id,
472
+ name: a.name,
473
+ description: a.description,
474
+ agentType: a.agentType,
475
+ category: a.category,
476
+ estimatedDuration: a.durationEstimate ?? 60000,
477
+ successRate: a.successRate ?? 0.9,
478
+ effects: Object.keys(a.effects)
479
+ })),
480
+ totalCost: plan.totalCost,
481
+ estimatedDuration: plan.estimatedDuration,
482
+ successProbability,
483
+ alternativePaths: alternatives,
484
+ createdAt: new Date().toISOString()
485
+ };
486
+ }
487
+ /**
488
+ * Map criticality to risk level
489
+ */
490
+ mapCriticality(criticality) {
491
+ switch (criticality) {
492
+ case 'critical': return 'critical';
493
+ case 'high': return 'high';
494
+ case 'medium': return 'medium';
495
+ default: return 'low';
496
+ }
497
+ }
498
+ /**
499
+ * Update action success rate based on execution outcome
500
+ */
501
+ async recordActionOutcome(actionId, success) {
502
+ try {
503
+ // Get current stats
504
+ const row = this.db.prepare(`
505
+ SELECT success_rate, execution_count FROM goap_actions WHERE id = ?
506
+ `).get(actionId);
507
+ if (!row)
508
+ return;
509
+ const currentRate = row.success_rate ?? 1.0;
510
+ const count = row.execution_count ?? 0;
511
+ const newRate = (currentRate * count + (success ? 1 : 0)) / (count + 1);
512
+ this.db.prepare(`
513
+ UPDATE goap_actions
514
+ SET success_rate = ?,
515
+ execution_count = execution_count + 1,
516
+ updated_at = CURRENT_TIMESTAMP
517
+ WHERE id = ?
518
+ `).run(newRate, actionId);
519
+ this.logger.debug('[GOAPQualityGate] Action outcome recorded', {
520
+ actionId,
521
+ success,
522
+ newRate
523
+ });
524
+ }
525
+ catch (error) {
526
+ this.logger.warn('[GOAPQualityGate] Failed to record action outcome', { error });
527
+ }
528
+ }
529
+ /**
530
+ * Mark plan as completed
531
+ */
532
+ async completePlan(planId, success, reason) {
533
+ try {
534
+ this.db.prepare(`
535
+ UPDATE goap_plans
536
+ SET status = ?,
537
+ success = ?,
538
+ failure_reason = ?,
539
+ completed_at = CURRENT_TIMESTAMP
540
+ WHERE id = ?
541
+ `).run(success ? 'completed' : 'failed', success ? 1 : 0, reason ?? null, planId);
542
+ }
543
+ catch (error) {
544
+ this.logger.warn('[GOAPQualityGate] Failed to complete plan', { error });
545
+ }
546
+ }
547
+ /**
548
+ * Get successful plan templates for similar goals
549
+ */
550
+ async getSimilarSuccessfulPlans(goalId, limit = 5) {
551
+ try {
552
+ const rows = this.db.prepare(`
553
+ SELECT id, action_sequence, total_cost, estimated_duration, goal_state
554
+ FROM goap_plans
555
+ WHERE goal_id = ? AND success = 1
556
+ ORDER BY total_cost ASC
557
+ LIMIT ?
558
+ `).all(goalId, limit);
559
+ return rows.map(row => ({
560
+ id: row.id,
561
+ actions: [], // Would need to hydrate from action library
562
+ totalCost: row.total_cost,
563
+ estimatedDuration: row.estimated_duration,
564
+ goalConditions: JSON.parse(row.goal_state)
565
+ }));
566
+ }
567
+ catch (error) {
568
+ this.logger.warn('[GOAPQualityGate] Failed to get similar plans', { error });
569
+ return [];
570
+ }
571
+ }
572
+ }
573
+ exports.GOAPQualityGateIntegration = GOAPQualityGateIntegration;
574
+ /**
575
+ * Factory function to create integration instance
576
+ */
577
+ function createQualityGateIntegration(dbPath) {
578
+ const Database = require('better-sqlite3');
579
+ const db = new Database(dbPath);
580
+ return new GOAPQualityGateIntegration(db);
581
+ }
582
+ //# sourceMappingURL=GOAPQualityGateIntegration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GOAPQualityGateIntegration.js","sourceRoot":"","sources":["../../../src/planning/integration/GOAPQualityGateIntegration.ts"],"names":[],"mappings":"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"}