agentic-qe 3.3.2 → 3.3.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 (209) hide show
  1. package/.claude/helpers/statusline-v3.cjs +96 -27
  2. package/README.md +6 -3
  3. package/package.json +1 -1
  4. package/scripts/sync-claude-flow.cjs +99 -0
  5. package/v3/CHANGELOG.md +87 -0
  6. package/v3/README.md +9 -5
  7. package/v3/dist/cli/bundle.js +43386 -37651
  8. package/v3/dist/coordination/consensus/domain-findings.d.ts +202 -0
  9. package/v3/dist/coordination/consensus/domain-findings.d.ts.map +1 -0
  10. package/v3/dist/coordination/consensus/domain-findings.js +66 -0
  11. package/v3/dist/coordination/consensus/domain-findings.js.map +1 -0
  12. package/v3/dist/coordination/consensus/index.d.ts +2 -0
  13. package/v3/dist/coordination/consensus/index.d.ts.map +1 -1
  14. package/v3/dist/coordination/consensus/index.js +4 -0
  15. package/v3/dist/coordination/consensus/index.js.map +1 -1
  16. package/v3/dist/coordination/index.d.ts +1 -0
  17. package/v3/dist/coordination/index.d.ts.map +1 -1
  18. package/v3/dist/coordination/index.js +4 -0
  19. package/v3/dist/coordination/index.js.map +1 -1
  20. package/v3/dist/coordination/mixins/consensus-enabled-domain.d.ts +225 -0
  21. package/v3/dist/coordination/mixins/consensus-enabled-domain.d.ts.map +1 -0
  22. package/v3/dist/coordination/mixins/consensus-enabled-domain.js +466 -0
  23. package/v3/dist/coordination/mixins/consensus-enabled-domain.js.map +1 -0
  24. package/v3/dist/coordination/mixins/index.d.ts +14 -0
  25. package/v3/dist/coordination/mixins/index.d.ts.map +1 -0
  26. package/v3/dist/coordination/mixins/index.js +28 -0
  27. package/v3/dist/coordination/mixins/index.js.map +1 -0
  28. package/v3/dist/coordination/mixins/mincut-aware-domain.d.ts +227 -0
  29. package/v3/dist/coordination/mixins/mincut-aware-domain.d.ts.map +1 -0
  30. package/v3/dist/coordination/mixins/mincut-aware-domain.js +368 -0
  31. package/v3/dist/coordination/mixins/mincut-aware-domain.js.map +1 -0
  32. package/v3/dist/coordination/queen-coordinator.d.ts +10 -0
  33. package/v3/dist/coordination/queen-coordinator.d.ts.map +1 -1
  34. package/v3/dist/coordination/queen-coordinator.js +40 -0
  35. package/v3/dist/coordination/queen-coordinator.js.map +1 -1
  36. package/v3/dist/coordination/task-executor.d.ts +21 -1
  37. package/v3/dist/coordination/task-executor.d.ts.map +1 -1
  38. package/v3/dist/coordination/task-executor.js +222 -5
  39. package/v3/dist/coordination/task-executor.js.map +1 -1
  40. package/v3/dist/domains/chaos-resilience/coordinator.d.ts +92 -0
  41. package/v3/dist/domains/chaos-resilience/coordinator.d.ts.map +1 -1
  42. package/v3/dist/domains/chaos-resilience/coordinator.js +241 -1
  43. package/v3/dist/domains/chaos-resilience/coordinator.js.map +1 -1
  44. package/v3/dist/domains/chaos-resilience/plugin.js +1 -1
  45. package/v3/dist/domains/chaos-resilience/plugin.js.map +1 -1
  46. package/v3/dist/domains/chaos-resilience/services/chaos-engineer.d.ts +29 -2
  47. package/v3/dist/domains/chaos-resilience/services/chaos-engineer.d.ts.map +1 -1
  48. package/v3/dist/domains/chaos-resilience/services/chaos-engineer.js +62 -3
  49. package/v3/dist/domains/chaos-resilience/services/chaos-engineer.js.map +1 -1
  50. package/v3/dist/domains/code-intelligence/coordinator.d.ts +112 -0
  51. package/v3/dist/domains/code-intelligence/coordinator.d.ts.map +1 -1
  52. package/v3/dist/domains/code-intelligence/coordinator.js +221 -0
  53. package/v3/dist/domains/code-intelligence/coordinator.js.map +1 -1
  54. package/v3/dist/domains/code-intelligence/services/knowledge-graph.d.ts +66 -2
  55. package/v3/dist/domains/code-intelligence/services/knowledge-graph.d.ts.map +1 -1
  56. package/v3/dist/domains/code-intelligence/services/knowledge-graph.js +253 -3
  57. package/v3/dist/domains/code-intelligence/services/knowledge-graph.js.map +1 -1
  58. package/v3/dist/domains/contract-testing/coordinator.d.ts +89 -1
  59. package/v3/dist/domains/contract-testing/coordinator.d.ts.map +1 -1
  60. package/v3/dist/domains/contract-testing/coordinator.js +222 -1
  61. package/v3/dist/domains/contract-testing/coordinator.js.map +1 -1
  62. package/v3/dist/domains/contract-testing/interfaces.d.ts +29 -1
  63. package/v3/dist/domains/contract-testing/interfaces.d.ts.map +1 -1
  64. package/v3/dist/domains/contract-testing/plugin.js +1 -1
  65. package/v3/dist/domains/contract-testing/plugin.js.map +1 -1
  66. package/v3/dist/domains/contract-testing/services/contract-validator.d.ts +29 -2
  67. package/v3/dist/domains/contract-testing/services/contract-validator.d.ts.map +1 -1
  68. package/v3/dist/domains/contract-testing/services/contract-validator.js +58 -3
  69. package/v3/dist/domains/contract-testing/services/contract-validator.js.map +1 -1
  70. package/v3/dist/domains/coverage-analysis/coordinator.d.ts +95 -2
  71. package/v3/dist/domains/coverage-analysis/coordinator.d.ts.map +1 -1
  72. package/v3/dist/domains/coverage-analysis/coordinator.js +274 -6
  73. package/v3/dist/domains/coverage-analysis/coordinator.js.map +1 -1
  74. package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.d.ts +119 -3
  75. package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.d.ts.map +1 -1
  76. package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.js +267 -5
  77. package/v3/dist/domains/coverage-analysis/services/coverage-analyzer.js.map +1 -1
  78. package/v3/dist/domains/coverage-analysis/services/gap-detector.d.ts +111 -2
  79. package/v3/dist/domains/coverage-analysis/services/gap-detector.d.ts.map +1 -1
  80. package/v3/dist/domains/coverage-analysis/services/gap-detector.js +231 -3
  81. package/v3/dist/domains/coverage-analysis/services/gap-detector.js.map +1 -1
  82. package/v3/dist/domains/defect-intelligence/coordinator.d.ts +80 -1
  83. package/v3/dist/domains/defect-intelligence/coordinator.d.ts.map +1 -1
  84. package/v3/dist/domains/defect-intelligence/coordinator.js +262 -7
  85. package/v3/dist/domains/defect-intelligence/coordinator.js.map +1 -1
  86. package/v3/dist/domains/defect-intelligence/interfaces.d.ts +17 -0
  87. package/v3/dist/domains/defect-intelligence/interfaces.d.ts.map +1 -1
  88. package/v3/dist/domains/defect-intelligence/services/defect-predictor.d.ts +91 -2
  89. package/v3/dist/domains/defect-intelligence/services/defect-predictor.d.ts.map +1 -1
  90. package/v3/dist/domains/defect-intelligence/services/defect-predictor.js +274 -7
  91. package/v3/dist/domains/defect-intelligence/services/defect-predictor.js.map +1 -1
  92. package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.d.ts +79 -2
  93. package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.d.ts.map +1 -1
  94. package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.js +259 -3
  95. package/v3/dist/domains/defect-intelligence/services/root-cause-analyzer.js.map +1 -1
  96. package/v3/dist/domains/domain-interface.d.ts +155 -0
  97. package/v3/dist/domains/domain-interface.d.ts.map +1 -1
  98. package/v3/dist/domains/domain-interface.js +140 -0
  99. package/v3/dist/domains/domain-interface.js.map +1 -1
  100. package/v3/dist/domains/learning-optimization/coordinator.d.ts +88 -0
  101. package/v3/dist/domains/learning-optimization/coordinator.d.ts.map +1 -1
  102. package/v3/dist/domains/learning-optimization/coordinator.js +227 -1
  103. package/v3/dist/domains/learning-optimization/coordinator.js.map +1 -1
  104. package/v3/dist/domains/learning-optimization/index.d.ts +1 -1
  105. package/v3/dist/domains/learning-optimization/index.d.ts.map +1 -1
  106. package/v3/dist/domains/learning-optimization/index.js.map +1 -1
  107. package/v3/dist/domains/learning-optimization/interfaces.d.ts +4 -0
  108. package/v3/dist/domains/learning-optimization/interfaces.d.ts.map +1 -1
  109. package/v3/dist/domains/learning-optimization/plugin.js +1 -1
  110. package/v3/dist/domains/learning-optimization/plugin.js.map +1 -1
  111. package/v3/dist/domains/learning-optimization/services/learning-coordinator.d.ts +54 -2
  112. package/v3/dist/domains/learning-optimization/services/learning-coordinator.d.ts.map +1 -1
  113. package/v3/dist/domains/learning-optimization/services/learning-coordinator.js +90 -3
  114. package/v3/dist/domains/learning-optimization/services/learning-coordinator.js.map +1 -1
  115. package/v3/dist/domains/quality-assessment/coordinator.d.ts +104 -0
  116. package/v3/dist/domains/quality-assessment/coordinator.d.ts.map +1 -1
  117. package/v3/dist/domains/quality-assessment/coordinator.js +354 -6
  118. package/v3/dist/domains/quality-assessment/coordinator.js.map +1 -1
  119. package/v3/dist/domains/quality-assessment/interfaces.d.ts +22 -0
  120. package/v3/dist/domains/quality-assessment/interfaces.d.ts.map +1 -1
  121. package/v3/dist/domains/quality-assessment/services/deployment-advisor.d.ts +61 -2
  122. package/v3/dist/domains/quality-assessment/services/deployment-advisor.d.ts.map +1 -1
  123. package/v3/dist/domains/quality-assessment/services/deployment-advisor.js +213 -5
  124. package/v3/dist/domains/quality-assessment/services/deployment-advisor.js.map +1 -1
  125. package/v3/dist/domains/quality-assessment/services/quality-analyzer.d.ts +59 -4
  126. package/v3/dist/domains/quality-assessment/services/quality-analyzer.d.ts.map +1 -1
  127. package/v3/dist/domains/quality-assessment/services/quality-analyzer.js +195 -3
  128. package/v3/dist/domains/quality-assessment/services/quality-analyzer.js.map +1 -1
  129. package/v3/dist/domains/requirements-validation/coordinator.d.ts +78 -0
  130. package/v3/dist/domains/requirements-validation/coordinator.d.ts.map +1 -1
  131. package/v3/dist/domains/requirements-validation/coordinator.js +189 -0
  132. package/v3/dist/domains/requirements-validation/coordinator.js.map +1 -1
  133. package/v3/dist/domains/requirements-validation/interfaces.d.ts +4 -0
  134. package/v3/dist/domains/requirements-validation/interfaces.d.ts.map +1 -1
  135. package/v3/dist/domains/requirements-validation/services/requirements-validator.d.ts +106 -2
  136. package/v3/dist/domains/requirements-validation/services/requirements-validator.d.ts.map +1 -1
  137. package/v3/dist/domains/requirements-validation/services/requirements-validator.js +263 -3
  138. package/v3/dist/domains/requirements-validation/services/requirements-validator.js.map +1 -1
  139. package/v3/dist/domains/security-compliance/coordinator.d.ts +56 -1
  140. package/v3/dist/domains/security-compliance/coordinator.d.ts.map +1 -1
  141. package/v3/dist/domains/security-compliance/coordinator.js +241 -17
  142. package/v3/dist/domains/security-compliance/coordinator.js.map +1 -1
  143. package/v3/dist/domains/security-compliance/interfaces.d.ts +2 -0
  144. package/v3/dist/domains/security-compliance/interfaces.d.ts.map +1 -1
  145. package/v3/dist/domains/security-compliance/services/security-scanner.d.ts +33 -2
  146. package/v3/dist/domains/security-compliance/services/security-scanner.d.ts.map +1 -1
  147. package/v3/dist/domains/security-compliance/services/security-scanner.js +107 -3
  148. package/v3/dist/domains/security-compliance/services/security-scanner.js.map +1 -1
  149. package/v3/dist/domains/test-execution/coordinator.d.ts +89 -0
  150. package/v3/dist/domains/test-execution/coordinator.d.ts.map +1 -1
  151. package/v3/dist/domains/test-execution/coordinator.js +259 -2
  152. package/v3/dist/domains/test-execution/coordinator.js.map +1 -1
  153. package/v3/dist/domains/test-execution/services/test-executor.d.ts +30 -2
  154. package/v3/dist/domains/test-execution/services/test-executor.d.ts.map +1 -1
  155. package/v3/dist/domains/test-execution/services/test-executor.js +64 -3
  156. package/v3/dist/domains/test-execution/services/test-executor.js.map +1 -1
  157. package/v3/dist/domains/test-generation/coordinator.d.ts +97 -0
  158. package/v3/dist/domains/test-generation/coordinator.d.ts.map +1 -1
  159. package/v3/dist/domains/test-generation/coordinator.js +237 -0
  160. package/v3/dist/domains/test-generation/coordinator.js.map +1 -1
  161. package/v3/dist/domains/test-generation/interfaces.d.ts +2 -0
  162. package/v3/dist/domains/test-generation/interfaces.d.ts.map +1 -1
  163. package/v3/dist/domains/test-generation/services/test-generator.d.ts +32 -0
  164. package/v3/dist/domains/test-generation/services/test-generator.d.ts.map +1 -1
  165. package/v3/dist/domains/test-generation/services/test-generator.js +158 -3
  166. package/v3/dist/domains/test-generation/services/test-generator.js.map +1 -1
  167. package/v3/dist/domains/visual-accessibility/coordinator.d.ts +77 -0
  168. package/v3/dist/domains/visual-accessibility/coordinator.d.ts.map +1 -1
  169. package/v3/dist/domains/visual-accessibility/coordinator.js +210 -2
  170. package/v3/dist/domains/visual-accessibility/coordinator.js.map +1 -1
  171. package/v3/dist/domains/visual-accessibility/plugin.d.ts.map +1 -1
  172. package/v3/dist/domains/visual-accessibility/plugin.js +3 -3
  173. package/v3/dist/domains/visual-accessibility/plugin.js.map +1 -1
  174. package/v3/dist/domains/visual-accessibility/services/visual-tester.d.ts +47 -2
  175. package/v3/dist/domains/visual-accessibility/services/visual-tester.d.ts.map +1 -1
  176. package/v3/dist/domains/visual-accessibility/services/visual-tester.js +87 -3
  177. package/v3/dist/domains/visual-accessibility/services/visual-tester.js.map +1 -1
  178. package/v3/dist/learning/experience-capture-middleware.d.ts +119 -0
  179. package/v3/dist/learning/experience-capture-middleware.d.ts.map +1 -0
  180. package/v3/dist/learning/experience-capture-middleware.js +416 -0
  181. package/v3/dist/learning/experience-capture-middleware.js.map +1 -0
  182. package/v3/dist/mcp/bundle.js +60723 -54421
  183. package/v3/dist/mcp/handlers/domain-handlers.d.ts +12 -13
  184. package/v3/dist/mcp/handlers/domain-handlers.d.ts.map +1 -1
  185. package/v3/dist/mcp/handlers/index.d.ts +1 -1
  186. package/v3/dist/mcp/handlers/index.d.ts.map +1 -1
  187. package/v3/dist/mcp/handlers/index.js +2 -2
  188. package/v3/dist/mcp/handlers/index.js.map +1 -1
  189. package/v3/dist/mcp/handlers/wrapped-domain-handlers.d.ts +30 -0
  190. package/v3/dist/mcp/handlers/wrapped-domain-handlers.d.ts.map +1 -0
  191. package/v3/dist/mcp/handlers/wrapped-domain-handlers.js +75 -0
  192. package/v3/dist/mcp/handlers/wrapped-domain-handlers.js.map +1 -0
  193. package/v3/dist/mcp/tools/chaos-resilience/inject.js +1 -1
  194. package/v3/dist/mcp/tools/chaos-resilience/inject.js.map +1 -1
  195. package/v3/dist/mcp/tools/contract-testing/validate.js +1 -1
  196. package/v3/dist/mcp/tools/contract-testing/validate.js.map +1 -1
  197. package/v3/dist/mcp/tools/learning-optimization/optimize.js +1 -1
  198. package/v3/dist/mcp/tools/learning-optimization/optimize.js.map +1 -1
  199. package/v3/dist/mcp/tools/visual-accessibility/index.js +2 -2
  200. package/v3/dist/mcp/tools/visual-accessibility/index.js.map +1 -1
  201. package/v3/dist/routing/qe-agent-registry.d.ts +1 -1
  202. package/v3/dist/routing/qe-agent-registry.d.ts.map +1 -1
  203. package/v3/dist/routing/qe-agent-registry.js +20 -1
  204. package/v3/dist/routing/qe-agent-registry.js.map +1 -1
  205. package/v3/dist/sync/claude-flow-bridge.d.ts +63 -0
  206. package/v3/dist/sync/claude-flow-bridge.d.ts.map +1 -0
  207. package/v3/dist/sync/claude-flow-bridge.js +320 -0
  208. package/v3/dist/sync/claude-flow-bridge.js.map +1 -0
  209. package/v3/package.json +1 -1
@@ -0,0 +1,416 @@
1
+ /**
2
+ * Experience Capture Middleware
3
+ *
4
+ * Wraps domain task execution to automatically capture experiences
5
+ * to the V3 database for cross-session learning.
6
+ *
7
+ * This middleware ensures ALL invocation paths (MCP, CLI, direct) capture learning:
8
+ * - Starts experience tracking before execution
9
+ * - Records steps during execution
10
+ * - Persists outcome to V3 database after completion
11
+ *
12
+ * ADR-051: Unified learning capture across all execution paths
13
+ */
14
+ import { v4 as uuidv4 } from 'uuid';
15
+ import { getUnifiedMemory } from '../kernel/unified-memory.js';
16
+ // ============================================================================
17
+ // Active Experience Tracking
18
+ // ============================================================================
19
+ /** Maximum time an experience can be active before cleanup (10 minutes) */
20
+ const EXPERIENCE_TIMEOUT_MS = 10 * 60 * 1000;
21
+ /** Interval for cleanup checks (2 minutes) */
22
+ const CLEANUP_INTERVAL_MS = 2 * 60 * 1000;
23
+ /** Maximum size for JSON serialization (1MB) to prevent DoS via large payloads */
24
+ const MAX_JSON_SIZE_BYTES = 1024 * 1024;
25
+ /**
26
+ * Safely stringify JSON with size limit to prevent memory exhaustion
27
+ * Returns null if serialization fails or exceeds size limit
28
+ */
29
+ function safeJsonStringify(value, maxSize = MAX_JSON_SIZE_BYTES) {
30
+ if (value === undefined || value === null) {
31
+ return null;
32
+ }
33
+ try {
34
+ const json = JSON.stringify(value);
35
+ if (json.length > maxSize) {
36
+ console.warn(`[ExperienceCaptureMiddleware] JSON payload exceeds size limit ` +
37
+ `(${json.length} > ${maxSize} bytes), truncating`);
38
+ // Return truncated version with marker
39
+ return JSON.stringify({
40
+ _truncated: true,
41
+ _originalSize: json.length,
42
+ _preview: typeof value === 'object' ? Object.keys(value).slice(0, 10) : String(value).slice(0, 100),
43
+ });
44
+ }
45
+ return json;
46
+ }
47
+ catch (error) {
48
+ console.warn('[ExperienceCaptureMiddleware] Failed to serialize JSON:', error);
49
+ return null;
50
+ }
51
+ }
52
+ const activeExperiences = new Map();
53
+ let cleanupTimer = null;
54
+ /**
55
+ * Clean up stale experiences that have been active longer than EXPERIENCE_TIMEOUT_MS
56
+ * This prevents memory leaks from experiences that were started but never completed.
57
+ */
58
+ export function cleanupStaleExperiences() {
59
+ const now = Date.now();
60
+ let cleaned = 0;
61
+ for (const [id, experience] of activeExperiences) {
62
+ const ageMs = now - experience.context.startedAt.getTime();
63
+ if (ageMs > EXPERIENCE_TIMEOUT_MS) {
64
+ console.warn(`[ExperienceCaptureMiddleware] Cleaning up stale experience: ${id} ` +
65
+ `(age=${Math.round(ageMs / 1000)}s, domain=${experience.context.domain})`);
66
+ activeExperiences.delete(id);
67
+ cleaned++;
68
+ }
69
+ }
70
+ if (cleaned > 0) {
71
+ console.log(`[ExperienceCaptureMiddleware] Cleaned ${cleaned} stale experiences`);
72
+ }
73
+ return cleaned;
74
+ }
75
+ /**
76
+ * Start periodic cleanup of stale experiences
77
+ */
78
+ function startCleanupTimer() {
79
+ if (cleanupTimer)
80
+ return;
81
+ cleanupTimer = setInterval(() => {
82
+ cleanupStaleExperiences();
83
+ }, CLEANUP_INTERVAL_MS);
84
+ // Don't keep the process alive just for cleanup
85
+ cleanupTimer.unref();
86
+ }
87
+ /**
88
+ * Stop the cleanup timer (for testing or shutdown)
89
+ */
90
+ export function stopCleanupTimer() {
91
+ if (cleanupTimer) {
92
+ clearInterval(cleanupTimer);
93
+ cleanupTimer = null;
94
+ }
95
+ }
96
+ // ============================================================================
97
+ // Middleware Implementation
98
+ // ============================================================================
99
+ let memoryManager = null;
100
+ // Promise-based lock to prevent initialization race conditions
101
+ let initPromise = null;
102
+ /**
103
+ * Initialize the experience capture middleware
104
+ */
105
+ export async function initializeExperienceCapture() {
106
+ // Use promise-based lock to prevent concurrent initialization
107
+ if (initPromise) {
108
+ return initPromise;
109
+ }
110
+ initPromise = doInitialize();
111
+ return initPromise;
112
+ }
113
+ async function doInitialize() {
114
+ try {
115
+ memoryManager = getUnifiedMemory();
116
+ await memoryManager.initialize();
117
+ // Ensure experience tables exist
118
+ const db = memoryManager.getDatabase();
119
+ if (db) {
120
+ db.exec(`
121
+ CREATE TABLE IF NOT EXISTS captured_experiences (
122
+ id TEXT PRIMARY KEY,
123
+ task TEXT NOT NULL,
124
+ agent TEXT NOT NULL,
125
+ domain TEXT NOT NULL,
126
+ success INTEGER NOT NULL DEFAULT 0,
127
+ quality REAL NOT NULL DEFAULT 0.5,
128
+ duration_ms INTEGER NOT NULL DEFAULT 0,
129
+ model_tier INTEGER,
130
+ routing_json TEXT,
131
+ steps_json TEXT,
132
+ result_json TEXT,
133
+ error TEXT,
134
+ started_at TEXT NOT NULL,
135
+ completed_at TEXT NOT NULL DEFAULT (datetime('now')),
136
+ source TEXT DEFAULT 'middleware'
137
+ );
138
+ CREATE INDEX IF NOT EXISTS idx_captured_exp_domain ON captured_experiences(domain);
139
+ CREATE INDEX IF NOT EXISTS idx_captured_exp_success ON captured_experiences(success);
140
+ CREATE INDEX IF NOT EXISTS idx_captured_exp_agent ON captured_experiences(agent);
141
+ CREATE INDEX IF NOT EXISTS idx_captured_exp_completed ON captured_experiences(completed_at DESC);
142
+ `);
143
+ }
144
+ // Start periodic cleanup of stale experiences
145
+ startCleanupTimer();
146
+ console.log('[ExperienceCaptureMiddleware] Initialized');
147
+ }
148
+ catch (error) {
149
+ console.error('[ExperienceCaptureMiddleware] Failed to initialize:', error);
150
+ // Reset promise to allow retry on next call
151
+ initPromise = null;
152
+ // Don't throw - allow system to continue without capture
153
+ }
154
+ }
155
+ /**
156
+ * Start capturing an experience
157
+ */
158
+ export function startExperience(task, agent, domain, options) {
159
+ const id = `exp-${uuidv4()}`;
160
+ const context = {
161
+ id,
162
+ task,
163
+ agent,
164
+ domain,
165
+ startedAt: new Date(),
166
+ modelTier: options?.modelTier,
167
+ routing: options?.routing,
168
+ };
169
+ activeExperiences.set(id, {
170
+ context,
171
+ steps: [],
172
+ });
173
+ return id;
174
+ }
175
+ /**
176
+ * Record a step in an active experience
177
+ */
178
+ export function recordExperienceStep(experienceId, step) {
179
+ const experience = activeExperiences.get(experienceId);
180
+ if (!experience) {
181
+ console.warn(`[ExperienceCaptureMiddleware] Unknown experience: ${experienceId}`);
182
+ return;
183
+ }
184
+ experience.steps.push(step);
185
+ }
186
+ /**
187
+ * Complete an experience and persist to database
188
+ */
189
+ export async function completeExperience(experienceId, success, result, error) {
190
+ const experience = activeExperiences.get(experienceId);
191
+ if (!experience) {
192
+ console.warn(`[ExperienceCaptureMiddleware] Unknown experience: ${experienceId}`);
193
+ return null;
194
+ }
195
+ const { context, steps } = experience;
196
+ const endedAt = new Date();
197
+ const durationMs = endedAt.getTime() - context.startedAt.getTime();
198
+ // Calculate quality from steps or default
199
+ const quality = steps.length > 0
200
+ ? steps.reduce((sum, s) => sum + s.quality, 0) / steps.length
201
+ : (success ? 0.7 : 0.3);
202
+ const outcome = {
203
+ id: experienceId,
204
+ success,
205
+ quality,
206
+ durationMs,
207
+ error,
208
+ steps,
209
+ result,
210
+ };
211
+ // Remove from active tracking
212
+ activeExperiences.delete(experienceId);
213
+ // Persist to database
214
+ await persistExperience(context, outcome);
215
+ // Also persist to sona_patterns for learning
216
+ await persistToSonaPatterns(context, outcome);
217
+ console.log(`[ExperienceCaptureMiddleware] Captured: ${context.domain}/${context.agent} ` +
218
+ `success=${success} quality=${quality.toFixed(2)} duration=${durationMs}ms ` +
219
+ `steps=${steps.length}`);
220
+ return outcome;
221
+ }
222
+ /**
223
+ * Persist experience to captured_experiences table
224
+ */
225
+ async function persistExperience(context, outcome) {
226
+ // Ensure initialized (idempotent - returns immediately if already initialized)
227
+ await initializeExperienceCapture();
228
+ if (!memoryManager) {
229
+ console.warn('[ExperienceCaptureMiddleware] Memory manager not available');
230
+ return;
231
+ }
232
+ try {
233
+ const db = memoryManager.getDatabase();
234
+ if (!db)
235
+ return;
236
+ const stmt = db.prepare(`
237
+ INSERT OR REPLACE INTO captured_experiences
238
+ (id, task, agent, domain, success, quality, duration_ms, model_tier,
239
+ routing_json, steps_json, result_json, error, started_at, completed_at, source)
240
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), ?)
241
+ `);
242
+ stmt.run(outcome.id, context.task, context.agent, context.domain, outcome.success ? 1 : 0, outcome.quality, outcome.durationMs, context.modelTier || null, safeJsonStringify(context.routing), safeJsonStringify(outcome.steps), safeJsonStringify(outcome.result), outcome.error || null, context.startedAt.toISOString(), 'middleware');
243
+ }
244
+ catch (error) {
245
+ console.error('[ExperienceCaptureMiddleware] Failed to persist experience:', error);
246
+ }
247
+ }
248
+ /**
249
+ * Persist to sona_patterns for learning integration
250
+ */
251
+ async function persistToSonaPatterns(context, outcome) {
252
+ if (!memoryManager)
253
+ return;
254
+ try {
255
+ const db = memoryManager.getDatabase();
256
+ if (!db)
257
+ return;
258
+ // Only store successful patterns with decent quality
259
+ if (!outcome.success || outcome.quality < 0.5)
260
+ return;
261
+ const stmt = db.prepare(`
262
+ INSERT OR REPLACE INTO sona_patterns
263
+ (id, type, domain, action_type, action_value,
264
+ outcome_reward, outcome_success, outcome_quality,
265
+ confidence, usage_count, metadata, created_at, updated_at)
266
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))
267
+ `);
268
+ stmt.run(`sona-${outcome.id}`, 'task-execution', context.domain, context.agent, safeJsonStringify({ task: context.task.slice(0, 200) }), outcome.quality, 1, outcome.quality, outcome.quality, 1, safeJsonStringify({
269
+ experienceId: outcome.id,
270
+ durationMs: outcome.durationMs,
271
+ stepsCount: outcome.steps.length,
272
+ modelTier: context.modelTier,
273
+ }));
274
+ }
275
+ catch (error) {
276
+ // Log but don't fail - sona_patterns might not exist
277
+ console.warn('[ExperienceCaptureMiddleware] Failed to persist to sona_patterns:', error);
278
+ }
279
+ }
280
+ // ============================================================================
281
+ // Handler Wrapper
282
+ // ============================================================================
283
+ /**
284
+ * Wrap an async handler function to capture experiences
285
+ *
286
+ * Usage:
287
+ * ```typescript
288
+ * const wrappedHandler = wrapWithExperienceCapture(
289
+ * handleTestGenerate,
290
+ * 'test-generation',
291
+ * 'test-generator'
292
+ * );
293
+ * ```
294
+ */
295
+ export function wrapWithExperienceCapture(handler, domain, agent) {
296
+ return async (params) => {
297
+ // Ensure initialized (idempotent - returns immediately if already initialized)
298
+ await initializeExperienceCapture();
299
+ // Extract task description from params if available
300
+ const task = extractTaskDescription(params, domain);
301
+ // Extract routing info if available
302
+ const routing = extractRouting(params);
303
+ // Start experience capture
304
+ const expId = startExperience(task, agent, domain, {
305
+ modelTier: routing?.tier,
306
+ routing,
307
+ });
308
+ const startTime = Date.now();
309
+ try {
310
+ // Execute the handler
311
+ const result = await handler(params);
312
+ const durationMs = Date.now() - startTime;
313
+ // Record execution step
314
+ recordExperienceStep(expId, {
315
+ action: `execute-${domain}`,
316
+ result: result.success ? 'success' : 'failure',
317
+ quality: result.success ? 0.8 : 0.2,
318
+ durationMs,
319
+ data: result.data ? { hasData: true } : undefined,
320
+ });
321
+ // Complete experience
322
+ await completeExperience(expId, result.success, result.data, result.error);
323
+ return result;
324
+ }
325
+ catch (error) {
326
+ const durationMs = Date.now() - startTime;
327
+ // Record failure step
328
+ recordExperienceStep(expId, {
329
+ action: `execute-${domain}`,
330
+ result: 'failure',
331
+ quality: 0.0,
332
+ durationMs,
333
+ });
334
+ // Complete with error
335
+ await completeExperience(expId, false, undefined, error instanceof Error ? error.message : String(error));
336
+ throw error;
337
+ }
338
+ };
339
+ }
340
+ // ============================================================================
341
+ // Helper Functions
342
+ // ============================================================================
343
+ function extractTaskDescription(params, domain) {
344
+ if (!params || typeof params !== 'object') {
345
+ return `Execute ${domain} task`;
346
+ }
347
+ const p = params;
348
+ // Try common task description fields
349
+ if (typeof p.task === 'string')
350
+ return p.task;
351
+ if (typeof p.description === 'string')
352
+ return p.description;
353
+ if (typeof p.sourceCode === 'string')
354
+ return `Generate tests for code (${p.sourceCode.length} chars)`;
355
+ if (typeof p.target === 'string')
356
+ return `Analyze ${p.target}`;
357
+ if (typeof p.url === 'string')
358
+ return `Test accessibility for ${p.url}`;
359
+ if (Array.isArray(p.testFiles))
360
+ return `Execute ${p.testFiles.length} test files`;
361
+ return `Execute ${domain} task`;
362
+ }
363
+ function extractRouting(params) {
364
+ if (!params || typeof params !== 'object')
365
+ return undefined;
366
+ const p = params;
367
+ const routing = p.routing;
368
+ if (!routing)
369
+ return undefined;
370
+ return {
371
+ tier: typeof routing.tier === 'number' ? routing.tier : 0,
372
+ modelId: typeof routing.modelId === 'string' ? routing.modelId : 'unknown',
373
+ useAgentBooster: !!routing.useAgentBooster,
374
+ complexity: typeof routing.complexity === 'number' ? routing.complexity : 0,
375
+ };
376
+ }
377
+ export async function getCaptureStats() {
378
+ const stats = {
379
+ activeExperiences: activeExperiences.size,
380
+ totalCaptured: 0,
381
+ byDomain: {},
382
+ bySuccess: { success: 0, failure: 0 },
383
+ avgQuality: 0,
384
+ };
385
+ if (!memoryManager)
386
+ return stats;
387
+ try {
388
+ const db = memoryManager.getDatabase();
389
+ if (!db)
390
+ return stats;
391
+ // Total captured
392
+ const total = db.prepare('SELECT COUNT(*) as count FROM captured_experiences').get();
393
+ stats.totalCaptured = total?.count || 0;
394
+ // By domain
395
+ const byDomain = db.prepare('SELECT domain, COUNT(*) as count FROM captured_experiences GROUP BY domain').all();
396
+ for (const row of byDomain) {
397
+ stats.byDomain[row.domain] = row.count;
398
+ }
399
+ // By success
400
+ const bySuccess = db.prepare('SELECT success, COUNT(*) as count FROM captured_experiences GROUP BY success').all();
401
+ for (const row of bySuccess) {
402
+ if (row.success === 1)
403
+ stats.bySuccess.success = row.count;
404
+ else
405
+ stats.bySuccess.failure = row.count;
406
+ }
407
+ // Average quality
408
+ const avgQuality = db.prepare('SELECT AVG(quality) as avg FROM captured_experiences WHERE success = 1').get();
409
+ stats.avgQuality = avgQuality?.avg || 0;
410
+ }
411
+ catch (error) {
412
+ console.error('[ExperienceCaptureMiddleware] Failed to get stats:', error);
413
+ }
414
+ return stats;
415
+ }
416
+ //# sourceMappingURL=experience-capture-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experience-capture-middleware.js","sourceRoot":"","sources":["../../src/learning/experience-capture-middleware.ts"],"names":[],"mappings":"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"}