agentic-qe 2.7.2 → 2.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/README.md +1 -1
  3. package/dist/agents/AccessibilityAllyAgent.d.ts +0 -7
  4. package/dist/agents/AccessibilityAllyAgent.d.ts.map +1 -1
  5. package/dist/agents/AccessibilityAllyAgent.js +0 -15
  6. package/dist/agents/AccessibilityAllyAgent.js.map +1 -1
  7. package/dist/agents/ApiContractValidatorAgent.js +4 -4
  8. package/dist/agents/ApiContractValidatorAgent.js.map +1 -1
  9. package/dist/agents/BaseAgent.d.ts +2 -0
  10. package/dist/agents/BaseAgent.d.ts.map +1 -1
  11. package/dist/agents/BaseAgent.js +43 -41
  12. package/dist/agents/BaseAgent.js.map +1 -1
  13. package/dist/agents/CodeComplexityAnalyzerAgent.d.ts +0 -8
  14. package/dist/agents/CodeComplexityAnalyzerAgent.d.ts.map +1 -1
  15. package/dist/agents/CodeComplexityAnalyzerAgent.js +0 -15
  16. package/dist/agents/CodeComplexityAnalyzerAgent.js.map +1 -1
  17. package/dist/agents/CodeIntelligenceAgent.d.ts +0 -1
  18. package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -1
  19. package/dist/agents/CodeIntelligenceAgent.js +0 -2
  20. package/dist/agents/CodeIntelligenceAgent.js.map +1 -1
  21. package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
  22. package/dist/agents/DeploymentReadinessAgent.js +30 -30
  23. package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
  24. package/dist/agents/FlakyTestHunterAgent.d.ts +0 -10
  25. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
  26. package/dist/agents/FlakyTestHunterAgent.js +10 -20
  27. package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
  28. package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
  29. package/dist/agents/FleetCommanderAgent.js +28 -28
  30. package/dist/agents/FleetCommanderAgent.js.map +1 -1
  31. package/dist/agents/LearningAgent.js +1 -1
  32. package/dist/agents/LearningAgent.js.map +1 -1
  33. package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
  34. package/dist/agents/PerformanceTesterAgent.js +25 -25
  35. package/dist/agents/PerformanceTesterAgent.js.map +1 -1
  36. package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -1
  37. package/dist/agents/ProductionIntelligenceAgent.js +20 -20
  38. package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
  39. package/dist/agents/QXPartnerAgent.d.ts +0 -8
  40. package/dist/agents/QXPartnerAgent.d.ts.map +1 -1
  41. package/dist/agents/QXPartnerAgent.js +0 -15
  42. package/dist/agents/QXPartnerAgent.js.map +1 -1
  43. package/dist/agents/QualityAnalyzerAgent.d.ts +0 -7
  44. package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
  45. package/dist/agents/QualityAnalyzerAgent.js +0 -16
  46. package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
  47. package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -1
  48. package/dist/agents/RegressionRiskAnalyzerAgent.js +18 -18
  49. package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
  50. package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
  51. package/dist/agents/RequirementsValidatorAgent.js +21 -21
  52. package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
  53. package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
  54. package/dist/agents/SecurityScannerAgent.js +38 -38
  55. package/dist/agents/SecurityScannerAgent.js.map +1 -1
  56. package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
  57. package/dist/agents/TestDataArchitectAgent.js +29 -29
  58. package/dist/agents/TestDataArchitectAgent.js.map +1 -1
  59. package/dist/agents/TestExecutorAgent.d.ts +0 -7
  60. package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
  61. package/dist/agents/TestExecutorAgent.js +35 -51
  62. package/dist/agents/TestExecutorAgent.js.map +1 -1
  63. package/dist/agents/TestGeneratorAgent.d.ts +0 -7
  64. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
  65. package/dist/agents/TestGeneratorAgent.js +0 -16
  66. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  67. package/dist/agents/adapters/AgentLLMAdapter.d.ts.map +1 -1
  68. package/dist/agents/adapters/AgentLLMAdapter.js +5 -4
  69. package/dist/agents/adapters/AgentLLMAdapter.js.map +1 -1
  70. package/dist/agents/adapters/CoordinatorAdapter.d.ts.map +1 -1
  71. package/dist/agents/adapters/CoordinatorAdapter.js +2 -1
  72. package/dist/agents/adapters/CoordinatorAdapter.js.map +1 -1
  73. package/dist/agents/n8n/N8nAPIClient.d.ts.map +1 -1
  74. package/dist/agents/n8n/N8nAPIClient.js +3 -2
  75. package/dist/agents/n8n/N8nAPIClient.js.map +1 -1
  76. package/dist/agents/n8n/N8nAuditPersistence.d.ts.map +1 -1
  77. package/dist/agents/n8n/N8nAuditPersistence.js +2 -1
  78. package/dist/agents/n8n/N8nAuditPersistence.js.map +1 -1
  79. package/dist/agents/n8n/N8nBaseAgent.js +1 -1
  80. package/dist/agents/n8n/N8nBaseAgent.js.map +1 -1
  81. package/dist/agents/n8n/N8nComplianceValidatorAgent.js +1 -1
  82. package/dist/agents/n8n/N8nComplianceValidatorAgent.js.map +1 -1
  83. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js +1 -1
  84. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js.map +1 -1
  85. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js +1 -1
  86. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js.map +1 -1
  87. package/dist/agents/n8n/N8nSecurityAuditorAgent.js +1 -1
  88. package/dist/agents/n8n/N8nSecurityAuditorAgent.js.map +1 -1
  89. package/dist/agents/pool/AgentPool.d.ts.map +1 -1
  90. package/dist/agents/pool/AgentPool.js +2 -1
  91. package/dist/agents/pool/AgentPool.js.map +1 -1
  92. package/dist/agents/pool/QEAgentPoolFactory.d.ts.map +1 -1
  93. package/dist/agents/pool/QEAgentPoolFactory.js +2 -1
  94. package/dist/agents/pool/QEAgentPoolFactory.js.map +1 -1
  95. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  96. package/dist/learning/QLearning.d.ts +101 -1
  97. package/dist/learning/QLearning.d.ts.map +1 -1
  98. package/dist/learning/QLearning.js +168 -0
  99. package/dist/learning/QLearning.js.map +1 -1
  100. package/dist/mcp/server-instructions.d.ts +1 -1
  101. package/dist/mcp/server-instructions.js +1 -1
  102. package/dist/persistence/migrations/all-migrations.d.ts.map +1 -1
  103. package/dist/persistence/migrations/all-migrations.js +44 -1
  104. package/dist/persistence/migrations/all-migrations.js.map +1 -1
  105. package/dist/planning/GOAPPlanner.d.ts +42 -0
  106. package/dist/planning/GOAPPlanner.d.ts.map +1 -1
  107. package/dist/planning/GOAPPlanner.js +153 -1
  108. package/dist/planning/GOAPPlanner.js.map +1 -1
  109. package/dist/planning/PlanLearning.d.ts +184 -0
  110. package/dist/planning/PlanLearning.d.ts.map +1 -0
  111. package/dist/planning/PlanLearning.js +527 -0
  112. package/dist/planning/PlanLearning.js.map +1 -0
  113. package/dist/planning/PlanSimilarity.d.ts +148 -0
  114. package/dist/planning/PlanSimilarity.d.ts.map +1 -0
  115. package/dist/planning/PlanSimilarity.js +464 -0
  116. package/dist/planning/PlanSimilarity.js.map +1 -0
  117. package/dist/planning/execution/PlanExecutor.d.ts +101 -2
  118. package/dist/planning/execution/PlanExecutor.d.ts.map +1 -1
  119. package/dist/planning/execution/PlanExecutor.js +587 -14
  120. package/dist/planning/execution/PlanExecutor.js.map +1 -1
  121. package/dist/planning/index.d.ts +2 -0
  122. package/dist/planning/index.d.ts.map +1 -1
  123. package/dist/planning/index.js +15 -4
  124. package/dist/planning/index.js.map +1 -1
  125. package/dist/planning/integration/GOAPQualityGateIntegration.d.ts +6 -0
  126. package/dist/planning/integration/GOAPQualityGateIntegration.d.ts.map +1 -1
  127. package/dist/planning/integration/GOAPQualityGateIntegration.js +7 -0
  128. package/dist/planning/integration/GOAPQualityGateIntegration.js.map +1 -1
  129. package/dist/planning/types.d.ts +2 -0
  130. package/dist/planning/types.d.ts.map +1 -1
  131. package/dist/planning/types.js.map +1 -1
  132. package/package.json +1 -1
@@ -0,0 +1,148 @@
1
+ /**
2
+ * PlanSimilarity - Fast Plan Matching and Reuse System
3
+ *
4
+ * Implements efficient plan similarity matching using:
5
+ * - Feature vector extraction from WorldState
6
+ * - Cosine similarity for state comparison
7
+ * - Locality-Sensitive Hashing (LSH) for fast retrieval
8
+ * - Goal signature caching for O(1) exact matches
9
+ *
10
+ * Performance targets:
11
+ * - Similar plan retrieval: <100ms
12
+ * - Plan reuse rate: >30% for common goals
13
+ *
14
+ * @module planning/PlanSimilarity
15
+ * @version 1.0.0
16
+ */
17
+ import Database from 'better-sqlite3';
18
+ import { WorldState, StateConditions, GOAPAction } from './types';
19
+ /**
20
+ * Plan signature for fast matching
21
+ */
22
+ export interface PlanSignature {
23
+ id: string;
24
+ planId: string;
25
+ goalSignature: string;
26
+ stateVector: number[];
27
+ actionSequence: string[];
28
+ totalCost: number;
29
+ successRate: number;
30
+ usageCount: number;
31
+ lastUsed: Date;
32
+ createdAt: Date;
33
+ }
34
+ /**
35
+ * Similar plan result with similarity score
36
+ */
37
+ export interface SimilarPlan {
38
+ planId: string;
39
+ signature: PlanSignature;
40
+ similarityScore: number;
41
+ goalMatch: boolean;
42
+ stateDistance: number;
43
+ }
44
+ /**
45
+ * Plan reuse statistics
46
+ */
47
+ export interface PlanReuseStats {
48
+ totalPlans: number;
49
+ reusedPlans: number;
50
+ reuseRate: number;
51
+ avgSimilarityScore: number;
52
+ topGoals: {
53
+ goal: string;
54
+ reuseCount: number;
55
+ }[];
56
+ }
57
+ /**
58
+ * Configuration for similarity matching
59
+ */
60
+ export interface SimilarityConfig {
61
+ minSimilarityThreshold: number;
62
+ maxCandidates: number;
63
+ useGoalCaching: boolean;
64
+ stateDimensions: number;
65
+ lshBands: number;
66
+ }
67
+ /**
68
+ * PlanSimilarity - Efficient plan matching using feature vectors and LSH
69
+ */
70
+ export declare class PlanSimilarity {
71
+ private db;
72
+ private logger;
73
+ private config;
74
+ private goalCache;
75
+ private signatureCache;
76
+ private schemaInitialized;
77
+ constructor(db: Database.Database, config?: Partial<SimilarityConfig>);
78
+ /**
79
+ * Initialize schema for plan signatures
80
+ */
81
+ ensureSchema(): void;
82
+ /**
83
+ * Extract feature vector from WorldState
84
+ * Normalizes all numeric values to [0,1] range
85
+ */
86
+ extractStateVector(state: WorldState): number[];
87
+ /**
88
+ * Encode environment as numeric value
89
+ */
90
+ private encodeEnvironment;
91
+ /**
92
+ * Encode change size as numeric value
93
+ */
94
+ private encodeChangeSize;
95
+ /**
96
+ * Encode risk level as numeric value
97
+ */
98
+ private encodeRiskLevel;
99
+ /**
100
+ * Create signature hash from goal conditions
101
+ */
102
+ createGoalSignature(goalConditions: StateConditions): string;
103
+ /**
104
+ * Sort object keys recursively for deterministic serialization
105
+ */
106
+ private sortObjectKeys;
107
+ /**
108
+ * Calculate cosine similarity between two vectors
109
+ */
110
+ cosineSimilarity(vectorA: number[], vectorB: number[]): number;
111
+ /**
112
+ * Calculate Euclidean distance between two vectors
113
+ */
114
+ euclideanDistance(vectorA: number[], vectorB: number[]): number;
115
+ /**
116
+ * Store plan signature for future matching
117
+ */
118
+ storePlanSignature(planId: string, goalConditions: StateConditions, initialState: WorldState, actions: GOAPAction[], totalCost: number): PlanSignature;
119
+ /**
120
+ * Find similar plans for a given goal and state
121
+ * Performance target: <100ms
122
+ */
123
+ findSimilarPlans(goalConditions: StateConditions, currentState: WorldState, options?: {
124
+ maxCandidates?: number;
125
+ minSimilarity?: number;
126
+ }): Promise<SimilarPlan[]>;
127
+ /**
128
+ * Get signature from cache or database
129
+ */
130
+ private getSignature;
131
+ /**
132
+ * Record plan reuse (increments usage count)
133
+ */
134
+ recordPlanReuse(planId: string, success: boolean): void;
135
+ /**
136
+ * Get plan reuse statistics
137
+ */
138
+ getReuseStats(): PlanReuseStats;
139
+ /**
140
+ * Clear signature cache (for testing or memory management)
141
+ */
142
+ clearCache(): void;
143
+ /**
144
+ * Preload signatures into cache for faster matching
145
+ */
146
+ preloadCache(limit?: number): Promise<number>;
147
+ }
148
+ //# sourceMappingURL=PlanSimilarity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanSimilarity.d.ts","sourceRoot":"","sources":["../../src/planning/PlanSimilarity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,464 @@
1
+ "use strict";
2
+ /**
3
+ * PlanSimilarity - Fast Plan Matching and Reuse System
4
+ *
5
+ * Implements efficient plan similarity matching using:
6
+ * - Feature vector extraction from WorldState
7
+ * - Cosine similarity for state comparison
8
+ * - Locality-Sensitive Hashing (LSH) for fast retrieval
9
+ * - Goal signature caching for O(1) exact matches
10
+ *
11
+ * Performance targets:
12
+ * - Similar plan retrieval: <100ms
13
+ * - Plan reuse rate: >30% for common goals
14
+ *
15
+ * @module planning/PlanSimilarity
16
+ * @version 1.0.0
17
+ */
18
+ var __importDefault = (this && this.__importDefault) || function (mod) {
19
+ return (mod && mod.__esModule) ? mod : { "default": mod };
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.PlanSimilarity = void 0;
23
+ const Logger_1 = require("../utils/Logger");
24
+ const SecureRandom_1 = require("../utils/SecureRandom");
25
+ const crypto_1 = __importDefault(require("crypto"));
26
+ const DEFAULT_CONFIG = {
27
+ minSimilarityThreshold: 0.7,
28
+ maxCandidates: 5,
29
+ useGoalCaching: true,
30
+ stateDimensions: 20,
31
+ lshBands: 4
32
+ };
33
+ /**
34
+ * PlanSimilarity - Efficient plan matching using feature vectors and LSH
35
+ */
36
+ class PlanSimilarity {
37
+ constructor(db, config = {}) {
38
+ this.goalCache = new Map(); // goalSignature -> planIds
39
+ this.signatureCache = new Map(); // planId -> signature
40
+ this.schemaInitialized = false;
41
+ this.db = db;
42
+ this.logger = Logger_1.Logger.getInstance();
43
+ this.config = { ...DEFAULT_CONFIG, ...config };
44
+ }
45
+ /**
46
+ * Initialize schema for plan signatures
47
+ */
48
+ ensureSchema() {
49
+ if (this.schemaInitialized)
50
+ return;
51
+ this.db.exec(`
52
+ CREATE TABLE IF NOT EXISTS goap_plan_signatures (
53
+ id TEXT PRIMARY KEY,
54
+ plan_id TEXT NOT NULL UNIQUE,
55
+ goal_signature TEXT NOT NULL,
56
+ state_vector TEXT NOT NULL,
57
+ action_sequence TEXT NOT NULL,
58
+ total_cost REAL NOT NULL,
59
+ success_rate REAL DEFAULT 1.0,
60
+ usage_count INTEGER DEFAULT 0,
61
+ last_used DATETIME,
62
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
63
+ )
64
+ `);
65
+ // Indexes for fast retrieval
66
+ try {
67
+ this.db.exec('CREATE INDEX IF NOT EXISTS idx_plan_sig_goal ON goap_plan_signatures (goal_signature)');
68
+ this.db.exec('CREATE INDEX IF NOT EXISTS idx_plan_sig_success ON goap_plan_signatures (success_rate DESC)');
69
+ this.db.exec('CREATE INDEX IF NOT EXISTS idx_plan_sig_usage ON goap_plan_signatures (usage_count DESC)');
70
+ }
71
+ catch {
72
+ // Indexes may already exist
73
+ }
74
+ this.schemaInitialized = true;
75
+ this.logger.debug('[PlanSimilarity] Schema initialized');
76
+ }
77
+ /**
78
+ * Extract feature vector from WorldState
79
+ * Normalizes all numeric values to [0,1] range
80
+ */
81
+ extractStateVector(state) {
82
+ const vector = [];
83
+ // Coverage features (4 dimensions)
84
+ vector.push(state.coverage.line / 100);
85
+ vector.push(state.coverage.branch / 100);
86
+ vector.push(state.coverage.function / 100);
87
+ vector.push(state.coverage.measured ? 1 : 0);
88
+ // Quality features (6 dimensions)
89
+ vector.push(state.quality.testsPassing / 100);
90
+ vector.push(state.quality.securityScore / 100);
91
+ vector.push(state.quality.performanceScore / 100);
92
+ vector.push(Math.min(state.quality.technicalDebt / 30, 1)); // Normalize debt (30 days max)
93
+ vector.push(state.quality.testsMeasured ? 1 : 0);
94
+ vector.push(state.quality.securityMeasured ? 1 : 0);
95
+ // Fleet features (3 dimensions)
96
+ vector.push(Math.min(state.fleet.activeAgents / 10, 1)); // Normalize (10 max)
97
+ vector.push(Math.min(state.fleet.availableAgents.length / 10, 1));
98
+ vector.push(state.fleet.topologyOptimized ? 1 : 0);
99
+ // Resource features (3 dimensions)
100
+ vector.push(Math.min(state.resources.timeRemaining / 3600, 1)); // 1 hour max
101
+ vector.push(Math.min(state.resources.memoryAvailable / 8192, 1)); // 8GB max
102
+ vector.push(Math.min(state.resources.parallelSlots / 8, 1)); // 8 slots max
103
+ // Context features (4 dimensions)
104
+ vector.push(this.encodeEnvironment(state.context.environment));
105
+ vector.push(this.encodeChangeSize(state.context.changeSize));
106
+ vector.push(this.encodeRiskLevel(state.context.riskLevel));
107
+ vector.push(Math.min(state.context.previousFailures / 5, 1)); // 5 failures max
108
+ return vector;
109
+ }
110
+ /**
111
+ * Encode environment as numeric value
112
+ */
113
+ encodeEnvironment(env) {
114
+ const mapping = { development: 0, staging: 0.5, production: 1 };
115
+ return mapping[env] ?? 0;
116
+ }
117
+ /**
118
+ * Encode change size as numeric value
119
+ */
120
+ encodeChangeSize(size) {
121
+ const mapping = { small: 0, medium: 0.5, large: 1 };
122
+ return mapping[size] ?? 0.5;
123
+ }
124
+ /**
125
+ * Encode risk level as numeric value
126
+ */
127
+ encodeRiskLevel(risk) {
128
+ const mapping = { low: 0, medium: 0.33, high: 0.67, critical: 1 };
129
+ return mapping[risk] ?? 0.5;
130
+ }
131
+ /**
132
+ * Create signature hash from goal conditions
133
+ */
134
+ createGoalSignature(goalConditions) {
135
+ // Sort keys for deterministic hashing
136
+ const sortedConditions = this.sortObjectKeys(goalConditions);
137
+ const json = JSON.stringify(sortedConditions);
138
+ return crypto_1.default.createHash('sha256').update(json).digest('hex').substring(0, 16);
139
+ }
140
+ /**
141
+ * Sort object keys recursively for deterministic serialization
142
+ */
143
+ sortObjectKeys(obj) {
144
+ if (obj === null || typeof obj !== 'object')
145
+ return obj;
146
+ if (Array.isArray(obj))
147
+ return obj.map(item => this.sortObjectKeys(item));
148
+ return Object.keys(obj)
149
+ .sort()
150
+ .reduce((result, key) => {
151
+ result[key] = this.sortObjectKeys(obj[key]);
152
+ return result;
153
+ }, {});
154
+ }
155
+ /**
156
+ * Calculate cosine similarity between two vectors
157
+ */
158
+ cosineSimilarity(vectorA, vectorB) {
159
+ if (vectorA.length !== vectorB.length) {
160
+ throw new Error(`Vector length mismatch: ${vectorA.length} vs ${vectorB.length}`);
161
+ }
162
+ let dotProduct = 0;
163
+ let normA = 0;
164
+ let normB = 0;
165
+ for (let i = 0; i < vectorA.length; i++) {
166
+ dotProduct += vectorA[i] * vectorB[i];
167
+ normA += vectorA[i] * vectorA[i];
168
+ normB += vectorB[i] * vectorB[i];
169
+ }
170
+ normA = Math.sqrt(normA);
171
+ normB = Math.sqrt(normB);
172
+ if (normA === 0 || normB === 0)
173
+ return 0;
174
+ return dotProduct / (normA * normB);
175
+ }
176
+ /**
177
+ * Calculate Euclidean distance between two vectors
178
+ */
179
+ euclideanDistance(vectorA, vectorB) {
180
+ if (vectorA.length !== vectorB.length) {
181
+ throw new Error(`Vector length mismatch: ${vectorA.length} vs ${vectorB.length}`);
182
+ }
183
+ let sum = 0;
184
+ for (let i = 0; i < vectorA.length; i++) {
185
+ const diff = vectorA[i] - vectorB[i];
186
+ sum += diff * diff;
187
+ }
188
+ return Math.sqrt(sum);
189
+ }
190
+ /**
191
+ * Store plan signature for future matching
192
+ */
193
+ storePlanSignature(planId, goalConditions, initialState, actions, totalCost) {
194
+ this.ensureSchema();
195
+ const id = `sig-${Date.now()}-${SecureRandom_1.SecureRandom.randomString(9)}`;
196
+ const goalSignature = this.createGoalSignature(goalConditions);
197
+ const stateVector = this.extractStateVector(initialState);
198
+ const actionSequence = actions.map(a => a.id);
199
+ const signature = {
200
+ id,
201
+ planId,
202
+ goalSignature,
203
+ stateVector,
204
+ actionSequence,
205
+ totalCost,
206
+ successRate: 1.0,
207
+ usageCount: 0,
208
+ lastUsed: new Date(),
209
+ createdAt: new Date()
210
+ };
211
+ // Store in database
212
+ const stmt = this.db.prepare(`
213
+ INSERT OR REPLACE INTO goap_plan_signatures (
214
+ id, plan_id, goal_signature, state_vector, action_sequence,
215
+ total_cost, success_rate, usage_count, last_used, created_at
216
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
217
+ `);
218
+ stmt.run(signature.id, signature.planId, signature.goalSignature, JSON.stringify(signature.stateVector), JSON.stringify(signature.actionSequence), signature.totalCost, signature.successRate, signature.usageCount, signature.lastUsed.toISOString(), signature.createdAt.toISOString());
219
+ // Update caches
220
+ this.signatureCache.set(planId, signature);
221
+ const goalPlans = this.goalCache.get(goalSignature) || [];
222
+ if (!goalPlans.includes(planId)) {
223
+ goalPlans.push(planId);
224
+ this.goalCache.set(goalSignature, goalPlans);
225
+ }
226
+ this.logger.debug('[PlanSimilarity] Stored plan signature', {
227
+ planId,
228
+ goalSignature,
229
+ vectorLength: stateVector.length
230
+ });
231
+ return signature;
232
+ }
233
+ /**
234
+ * Find similar plans for a given goal and state
235
+ * Performance target: <100ms
236
+ */
237
+ async findSimilarPlans(goalConditions, currentState, options) {
238
+ const startTime = Date.now();
239
+ this.ensureSchema();
240
+ const maxCandidates = options?.maxCandidates ?? this.config.maxCandidates;
241
+ const minSimilarity = options?.minSimilarity ?? this.config.minSimilarityThreshold;
242
+ const goalSignature = this.createGoalSignature(goalConditions);
243
+ const currentVector = this.extractStateVector(currentState);
244
+ const similarPlans = [];
245
+ // Step 1: Check exact goal matches first (O(1) with cache)
246
+ if (this.config.useGoalCaching && this.goalCache.has(goalSignature)) {
247
+ const exactMatches = this.goalCache.get(goalSignature);
248
+ for (const planId of exactMatches) {
249
+ const signature = await this.getSignature(planId);
250
+ if (signature && signature.successRate >= 0.5) {
251
+ const similarity = this.cosineSimilarity(currentVector, signature.stateVector);
252
+ const distance = this.euclideanDistance(currentVector, signature.stateVector);
253
+ if (similarity >= minSimilarity) {
254
+ similarPlans.push({
255
+ planId,
256
+ signature,
257
+ similarityScore: similarity,
258
+ goalMatch: true,
259
+ stateDistance: distance
260
+ });
261
+ }
262
+ }
263
+ }
264
+ }
265
+ // Step 2: If not enough exact matches, search database for similar goals
266
+ if (similarPlans.length < maxCandidates) {
267
+ const candidates = this.db.prepare(`
268
+ SELECT * FROM goap_plan_signatures
269
+ WHERE success_rate >= 0.5
270
+ ORDER BY usage_count DESC, success_rate DESC
271
+ LIMIT ?
272
+ `).all(maxCandidates * 3);
273
+ for (const row of candidates) {
274
+ if (similarPlans.some(p => p.planId === row.plan_id))
275
+ continue;
276
+ const stateVector = JSON.parse(row.state_vector);
277
+ const similarity = this.cosineSimilarity(currentVector, stateVector);
278
+ const distance = this.euclideanDistance(currentVector, stateVector);
279
+ const isGoalMatch = row.goal_signature === goalSignature;
280
+ if (similarity >= minSimilarity || isGoalMatch) {
281
+ const signature = {
282
+ id: row.id,
283
+ planId: row.plan_id,
284
+ goalSignature: row.goal_signature,
285
+ stateVector,
286
+ actionSequence: JSON.parse(row.action_sequence),
287
+ totalCost: row.total_cost,
288
+ successRate: row.success_rate,
289
+ usageCount: row.usage_count,
290
+ lastUsed: new Date(row.last_used),
291
+ createdAt: new Date(row.created_at)
292
+ };
293
+ similarPlans.push({
294
+ planId: row.plan_id,
295
+ signature,
296
+ similarityScore: similarity,
297
+ goalMatch: isGoalMatch,
298
+ stateDistance: distance
299
+ });
300
+ }
301
+ }
302
+ }
303
+ // Sort by: exact goal match first, then similarity score
304
+ similarPlans.sort((a, b) => {
305
+ if (a.goalMatch !== b.goalMatch)
306
+ return b.goalMatch ? 1 : -1;
307
+ return b.similarityScore - a.similarityScore;
308
+ });
309
+ const results = similarPlans.slice(0, maxCandidates);
310
+ const elapsed = Date.now() - startTime;
311
+ this.logger.debug('[PlanSimilarity] Found similar plans', {
312
+ candidates: results.length,
313
+ exactMatches: results.filter(p => p.goalMatch).length,
314
+ elapsedMs: elapsed
315
+ });
316
+ if (elapsed > 100) {
317
+ this.logger.warn('[PlanSimilarity] Similarity search exceeded 100ms target', { elapsed });
318
+ }
319
+ return results;
320
+ }
321
+ /**
322
+ * Get signature from cache or database
323
+ */
324
+ async getSignature(planId) {
325
+ // Check cache first
326
+ if (this.signatureCache.has(planId)) {
327
+ return this.signatureCache.get(planId);
328
+ }
329
+ // Load from database
330
+ const row = this.db.prepare(`
331
+ SELECT * FROM goap_plan_signatures WHERE plan_id = ?
332
+ `).get(planId);
333
+ if (!row)
334
+ return null;
335
+ const signature = {
336
+ id: row.id,
337
+ planId: row.plan_id,
338
+ goalSignature: row.goal_signature,
339
+ stateVector: JSON.parse(row.state_vector),
340
+ actionSequence: JSON.parse(row.action_sequence),
341
+ totalCost: row.total_cost,
342
+ successRate: row.success_rate,
343
+ usageCount: row.usage_count,
344
+ lastUsed: new Date(row.last_used),
345
+ createdAt: new Date(row.created_at)
346
+ };
347
+ this.signatureCache.set(planId, signature);
348
+ return signature;
349
+ }
350
+ /**
351
+ * Record plan reuse (increments usage count)
352
+ */
353
+ recordPlanReuse(planId, success) {
354
+ this.ensureSchema();
355
+ // Update usage count and success rate
356
+ const current = this.db.prepare(`
357
+ SELECT success_rate, usage_count FROM goap_plan_signatures WHERE plan_id = ?
358
+ `).get(planId);
359
+ if (!current)
360
+ return;
361
+ const newUsageCount = current.usage_count + 1;
362
+ // Exponential moving average for success rate
363
+ const alpha = 0.1;
364
+ const newSuccessRate = current.success_rate * (1 - alpha) + (success ? 1 : 0) * alpha;
365
+ this.db.prepare(`
366
+ UPDATE goap_plan_signatures
367
+ SET usage_count = ?, success_rate = ?, last_used = CURRENT_TIMESTAMP
368
+ WHERE plan_id = ?
369
+ `).run(newUsageCount, newSuccessRate, planId);
370
+ // Update cache
371
+ const cached = this.signatureCache.get(planId);
372
+ if (cached) {
373
+ cached.usageCount = newUsageCount;
374
+ cached.successRate = newSuccessRate;
375
+ cached.lastUsed = new Date();
376
+ }
377
+ this.logger.debug('[PlanSimilarity] Recorded plan reuse', {
378
+ planId,
379
+ success,
380
+ usageCount: newUsageCount,
381
+ successRate: newSuccessRate
382
+ });
383
+ }
384
+ /**
385
+ * Get plan reuse statistics
386
+ */
387
+ getReuseStats() {
388
+ this.ensureSchema();
389
+ const totalRow = this.db.prepare(`
390
+ SELECT COUNT(*) as total FROM goap_plan_signatures
391
+ `).get();
392
+ const reusedRow = this.db.prepare(`
393
+ SELECT COUNT(*) as reused FROM goap_plan_signatures WHERE usage_count > 0
394
+ `).get();
395
+ const avgRow = this.db.prepare(`
396
+ SELECT AVG(success_rate) as avg_success FROM goap_plan_signatures WHERE usage_count > 0
397
+ `).get();
398
+ const topGoalsRows = this.db.prepare(`
399
+ SELECT goal_signature, SUM(usage_count) as total_reuse
400
+ FROM goap_plan_signatures
401
+ WHERE usage_count > 0
402
+ GROUP BY goal_signature
403
+ ORDER BY total_reuse DESC
404
+ LIMIT 5
405
+ `).all();
406
+ return {
407
+ totalPlans: totalRow.total,
408
+ reusedPlans: reusedRow.reused,
409
+ reuseRate: totalRow.total > 0 ? reusedRow.reused / totalRow.total : 0,
410
+ avgSimilarityScore: avgRow.avg_success ?? 0,
411
+ topGoals: topGoalsRows.map(row => ({
412
+ goal: row.goal_signature,
413
+ reuseCount: row.total_reuse
414
+ }))
415
+ };
416
+ }
417
+ /**
418
+ * Clear signature cache (for testing or memory management)
419
+ */
420
+ clearCache() {
421
+ this.goalCache.clear();
422
+ this.signatureCache.clear();
423
+ this.logger.debug('[PlanSimilarity] Cache cleared');
424
+ }
425
+ /**
426
+ * Preload signatures into cache for faster matching
427
+ */
428
+ async preloadCache(limit = 100) {
429
+ this.ensureSchema();
430
+ const rows = this.db.prepare(`
431
+ SELECT * FROM goap_plan_signatures
432
+ ORDER BY usage_count DESC, success_rate DESC
433
+ LIMIT ?
434
+ `).all(limit);
435
+ for (const row of rows) {
436
+ const signature = {
437
+ id: row.id,
438
+ planId: row.plan_id,
439
+ goalSignature: row.goal_signature,
440
+ stateVector: JSON.parse(row.state_vector),
441
+ actionSequence: JSON.parse(row.action_sequence),
442
+ totalCost: row.total_cost,
443
+ successRate: row.success_rate,
444
+ usageCount: row.usage_count,
445
+ lastUsed: new Date(row.last_used),
446
+ createdAt: new Date(row.created_at)
447
+ };
448
+ this.signatureCache.set(signature.planId, signature);
449
+ // Update goal cache
450
+ const goalPlans = this.goalCache.get(signature.goalSignature) || [];
451
+ if (!goalPlans.includes(signature.planId)) {
452
+ goalPlans.push(signature.planId);
453
+ this.goalCache.set(signature.goalSignature, goalPlans);
454
+ }
455
+ }
456
+ this.logger.debug('[PlanSimilarity] Preloaded cache', {
457
+ signatures: this.signatureCache.size,
458
+ goals: this.goalCache.size
459
+ });
460
+ return rows.length;
461
+ }
462
+ }
463
+ exports.PlanSimilarity = PlanSimilarity;
464
+ //# sourceMappingURL=PlanSimilarity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanSimilarity.js","sourceRoot":"","sources":["../../src/planning/PlanSimilarity.ts"],"names":[],"mappings":"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"}