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,589 @@
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
+ * Get the internal GOAPPlanner instance
141
+ * Used by PlanExecutor for Phase 5/6 integration (plan signature storage)
142
+ */
143
+ getPlanner() {
144
+ return this.planner;
145
+ }
146
+ /**
147
+ * Convert quality gate metrics to GOAP WorldState
148
+ */
149
+ buildWorldState(metrics, context) {
150
+ const qualityInput = {
151
+ coverage: {
152
+ line: metrics.coverage?.linePercentage ?? metrics.coverage?.overallPercentage ?? 0,
153
+ branch: metrics.coverage?.branchPercentage ?? 0,
154
+ function: metrics.coverage?.functionPercentage ?? 0
155
+ },
156
+ testsPassing: metrics.testResults?.passed,
157
+ testsTotal: metrics.testResults?.total,
158
+ securityVulnerabilities: {
159
+ critical: metrics.security?.summary?.critical ?? 0,
160
+ high: metrics.security?.summary?.high ?? 0,
161
+ medium: metrics.security?.summary?.medium ?? 0,
162
+ low: metrics.security?.summary?.low ?? 0
163
+ },
164
+ performanceMetrics: {
165
+ p95Latency: metrics.performance?.p95Latency,
166
+ throughput: metrics.performance?.throughput,
167
+ errorRate: metrics.performance?.errorRate
168
+ },
169
+ technicalDebt: {
170
+ days: metrics.codeQuality?.technicalDebtDays ?? 0
171
+ }
172
+ };
173
+ const contextInput = {
174
+ environment: context.environment,
175
+ riskLevel: this.mapCriticality(context.criticality),
176
+ changedFiles: context.changedFiles,
177
+ previousFailures: context.previousFailures ?? 0,
178
+ projectId: context.projectId
179
+ };
180
+ const builder = new WorldStateBuilder_1.WorldStateBuilder()
181
+ .withQualityMetrics(qualityInput)
182
+ .withContext(contextInput)
183
+ .withResources({
184
+ timeRemaining: context.timeRemaining ?? 3600,
185
+ parallelSlots: 4
186
+ });
187
+ // Add available agents if specified
188
+ if (context.availableAgents && context.availableAgents.length > 0) {
189
+ builder.withFleetStatus({
190
+ activeAgents: context.availableAgents.length,
191
+ availableAgents: context.availableAgents
192
+ });
193
+ }
194
+ else {
195
+ // Default available agents
196
+ builder.withFleetStatus({
197
+ activeAgents: 5,
198
+ availableAgents: [
199
+ 'qe-test-executor',
200
+ 'qe-test-generator',
201
+ 'qe-coverage-analyzer',
202
+ 'qe-security-scanner',
203
+ 'qe-performance-tester'
204
+ ]
205
+ });
206
+ }
207
+ return builder.build();
208
+ }
209
+ /**
210
+ * Generate remediation plan for quality gate failure
211
+ */
212
+ async generateRemediationPlan(metrics, context, targetGoal) {
213
+ await this.initialize();
214
+ const worldState = this.buildWorldState(metrics, context);
215
+ const goal = exports.QUALITY_GATE_GOALS[targetGoal ?? 'PASS_QUALITY_GATE'];
216
+ this.logger.info('[GOAPQualityGate] Generating remediation plan', {
217
+ goal: goal.name,
218
+ currentCoverage: worldState.coverage.line,
219
+ targetConditions: Object.keys(goal.conditions)
220
+ });
221
+ // Define constraints based on context and goal type
222
+ const constraints = {
223
+ maxIterations: 3000,
224
+ timeoutMs: 8000,
225
+ maxPlanLength: 10
226
+ };
227
+ // Add goal-specific category preferences for faster search
228
+ if (targetGoal === 'SECURITY_CLEAR') {
229
+ // Focus on security actions for security goals
230
+ constraints.allowedCategories = ['security', 'process'];
231
+ }
232
+ else if (targetGoal === 'COVERAGE_TARGET') {
233
+ // Focus on test actions for coverage goals
234
+ constraints.allowedCategories = ['test', 'analysis', 'process'];
235
+ }
236
+ else if (targetGoal === 'PERFORMANCE_SLA') {
237
+ // Focus on performance actions
238
+ constraints.allowedCategories = ['performance', 'analysis', 'process'];
239
+ }
240
+ // PASS_QUALITY_GATE needs all categories
241
+ // Restrict actions for production
242
+ if (context.environment === 'production') {
243
+ constraints.allowedCategories = ['test', 'security', 'analysis', 'process'];
244
+ // Exclude risky actions in production
245
+ constraints.excludedActions = ['qg-fix-critical-vulns'];
246
+ }
247
+ try {
248
+ const plan = await this.planner.findPlan(worldState, goal.conditions, constraints);
249
+ if (!plan) {
250
+ this.logger.warn('[GOAPQualityGate] No remediation plan found');
251
+ return null;
252
+ }
253
+ // Find alternative paths
254
+ const alternatives = await this.findAlternativePaths(worldState, goal.conditions, plan, constraints);
255
+ // Calculate success probability
256
+ const successProbability = this.calculateSuccessProbability(plan);
257
+ // Persist plan
258
+ await this.persistPlan(plan, context, goal.id);
259
+ return this.formatRemediationPlan(plan, alternatives, successProbability);
260
+ }
261
+ catch (error) {
262
+ this.logger.error('[GOAPQualityGate] Failed to generate remediation plan', { error });
263
+ return null;
264
+ }
265
+ }
266
+ /**
267
+ * Find alternative remediation paths
268
+ *
269
+ * STRATEGY: With flag-based actions, we have two types:
270
+ * 1. MEASUREMENT actions (set flags like testsMeasured=true) - MUST run, cannot be excluded
271
+ * 2. IMPROVEMENT actions (increase metrics) - CAN be swapped for alternatives
272
+ *
273
+ * We find diverse alternatives by:
274
+ * - Keeping measurement actions fixed (they're prerequisites)
275
+ * - Swapping improvement actions for alternatives with similar effects
276
+ */
277
+ async findAlternativePaths(worldState, goalConditions, primaryPlan, constraints) {
278
+ const alternatives = [];
279
+ const seenPlanKeys = new Set();
280
+ // Identify measurement vs improvement actions in primary plan
281
+ const measurementActionIds = new Set();
282
+ const improvementActions = [];
283
+ for (const action of primaryPlan.actions) {
284
+ // Check if this is a measurement action (effects set boolean flags)
285
+ const isMeasurement = Object.entries(action.effects).some(([key, effect]) => {
286
+ const effectObj = effect;
287
+ // Measurement actions set boolean flags like testsMeasured, securityMeasured
288
+ return effectObj?.set === true && (key.includes('Measured') ||
289
+ key.includes('measured') ||
290
+ key.includes('Tested') ||
291
+ key.includes('Evaluated') ||
292
+ key.includes('Analyzed'));
293
+ });
294
+ if (isMeasurement) {
295
+ measurementActionIds.add(action.id);
296
+ }
297
+ else {
298
+ improvementActions.push(action);
299
+ }
300
+ }
301
+ // Helper to generate plan key for deduplication
302
+ const getPlanKey = (actions) => actions.map(a => a.id).sort().join(',');
303
+ // Add primary plan to seen
304
+ seenPlanKeys.add(getPlanKey(primaryPlan.actions));
305
+ // Helper to add unique alternative
306
+ const addAlternative = (altPlan, description) => {
307
+ const planKey = getPlanKey(altPlan.actions);
308
+ if (seenPlanKeys.has(planKey))
309
+ return false;
310
+ // Check for actual action diversity (not just order)
311
+ const primaryIds = new Set(primaryPlan.actions.map(a => a.id));
312
+ const altIds = altPlan.actions.map(a => a.id);
313
+ const differentActions = altIds.filter(id => !primaryIds.has(id));
314
+ if (differentActions.length === 0 && altIds.length === primaryPlan.actions.length) {
315
+ return false; // No real difference
316
+ }
317
+ seenPlanKeys.add(planKey);
318
+ alternatives.push({
319
+ planId: altPlan.id,
320
+ actions: altIds,
321
+ totalCost: altPlan.totalCost,
322
+ estimatedDuration: altPlan.estimatedDuration,
323
+ differenceFromPrimary: description
324
+ });
325
+ return true;
326
+ };
327
+ // Strategy 1: For each improvement action, exclude it to force an alternative
328
+ // Keep measurement actions (they're prerequisites that MUST run)
329
+ for (const improvementAction of improvementActions) {
330
+ if (alternatives.length >= 3)
331
+ break;
332
+ const altConstraints = {
333
+ ...constraints,
334
+ excludedActions: [
335
+ ...(constraints.excludedActions ?? []),
336
+ improvementAction.id
337
+ ],
338
+ maxIterations: 1200
339
+ };
340
+ try {
341
+ const altPlan = await this.planner.findPlan(worldState, goalConditions, altConstraints);
342
+ if (altPlan && altPlan.actions.length > 0) {
343
+ // Find what replaced the excluded action
344
+ const newActions = altPlan.actions
345
+ .filter(a => !measurementActionIds.has(a.id))
346
+ .filter(a => !primaryPlan.actions.some(pa => pa.id === a.id));
347
+ const newActionNames = newActions.map(a => a.name).join(', ') || 'different approach';
348
+ addAlternative(altPlan, `Uses ${newActionNames} instead of ${improvementAction.name}`);
349
+ }
350
+ }
351
+ catch {
352
+ // Ignore failed searches
353
+ }
354
+ }
355
+ // Strategy 2: Find alternatives by category
356
+ // Group improvement actions by what they improve (category + effect target)
357
+ if (alternatives.length < 3) {
358
+ const effectGroups = new Map();
359
+ for (const action of this.planner.getActionLibrary()) {
360
+ // Skip measurement actions and actions already used
361
+ if (measurementActionIds.has(action.id))
362
+ continue;
363
+ if (improvementActions.some(ia => ia.id === action.id))
364
+ continue;
365
+ // Group by primary effect target
366
+ for (const [key, effect] of Object.entries(action.effects)) {
367
+ const effectObj = effect;
368
+ if (effectObj?.increase !== undefined) {
369
+ const effectKey = key; // e.g., 'coverage.line', 'quality.testsPassing'
370
+ if (!effectGroups.has(effectKey)) {
371
+ effectGroups.set(effectKey, []);
372
+ }
373
+ effectGroups.get(effectKey).push(action);
374
+ }
375
+ }
376
+ }
377
+ // For each improvement action in primary plan, find alternatives that improve same metric
378
+ for (const improvementAction of improvementActions) {
379
+ if (alternatives.length >= 3)
380
+ break;
381
+ // Find what this action improves
382
+ for (const [key, effect] of Object.entries(improvementAction.effects)) {
383
+ const effectObj = effect;
384
+ if (effectObj?.increase !== undefined) {
385
+ const alternativeActions = effectGroups.get(key) ?? [];
386
+ for (const altAction of alternativeActions) {
387
+ if (alternatives.length >= 3)
388
+ break;
389
+ // Exclude primary plan's improvement actions, keep this alternative
390
+ const excludeIds = improvementActions
391
+ .filter(ia => ia.id !== altAction.id)
392
+ .map(ia => ia.id);
393
+ const altConstraints = {
394
+ ...constraints,
395
+ excludedActions: [...(constraints.excludedActions ?? []), ...excludeIds],
396
+ maxIterations: 1000
397
+ };
398
+ try {
399
+ const altPlan = await this.planner.findPlan(worldState, goalConditions, altConstraints);
400
+ if (altPlan && altPlan.actions.length > 0) {
401
+ addAlternative(altPlan, `Uses ${altAction.name} to improve ${key}`);
402
+ }
403
+ }
404
+ catch {
405
+ // Ignore
406
+ }
407
+ }
408
+ }
409
+ }
410
+ }
411
+ }
412
+ // Strategy 3: Exclude all improvement actions from primary + alternatives to find new approaches
413
+ if (alternatives.length < 3 && alternatives.length > 0) {
414
+ const allUsedImprovements = new Set();
415
+ improvementActions.forEach(a => allUsedImprovements.add(a.id));
416
+ alternatives.forEach(alt => alt.actions.forEach(id => {
417
+ if (!measurementActionIds.has(id))
418
+ allUsedImprovements.add(id);
419
+ }));
420
+ const altConstraints = {
421
+ ...constraints,
422
+ excludedActions: [...(constraints.excludedActions ?? []), ...allUsedImprovements],
423
+ maxIterations: 1500
424
+ };
425
+ try {
426
+ const altPlan = await this.planner.findPlan(worldState, goalConditions, altConstraints);
427
+ if (altPlan && altPlan.actions.length > 0) {
428
+ addAlternative(altPlan, 'Completely different improvement approach');
429
+ }
430
+ }
431
+ catch {
432
+ // Ignore
433
+ }
434
+ }
435
+ return alternatives;
436
+ }
437
+ /**
438
+ * Calculate success probability for a plan
439
+ */
440
+ calculateSuccessProbability(plan) {
441
+ if (plan.actions.length === 0)
442
+ return 0;
443
+ // Multiply individual action success rates
444
+ let probability = 1.0;
445
+ for (const action of plan.actions) {
446
+ probability *= action.successRate ?? 0.9;
447
+ }
448
+ return Math.round(probability * 100) / 100;
449
+ }
450
+ /**
451
+ * Persist plan to database
452
+ */
453
+ async persistPlan(plan, context, goalId) {
454
+ try {
455
+ const actionSequence = JSON.stringify(plan.actions.map(a => a.id));
456
+ this.db.prepare(`
457
+ INSERT INTO goap_plans (
458
+ id, goal_id, sequence, total_cost, created_at,
459
+ initial_state, goal_state, action_sequence, estimated_duration, status
460
+ ) VALUES (?, ?, ?, ?, strftime('%s', 'now'), ?, ?, ?, ?, 'pending')
461
+ `).run(plan.id, goalId, actionSequence, // sequence (required NOT NULL)
462
+ Math.round(plan.totalCost), // total_cost as INTEGER
463
+ JSON.stringify({ projectId: context.projectId, buildId: context.buildId }), JSON.stringify(plan.goalConditions), actionSequence, // action_sequence (same as sequence)
464
+ Math.round(plan.estimatedDuration));
465
+ this.logger.debug('[GOAPQualityGate] Plan persisted', { planId: plan.id });
466
+ }
467
+ catch (error) {
468
+ this.logger.warn('[GOAPQualityGate] Failed to persist plan', { error });
469
+ }
470
+ }
471
+ /**
472
+ * Format plan for external consumption
473
+ */
474
+ formatRemediationPlan(plan, alternatives, successProbability) {
475
+ return {
476
+ planId: plan.id,
477
+ actions: plan.actions.map(a => ({
478
+ id: a.id,
479
+ name: a.name,
480
+ description: a.description,
481
+ agentType: a.agentType,
482
+ category: a.category,
483
+ estimatedDuration: a.durationEstimate ?? 60000,
484
+ successRate: a.successRate ?? 0.9,
485
+ effects: Object.keys(a.effects)
486
+ })),
487
+ totalCost: plan.totalCost,
488
+ estimatedDuration: plan.estimatedDuration,
489
+ successProbability,
490
+ alternativePaths: alternatives,
491
+ createdAt: new Date().toISOString()
492
+ };
493
+ }
494
+ /**
495
+ * Map criticality to risk level
496
+ */
497
+ mapCriticality(criticality) {
498
+ switch (criticality) {
499
+ case 'critical': return 'critical';
500
+ case 'high': return 'high';
501
+ case 'medium': return 'medium';
502
+ default: return 'low';
503
+ }
504
+ }
505
+ /**
506
+ * Update action success rate based on execution outcome
507
+ */
508
+ async recordActionOutcome(actionId, success) {
509
+ try {
510
+ // Get current stats
511
+ const row = this.db.prepare(`
512
+ SELECT success_rate, execution_count FROM goap_actions WHERE id = ?
513
+ `).get(actionId);
514
+ if (!row)
515
+ return;
516
+ const currentRate = row.success_rate ?? 1.0;
517
+ const count = row.execution_count ?? 0;
518
+ const newRate = (currentRate * count + (success ? 1 : 0)) / (count + 1);
519
+ this.db.prepare(`
520
+ UPDATE goap_actions
521
+ SET success_rate = ?,
522
+ execution_count = execution_count + 1,
523
+ updated_at = CURRENT_TIMESTAMP
524
+ WHERE id = ?
525
+ `).run(newRate, actionId);
526
+ this.logger.debug('[GOAPQualityGate] Action outcome recorded', {
527
+ actionId,
528
+ success,
529
+ newRate
530
+ });
531
+ }
532
+ catch (error) {
533
+ this.logger.warn('[GOAPQualityGate] Failed to record action outcome', { error });
534
+ }
535
+ }
536
+ /**
537
+ * Mark plan as completed
538
+ */
539
+ async completePlan(planId, success, reason) {
540
+ try {
541
+ this.db.prepare(`
542
+ UPDATE goap_plans
543
+ SET status = ?,
544
+ success = ?,
545
+ failure_reason = ?,
546
+ completed_at = CURRENT_TIMESTAMP
547
+ WHERE id = ?
548
+ `).run(success ? 'completed' : 'failed', success ? 1 : 0, reason ?? null, planId);
549
+ }
550
+ catch (error) {
551
+ this.logger.warn('[GOAPQualityGate] Failed to complete plan', { error });
552
+ }
553
+ }
554
+ /**
555
+ * Get successful plan templates for similar goals
556
+ */
557
+ async getSimilarSuccessfulPlans(goalId, limit = 5) {
558
+ try {
559
+ const rows = this.db.prepare(`
560
+ SELECT id, action_sequence, total_cost, estimated_duration, goal_state
561
+ FROM goap_plans
562
+ WHERE goal_id = ? AND success = 1
563
+ ORDER BY total_cost ASC
564
+ LIMIT ?
565
+ `).all(goalId, limit);
566
+ return rows.map(row => ({
567
+ id: row.id,
568
+ actions: [], // Would need to hydrate from action library
569
+ totalCost: row.total_cost,
570
+ estimatedDuration: row.estimated_duration,
571
+ goalConditions: JSON.parse(row.goal_state)
572
+ }));
573
+ }
574
+ catch (error) {
575
+ this.logger.warn('[GOAPQualityGate] Failed to get similar plans', { error });
576
+ return [];
577
+ }
578
+ }
579
+ }
580
+ exports.GOAPQualityGateIntegration = GOAPQualityGateIntegration;
581
+ /**
582
+ * Factory function to create integration instance
583
+ */
584
+ function createQualityGateIntegration(dbPath) {
585
+ const Database = require('better-sqlite3');
586
+ const db = new Database(dbPath);
587
+ return new GOAPQualityGateIntegration(db);
588
+ }
589
+ //# 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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"}