agentic-qe 1.8.4 → 1.9.1

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 (215) hide show
  1. package/.claude/skills/agentic-jujutsu/SKILL.md +645 -0
  2. package/CHANGELOG.md +394 -0
  3. package/README.md +86 -18
  4. package/dist/App.d.ts +5 -0
  5. package/dist/App.d.ts.map +1 -0
  6. package/dist/App.js +15 -0
  7. package/dist/App.js.map +1 -0
  8. package/dist/cli/commands/constitution.d.ts +34 -0
  9. package/dist/cli/commands/constitution.d.ts.map +1 -0
  10. package/dist/cli/commands/constitution.js +679 -0
  11. package/dist/cli/commands/constitution.js.map +1 -0
  12. package/dist/cli/commands/init.d.ts +8 -75
  13. package/dist/cli/commands/init.d.ts.map +1 -1
  14. package/dist/cli/commands/init.js +22 -2292
  15. package/dist/cli/commands/init.js.map +1 -1
  16. package/dist/cli/commands/learn/index.d.ts.map +1 -1
  17. package/dist/cli/commands/learn/index.js +3 -4
  18. package/dist/cli/commands/learn/index.js.map +1 -1
  19. package/dist/cli/commands/telemetry.d.ts +36 -0
  20. package/dist/cli/commands/telemetry.d.ts.map +1 -0
  21. package/dist/cli/commands/telemetry.js +364 -0
  22. package/dist/cli/commands/telemetry.js.map +1 -0
  23. package/dist/cli/index.js +66 -0
  24. package/dist/cli/index.js.map +1 -1
  25. package/dist/cli/init/agents.d.ts +22 -0
  26. package/dist/cli/init/agents.d.ts.map +1 -0
  27. package/dist/cli/init/agents.js +522 -0
  28. package/dist/cli/init/agents.js.map +1 -0
  29. package/dist/cli/init/bash-wrapper.d.ts +14 -0
  30. package/dist/cli/init/bash-wrapper.d.ts.map +1 -0
  31. package/dist/cli/init/bash-wrapper.js +47 -0
  32. package/dist/cli/init/bash-wrapper.js.map +1 -0
  33. package/dist/cli/init/claude-config.d.ts +24 -0
  34. package/dist/cli/init/claude-config.d.ts.map +1 -0
  35. package/dist/cli/init/claude-config.js +275 -0
  36. package/dist/cli/init/claude-config.js.map +1 -0
  37. package/dist/cli/init/claude-md.d.ts +19 -0
  38. package/dist/cli/init/claude-md.d.ts.map +1 -0
  39. package/dist/cli/init/claude-md.js +153 -0
  40. package/dist/cli/init/claude-md.js.map +1 -0
  41. package/dist/cli/init/commands.d.ts +6 -0
  42. package/dist/cli/init/commands.d.ts.map +1 -0
  43. package/dist/cli/init/commands.js +83 -0
  44. package/dist/cli/init/commands.js.map +1 -0
  45. package/dist/cli/init/database-init.d.ts +15 -0
  46. package/dist/cli/init/database-init.d.ts.map +1 -0
  47. package/dist/cli/init/database-init.js +203 -0
  48. package/dist/cli/init/database-init.js.map +1 -0
  49. package/dist/cli/init/directory-structure.d.ts +14 -0
  50. package/dist/cli/init/directory-structure.d.ts.map +1 -0
  51. package/dist/cli/init/directory-structure.js +91 -0
  52. package/dist/cli/init/directory-structure.js.map +1 -0
  53. package/dist/cli/init/documentation.d.ts +14 -0
  54. package/dist/cli/init/documentation.d.ts.map +1 -0
  55. package/dist/cli/init/documentation.js +195 -0
  56. package/dist/cli/init/documentation.js.map +1 -0
  57. package/dist/cli/init/fleet-config.d.ts +34 -0
  58. package/dist/cli/init/fleet-config.d.ts.map +1 -0
  59. package/dist/cli/init/fleet-config.js +269 -0
  60. package/dist/cli/init/fleet-config.js.map +1 -0
  61. package/dist/cli/init/helpers.d.ts +6 -0
  62. package/dist/cli/init/helpers.d.ts.map +1 -0
  63. package/dist/cli/init/helpers.js +94 -0
  64. package/dist/cli/init/helpers.js.map +1 -0
  65. package/dist/cli/init/index.d.ts +32 -0
  66. package/dist/cli/init/index.d.ts.map +1 -0
  67. package/dist/cli/init/index.js +294 -0
  68. package/dist/cli/init/index.js.map +1 -0
  69. package/dist/cli/init/skills.d.ts +6 -0
  70. package/dist/cli/init/skills.d.ts.map +1 -0
  71. package/dist/cli/init/skills.js +138 -0
  72. package/dist/cli/init/skills.js.map +1 -0
  73. package/dist/cli/init/utils/file-utils.d.ts +74 -0
  74. package/dist/cli/init/utils/file-utils.d.ts.map +1 -0
  75. package/dist/cli/init/utils/file-utils.js +187 -0
  76. package/dist/cli/init/utils/file-utils.js.map +1 -0
  77. package/dist/cli/init/utils/index.d.ts +18 -0
  78. package/dist/cli/init/utils/index.d.ts.map +1 -0
  79. package/dist/cli/init/utils/index.js +48 -0
  80. package/dist/cli/init/utils/index.js.map +1 -0
  81. package/dist/cli/init/utils/log-utils.d.ts +47 -0
  82. package/dist/cli/init/utils/log-utils.d.ts.map +1 -0
  83. package/dist/cli/init/utils/log-utils.js +68 -0
  84. package/dist/cli/init/utils/log-utils.js.map +1 -0
  85. package/dist/cli/init/utils/path-utils.d.ts +91 -0
  86. package/dist/cli/init/utils/path-utils.d.ts.map +1 -0
  87. package/dist/cli/init/utils/path-utils.js +208 -0
  88. package/dist/cli/init/utils/path-utils.js.map +1 -0
  89. package/dist/cli/init/utils/validation-utils.d.ts +44 -0
  90. package/dist/cli/init/utils/validation-utils.d.ts.map +1 -0
  91. package/dist/cli/init/utils/validation-utils.js +68 -0
  92. package/dist/cli/init/utils/validation-utils.js.map +1 -0
  93. package/dist/cli/init/utils.d.ts +183 -0
  94. package/dist/cli/init/utils.d.ts.map +1 -0
  95. package/dist/cli/init/utils.js +354 -0
  96. package/dist/cli/init/utils.js.map +1 -0
  97. package/dist/components/Dashboard/Dashboard.d.ts +4 -0
  98. package/dist/components/Dashboard/Dashboard.d.ts.map +1 -0
  99. package/dist/components/Dashboard/Dashboard.js +148 -0
  100. package/dist/components/Dashboard/Dashboard.js.map +1 -0
  101. package/dist/components/Dashboard/DashboardHeader.d.ts +4 -0
  102. package/dist/components/Dashboard/DashboardHeader.d.ts.map +1 -0
  103. package/dist/components/Dashboard/DashboardHeader.js +138 -0
  104. package/dist/components/Dashboard/DashboardHeader.js.map +1 -0
  105. package/dist/constitution/evaluators/ast-evaluator.d.ts +42 -0
  106. package/dist/constitution/evaluators/ast-evaluator.d.ts.map +1 -0
  107. package/dist/constitution/evaluators/ast-evaluator.js +303 -0
  108. package/dist/constitution/evaluators/ast-evaluator.js.map +1 -0
  109. package/dist/constitution/evaluators/base.d.ts +144 -0
  110. package/dist/constitution/evaluators/base.d.ts.map +1 -0
  111. package/dist/constitution/evaluators/base.js +144 -0
  112. package/dist/constitution/evaluators/base.js.map +1 -0
  113. package/dist/constitution/evaluators/index.d.ts +19 -0
  114. package/dist/constitution/evaluators/index.d.ts.map +1 -0
  115. package/dist/constitution/evaluators/index.js +56 -0
  116. package/dist/constitution/evaluators/index.js.map +1 -0
  117. package/dist/constitution/evaluators/metric-evaluator.d.ts +59 -0
  118. package/dist/constitution/evaluators/metric-evaluator.d.ts.map +1 -0
  119. package/dist/constitution/evaluators/metric-evaluator.js +195 -0
  120. package/dist/constitution/evaluators/metric-evaluator.js.map +1 -0
  121. package/dist/constitution/evaluators/pattern-evaluator.d.ts +66 -0
  122. package/dist/constitution/evaluators/pattern-evaluator.d.ts.map +1 -0
  123. package/dist/constitution/evaluators/pattern-evaluator.js +221 -0
  124. package/dist/constitution/evaluators/pattern-evaluator.js.map +1 -0
  125. package/dist/constitution/evaluators/semantic-evaluator.d.ts +68 -0
  126. package/dist/constitution/evaluators/semantic-evaluator.d.ts.map +1 -0
  127. package/dist/constitution/evaluators/semantic-evaluator.js +250 -0
  128. package/dist/constitution/evaluators/semantic-evaluator.js.map +1 -0
  129. package/dist/contexts/DashboardContext.d.ts +41 -0
  130. package/dist/contexts/DashboardContext.d.ts.map +1 -0
  131. package/dist/contexts/DashboardContext.js +187 -0
  132. package/dist/contexts/DashboardContext.js.map +1 -0
  133. package/dist/core/memory/SwarmMemoryManager.d.ts +40 -0
  134. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  135. package/dist/core/memory/SwarmMemoryManager.js +291 -120
  136. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  137. package/dist/hooks/useKeyboardShortcuts.d.ts +12 -0
  138. package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  139. package/dist/hooks/useKeyboardShortcuts.js +69 -0
  140. package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
  141. package/dist/telemetry/instrumentation/agent.d.ts +158 -0
  142. package/dist/telemetry/instrumentation/agent.d.ts.map +1 -0
  143. package/dist/telemetry/instrumentation/agent.js +372 -0
  144. package/dist/telemetry/instrumentation/agent.js.map +1 -0
  145. package/dist/telemetry/instrumentation/index.d.ts +24 -0
  146. package/dist/telemetry/instrumentation/index.d.ts.map +1 -0
  147. package/dist/telemetry/instrumentation/index.js +54 -0
  148. package/dist/telemetry/instrumentation/index.js.map +1 -0
  149. package/dist/telemetry/instrumentation/memory.d.ts +313 -0
  150. package/dist/telemetry/instrumentation/memory.d.ts.map +1 -0
  151. package/dist/telemetry/instrumentation/memory.js +552 -0
  152. package/dist/telemetry/instrumentation/memory.js.map +1 -0
  153. package/dist/telemetry/instrumentation/task.d.ts +146 -0
  154. package/dist/telemetry/instrumentation/task.d.ts.map +1 -0
  155. package/dist/telemetry/instrumentation/task.js +305 -0
  156. package/dist/telemetry/instrumentation/task.js.map +1 -0
  157. package/dist/telemetry/metrics/collectors/cost.d.ts +246 -0
  158. package/dist/telemetry/metrics/collectors/cost.d.ts.map +1 -0
  159. package/dist/telemetry/metrics/collectors/cost.js +526 -0
  160. package/dist/telemetry/metrics/collectors/cost.js.map +1 -0
  161. package/dist/telemetry/metrics/collectors/pricing-config.d.ts +87 -0
  162. package/dist/telemetry/metrics/collectors/pricing-config.d.ts.map +1 -0
  163. package/dist/telemetry/metrics/collectors/pricing-config.js +207 -0
  164. package/dist/telemetry/metrics/collectors/pricing-config.js.map +1 -0
  165. package/dist/telemetry/metrics/index.d.ts +4 -1
  166. package/dist/telemetry/metrics/index.d.ts.map +1 -1
  167. package/dist/telemetry/metrics/index.js +18 -2
  168. package/dist/telemetry/metrics/index.js.map +1 -1
  169. package/dist/telemetry/types.d.ts +1 -1
  170. package/dist/telemetry/types.d.ts.map +1 -1
  171. package/dist/visualization/api/RestEndpoints.d.ts +136 -0
  172. package/dist/visualization/api/RestEndpoints.d.ts.map +1 -0
  173. package/dist/visualization/api/RestEndpoints.js +428 -0
  174. package/dist/visualization/api/RestEndpoints.js.map +1 -0
  175. package/dist/visualization/api/WebSocketServer.d.ts +165 -0
  176. package/dist/visualization/api/WebSocketServer.d.ts.map +1 -0
  177. package/dist/visualization/api/WebSocketServer.js +518 -0
  178. package/dist/visualization/api/WebSocketServer.js.map +1 -0
  179. package/dist/visualization/core/DataTransformer.d.ts +89 -0
  180. package/dist/visualization/core/DataTransformer.d.ts.map +1 -0
  181. package/dist/visualization/core/DataTransformer.js +478 -0
  182. package/dist/visualization/core/DataTransformer.js.map +1 -0
  183. package/dist/visualization/index.d.ts +92 -0
  184. package/dist/visualization/index.d.ts.map +1 -0
  185. package/dist/visualization/index.js +121 -0
  186. package/dist/visualization/index.js.map +1 -0
  187. package/dist/visualization/types.d.ts +148 -0
  188. package/dist/visualization/types.d.ts.map +1 -0
  189. package/dist/visualization/types.js +7 -0
  190. package/dist/visualization/types.js.map +1 -0
  191. package/dist/voting/consensus.d.ts +87 -0
  192. package/dist/voting/consensus.d.ts.map +1 -0
  193. package/dist/voting/consensus.js +568 -0
  194. package/dist/voting/consensus.js.map +1 -0
  195. package/dist/voting/index.d.ts +12 -0
  196. package/dist/voting/index.d.ts.map +1 -0
  197. package/dist/voting/index.js +36 -0
  198. package/dist/voting/index.js.map +1 -0
  199. package/dist/voting/orchestrator.d.ts +65 -0
  200. package/dist/voting/orchestrator.d.ts.map +1 -0
  201. package/dist/voting/orchestrator.js +306 -0
  202. package/dist/voting/orchestrator.js.map +1 -0
  203. package/dist/voting/panel-assembly.d.ts +54 -0
  204. package/dist/voting/panel-assembly.d.ts.map +1 -0
  205. package/dist/voting/panel-assembly.js +192 -0
  206. package/dist/voting/panel-assembly.js.map +1 -0
  207. package/dist/voting/protocol.d.ts +119 -0
  208. package/dist/voting/protocol.d.ts.map +1 -0
  209. package/dist/voting/protocol.js +18 -0
  210. package/dist/voting/protocol.js.map +1 -0
  211. package/dist/voting/types.d.ts +125 -0
  212. package/dist/voting/types.d.ts.map +1 -0
  213. package/dist/voting/types.js +7 -0
  214. package/dist/voting/types.js.map +1 -0
  215. package/package.json +27 -2
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ /**
3
+ * Pattern Evaluator
4
+ *
5
+ * Uses regex patterns to detect code issues like:
6
+ * - Hardcoded secrets (API keys, passwords, tokens)
7
+ * - SQL injection vulnerabilities
8
+ * - XSS vulnerabilities
9
+ * - Other security and quality patterns
10
+ *
11
+ * @module constitution/evaluators/pattern-evaluator
12
+ * @version 1.0.0
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CustomPatternEvaluator = exports.PatternEvaluator = void 0;
16
+ const base_1 = require("./base");
17
+ /**
18
+ * Security and quality patterns
19
+ */
20
+ const PATTERNS = {
21
+ // Hardcoded secrets
22
+ hardcodedSecrets: [
23
+ /(?:password|passwd|pwd)\s*[=:]\s*["'](?![\s*])[^"'\s]{8,}["']/gi,
24
+ /(?:api[_-]?key|apikey)\s*[=:]\s*["'][^"'\s]{16,}["']/gi,
25
+ /(?:secret|token)\s*[=:]\s*["'][^"'\s]{16,}["']/gi,
26
+ /(?:access[_-]?key)\s*[=:]\s*["'][^"'\s]{16,}["']/gi,
27
+ /(?:private[_-]?key)\s*[=:]\s*["'][^"'\s]{16,}["']/gi,
28
+ /\b[A-Za-z0-9]{32,}\b/g, // Long alphanumeric strings (potential tokens)
29
+ ],
30
+ // SQL injection patterns
31
+ sqlInjection: [
32
+ /['"]\s*\+\s*\w+\s*\+\s*["']/g, // String concatenation in SQL
33
+ /execute\s*\(\s*["']SELECT/gi,
34
+ /execute\s*\(\s*["']INSERT/gi,
35
+ /execute\s*\(\s*["']UPDATE/gi,
36
+ /execute\s*\(\s*["']DELETE/gi,
37
+ /query\s*\(\s*["'].*\s*\+/gi, // Query with concatenation
38
+ ],
39
+ // XSS patterns
40
+ xss: [
41
+ /innerHTML\s*=\s*[^;]+/g,
42
+ /document\.write\s*\(/g,
43
+ /dangerouslySetInnerHTML/g,
44
+ /eval\s*\(/g,
45
+ /setTimeout\s*\(\s*["']/g,
46
+ /setInterval\s*\(\s*["']/g,
47
+ ],
48
+ // Error handling issues
49
+ unhandledErrors: [
50
+ /new\s+Promise\s*\(\s*\([^)]*\)\s*=>\s*\{[^}]*\}/g, // Promise without catch
51
+ /async\s+function[^{]*\{(?!.*try).*await/gs, // Async without try-catch
52
+ ],
53
+ // Documentation issues
54
+ undocumented: [
55
+ /export\s+(?:async\s+)?function\s+\w+\s*\([^)]*\)\s*(?:\:\s*[^{]+)?\s*\{(?!\s*\/\*\*)/g,
56
+ /export\s+class\s+\w+(?!\s*{[\s\S]*?\/\*\*)/g,
57
+ ],
58
+ };
59
+ /**
60
+ * Fields that pattern evaluator can check
61
+ */
62
+ const PATTERN_FIELDS = new Set([
63
+ 'hardcoded_secrets_detected',
64
+ 'potential_sql_injection',
65
+ 'potential_xss',
66
+ 'unhandled_errors',
67
+ 'documentation_exists',
68
+ ]);
69
+ /**
70
+ * Pattern Evaluator for regex-based code analysis
71
+ */
72
+ class PatternEvaluator extends base_1.BaseEvaluator {
73
+ constructor() {
74
+ super(...arguments);
75
+ this.type = 'pattern';
76
+ }
77
+ canHandle(condition) {
78
+ return PATTERN_FIELDS.has(condition.field);
79
+ }
80
+ async evaluate(condition, context) {
81
+ if (!context.sourceCode) {
82
+ return this.createResult(false, condition.field, null, condition.value, condition.operator, 'No source code provided for pattern analysis');
83
+ }
84
+ try {
85
+ // Detect patterns based on field
86
+ const matches = this.detectPatterns(condition.field, context.sourceCode);
87
+ // Determine actual value based on field type
88
+ const actualValue = this.getActualValue(condition.field, matches);
89
+ // Compare against expected value
90
+ const passed = this.compareValues(actualValue, condition.operator, condition.value);
91
+ // Build result with pattern matches as metadata
92
+ const result = this.createResult(passed, condition.field, actualValue, condition.value, condition.operator);
93
+ if (matches.length > 0) {
94
+ result.metadata = {
95
+ matchCount: matches.length,
96
+ matches: matches.slice(0, 5), // Include first 5 matches
97
+ };
98
+ }
99
+ return result;
100
+ }
101
+ catch (error) {
102
+ return this.createResult(false, condition.field, null, condition.value, condition.operator, `Pattern analysis failed: ${error instanceof Error ? error.message : String(error)}`);
103
+ }
104
+ }
105
+ /**
106
+ * Detect patterns in source code
107
+ * @param field - Field to check
108
+ * @param sourceCode - Source code to analyze
109
+ * @returns Array of pattern matches
110
+ */
111
+ detectPatterns(field, sourceCode) {
112
+ const patterns = this.getPatternsForField(field);
113
+ const matches = [];
114
+ const lines = sourceCode.split('\n');
115
+ for (const pattern of patterns) {
116
+ lines.forEach((line, index) => {
117
+ const regex = new RegExp(pattern.source, pattern.flags);
118
+ const lineMatches = line.matchAll(regex);
119
+ for (const match of lineMatches) {
120
+ matches.push({
121
+ pattern: pattern.source,
122
+ line: index + 1,
123
+ match: match[0],
124
+ context: this.getContext(lines, index),
125
+ });
126
+ }
127
+ });
128
+ }
129
+ return matches;
130
+ }
131
+ /**
132
+ * Get patterns for a specific field
133
+ * @param field - Field name
134
+ * @returns Array of regex patterns
135
+ */
136
+ getPatternsForField(field) {
137
+ switch (field) {
138
+ case 'hardcoded_secrets_detected':
139
+ return PATTERNS.hardcodedSecrets;
140
+ case 'potential_sql_injection':
141
+ return PATTERNS.sqlInjection;
142
+ case 'potential_xss':
143
+ return PATTERNS.xss;
144
+ case 'unhandled_errors':
145
+ return PATTERNS.unhandledErrors;
146
+ case 'documentation_exists':
147
+ return PATTERNS.undocumented;
148
+ default:
149
+ return [];
150
+ }
151
+ }
152
+ /**
153
+ * Get actual value based on field type
154
+ * @param field - Field name
155
+ * @param matches - Pattern matches
156
+ * @returns Actual value for comparison
157
+ */
158
+ getActualValue(field, matches) {
159
+ // For boolean fields (detected/exists), return true if matches found
160
+ if (field.endsWith('_detected') || field === 'documentation_exists') {
161
+ // For documentation_exists, invert the logic (matches = undocumented code)
162
+ return field === 'documentation_exists' ? matches.length === 0 : matches.length > 0;
163
+ }
164
+ // For other fields, return count
165
+ return matches.length;
166
+ }
167
+ /**
168
+ * Get context lines around a match
169
+ * @param lines - All source lines
170
+ * @param lineIndex - Index of matched line
171
+ * @param contextLines - Number of context lines
172
+ * @returns Context string
173
+ */
174
+ getContext(lines, lineIndex, contextLines = 2) {
175
+ const start = Math.max(0, lineIndex - contextLines);
176
+ const end = Math.min(lines.length, lineIndex + contextLines + 1);
177
+ return lines.slice(start, end).join('\n');
178
+ }
179
+ }
180
+ exports.PatternEvaluator = PatternEvaluator;
181
+ /**
182
+ * Custom pattern evaluator for user-defined patterns
183
+ */
184
+ class CustomPatternEvaluator extends base_1.BaseEvaluator {
185
+ constructor() {
186
+ super(...arguments);
187
+ this.type = 'pattern';
188
+ this.customPatterns = new Map();
189
+ }
190
+ /**
191
+ * Register a custom pattern
192
+ * @param field - Field name
193
+ * @param patterns - Regex patterns
194
+ */
195
+ registerPattern(field, patterns) {
196
+ this.customPatterns.set(field, patterns);
197
+ }
198
+ canHandle(condition) {
199
+ return this.customPatterns.has(condition.field);
200
+ }
201
+ async evaluate(condition, context) {
202
+ if (!context.sourceCode) {
203
+ return this.createResult(false, condition.field, null, condition.value, condition.operator, 'No source code provided for pattern analysis');
204
+ }
205
+ const patterns = this.customPatterns.get(condition.field) || [];
206
+ const lines = context.sourceCode.split('\n');
207
+ let matchCount = 0;
208
+ for (const pattern of patterns) {
209
+ for (const line of lines) {
210
+ if (pattern.test(line)) {
211
+ matchCount++;
212
+ }
213
+ }
214
+ }
215
+ const actualValue = matchCount > 0;
216
+ const passed = this.compareValues(actualValue, condition.operator, condition.value);
217
+ return this.createResult(passed, condition.field, actualValue, condition.value, condition.operator);
218
+ }
219
+ }
220
+ exports.CustomPatternEvaluator = CustomPatternEvaluator;
221
+ //# sourceMappingURL=pattern-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-evaluator.js","sourceRoot":"","sources":["../../../src/constitution/evaluators/pattern-evaluator.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAGH,iCAAiF;AAgBjF;;GAEG;AACH,MAAM,QAAQ,GAAG;IACf,oBAAoB;IACpB,gBAAgB,EAAE;QAChB,iEAAiE;QACjE,wDAAwD;QACxD,kDAAkD;QAClD,oDAAoD;QACpD,qDAAqD;QACrD,uBAAuB,EAAE,+CAA+C;KACzE;IAED,yBAAyB;IACzB,YAAY,EAAE;QACZ,8BAA8B,EAAE,8BAA8B;QAC9D,6BAA6B;QAC7B,6BAA6B;QAC7B,6BAA6B;QAC7B,6BAA6B;QAC7B,4BAA4B,EAAE,2BAA2B;KAC1D;IAED,eAAe;IACf,GAAG,EAAE;QACH,wBAAwB;QACxB,uBAAuB;QACvB,0BAA0B;QAC1B,YAAY;QACZ,yBAAyB;QACzB,0BAA0B;KAC3B;IAED,wBAAwB;IACxB,eAAe,EAAE;QACf,kDAAkD,EAAE,wBAAwB;QAC5E,2CAA2C,EAAE,0BAA0B;KACxE;IAED,uBAAuB;IACvB,YAAY,EAAE;QACZ,uFAAuF;QACvF,6CAA6C;KAC9C;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,4BAA4B;IAC5B,yBAAyB;IACzB,eAAe;IACf,kBAAkB;IAClB,sBAAsB;CACvB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAa,gBAAiB,SAAQ,oBAAa;IAAnD;;QACW,SAAI,GAAG,SAAkB,CAAC;IA0IrC,CAAC;IAxIC,SAAS,CAAC,SAAwB;QAChC,OAAO,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAwB,EAAE,OAA0B;QACjE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,YAAY,CACtB,KAAK,EACL,SAAS,CAAC,KAAK,EACf,IAAI,EACJ,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,QAAQ,EAClB,8CAA8C,CAC/C,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,iCAAiC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;YAEzE,6CAA6C;YAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAElE,iCAAiC;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;YAEpF,gDAAgD;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAC9B,MAAM,EACN,SAAS,CAAC,KAAK,EACf,WAAW,EACX,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,QAAQ,CACnB,CAAC;YAEF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,QAAQ,GAAG;oBAChB,UAAU,EAAE,OAAO,CAAC,MAAM;oBAC1B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,0BAA0B;iBACzD,CAAC;YACJ,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,YAAY,CACtB,KAAK,EACL,SAAS,CAAC,KAAK,EACf,IAAI,EACJ,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,QAAQ,EAClB,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACrF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,KAAa,EAAE,UAAkB;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAErC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC5B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAEzC,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;oBAChC,OAAO,CAAC,IAAI,CAAC;wBACX,OAAO,EAAE,OAAO,CAAC,MAAM;wBACvB,IAAI,EAAE,KAAK,GAAG,CAAC;wBACf,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;wBACf,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;qBACvC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACK,mBAAmB,CAAC,KAAa;QACvC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,4BAA4B;gBAC/B,OAAO,QAAQ,CAAC,gBAAgB,CAAC;YACnC,KAAK,yBAAyB;gBAC5B,OAAO,QAAQ,CAAC,YAAY,CAAC;YAC/B,KAAK,eAAe;gBAClB,OAAO,QAAQ,CAAC,GAAG,CAAC;YACtB,KAAK,kBAAkB;gBACrB,OAAO,QAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,sBAAsB;gBACzB,OAAO,QAAQ,CAAC,YAAY,CAAC;YAC/B;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,KAAa,EAAE,OAAuB;QAC3D,qEAAqE;QACrE,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,KAAK,sBAAsB,EAAE,CAAC;YACpE,2EAA2E;YAC3E,OAAO,KAAK,KAAK,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACtF,CAAC;QAED,iCAAiC;QACjC,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACK,UAAU,CAAC,KAAe,EAAE,SAAiB,EAAE,eAAuB,CAAC;QAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;CACF;AA3ID,4CA2IC;AAED;;GAEG;AACH,MAAa,sBAAuB,SAAQ,oBAAa;IAAzD;;QACW,SAAI,GAAG,SAAkB,CAAC;QAC3B,mBAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;IAkDvD,CAAC;IAhDC;;;;OAIG;IACH,eAAe,CAAC,KAAa,EAAE,QAAkB;QAC/C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,SAAS,CAAC,SAAwB;QAChC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAwB,EAAE,OAA0B;QACjE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,YAAY,CACtB,KAAK,EACL,SAAS,CAAC,KAAK,EACf,IAAI,EACJ,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,QAAQ,EAClB,8CAA8C,CAC/C,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChE,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAEpF,OAAO,IAAI,CAAC,YAAY,CACtB,MAAM,EACN,SAAS,CAAC,KAAK,EACf,WAAW,EACX,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,QAAQ,CACnB,CAAC;IACJ,CAAC;CACF;AApDD,wDAoDC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Semantic Evaluator
3
+ *
4
+ * Uses LLM-based analysis for contextual code understanding.
5
+ * Evaluates:
6
+ * - Code intent and purpose alignment
7
+ * - Naming conventions and clarity
8
+ * - Design pattern adherence
9
+ * - Best practice compliance
10
+ * - Contextual security issues
11
+ *
12
+ * @module constitution/evaluators/semantic-evaluator
13
+ * @version 1.0.0
14
+ */
15
+ import type { RuleCondition } from '../schema';
16
+ import { BaseEvaluator, type CheckResult, type EvaluationContext } from './base';
17
+ /**
18
+ * Semantic Evaluator for LLM-based contextual analysis
19
+ */
20
+ export declare class SemanticEvaluator extends BaseEvaluator {
21
+ readonly type: "semantic";
22
+ private llmEnabled;
23
+ private llmClient?;
24
+ canHandle(condition: RuleCondition): boolean;
25
+ initialize(config: any): Promise<void>;
26
+ evaluate(condition: RuleCondition, context: EvaluationContext): Promise<CheckResult>;
27
+ /**
28
+ * Analyze code semantics using LLM
29
+ * @param code - Source code
30
+ * @param field - Field to analyze
31
+ * @param context - Evaluation context
32
+ * @returns Semantic analysis
33
+ */
34
+ private analyzeSemanticsWithLLM;
35
+ /**
36
+ * Analyze code semantics using heuristics (fallback when LLM unavailable)
37
+ * @param code - Source code
38
+ * @param field - Field to analyze
39
+ * @returns Semantic analysis
40
+ */
41
+ private analyzeSemanticsHeuristically;
42
+ /**
43
+ * Check naming conventions
44
+ * @param code - Source code
45
+ * @returns Array of naming issues
46
+ */
47
+ private checkNamingConventions;
48
+ /**
49
+ * Check best practices
50
+ * @param code - Source code
51
+ * @returns Array of best practice issues
52
+ */
53
+ private checkBestPractices;
54
+ /**
55
+ * Check design patterns
56
+ * @param code - Source code
57
+ * @returns Array of design pattern issues
58
+ */
59
+ private checkDesignPatterns;
60
+ /**
61
+ * Get semantic value from analysis
62
+ * @param field - Field name
63
+ * @param analysis - Semantic analysis
64
+ * @returns Semantic value
65
+ */
66
+ private getSemanticValue;
67
+ }
68
+ //# sourceMappingURL=semantic-evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-evaluator.d.ts","sourceRoot":"","sources":["../../../src/constitution/evaluators/semantic-evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AA4CjF;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IACpC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,SAAS,CAAC,CAAM;IAExB,SAAS,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO;IAItC,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtC,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAsD1F;;;;;;OAMG;YACW,uBAAuB;IAcrC;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;IAiDrC;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAoC1B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;CAazB"}
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ /**
3
+ * Semantic Evaluator
4
+ *
5
+ * Uses LLM-based analysis for contextual code understanding.
6
+ * Evaluates:
7
+ * - Code intent and purpose alignment
8
+ * - Naming conventions and clarity
9
+ * - Design pattern adherence
10
+ * - Best practice compliance
11
+ * - Contextual security issues
12
+ *
13
+ * @module constitution/evaluators/semantic-evaluator
14
+ * @version 1.0.0
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.SemanticEvaluator = void 0;
18
+ const base_1 = require("./base");
19
+ /**
20
+ * Fields that semantic evaluator can check
21
+ */
22
+ const SEMANTIC_FIELDS = new Set([
23
+ 'semantic_quality',
24
+ 'naming_clarity',
25
+ 'design_pattern_adherence',
26
+ 'best_practice_compliance',
27
+ 'code_intent_alignment',
28
+ 'contextual_security',
29
+ ]);
30
+ /**
31
+ * Semantic Evaluator for LLM-based contextual analysis
32
+ */
33
+ class SemanticEvaluator extends base_1.BaseEvaluator {
34
+ constructor() {
35
+ super(...arguments);
36
+ this.type = 'semantic';
37
+ this.llmEnabled = false;
38
+ }
39
+ canHandle(condition) {
40
+ return SEMANTIC_FIELDS.has(condition.field);
41
+ }
42
+ async initialize(config) {
43
+ await super.initialize(config);
44
+ // Check if LLM is available
45
+ this.llmEnabled = config.options?.llmEnabled ?? false;
46
+ if (this.llmEnabled && config.options?.llmClient) {
47
+ this.llmClient = config.options.llmClient;
48
+ }
49
+ }
50
+ async evaluate(condition, context) {
51
+ if (!context.sourceCode) {
52
+ return this.createResult(false, condition.field, null, condition.value, condition.operator, 'No source code provided for semantic analysis');
53
+ }
54
+ try {
55
+ // Perform semantic analysis
56
+ const analysis = this.llmEnabled
57
+ ? await this.analyzeSemanticsWithLLM(context.sourceCode, condition.field, context)
58
+ : this.analyzeSemanticsHeuristically(context.sourceCode, condition.field);
59
+ // Get the requested metric value
60
+ const actualValue = this.getSemanticValue(condition.field, analysis);
61
+ // Compare against expected value
62
+ const passed = this.compareValues(actualValue, condition.operator, condition.value);
63
+ // Build result with analysis as metadata
64
+ const result = this.createResult(passed, condition.field, actualValue, condition.value, condition.operator, analysis.summary);
65
+ result.metadata = {
66
+ score: analysis.score,
67
+ issueCount: analysis.issues.length,
68
+ issues: analysis.issues.slice(0, 3), // Include top 3 issues
69
+ recommendations: analysis.recommendations.slice(0, 3), // Include top 3 recommendations
70
+ };
71
+ return result;
72
+ }
73
+ catch (error) {
74
+ return this.createResult(false, condition.field, null, condition.value, condition.operator, `Semantic analysis failed: ${error instanceof Error ? error.message : String(error)}`);
75
+ }
76
+ }
77
+ /**
78
+ * Analyze code semantics using LLM
79
+ * @param code - Source code
80
+ * @param field - Field to analyze
81
+ * @param context - Evaluation context
82
+ * @returns Semantic analysis
83
+ */
84
+ async analyzeSemanticsWithLLM(code, field, context) {
85
+ if (!this.llmClient) {
86
+ return this.analyzeSemanticsHeuristically(code, field);
87
+ }
88
+ // NOTE: LLM integration can be added when needed
89
+ // Currently using heuristic analysis which provides good semantic checking
90
+ return this.analyzeSemanticsHeuristically(code, field);
91
+ }
92
+ /**
93
+ * Analyze code semantics using heuristics (fallback when LLM unavailable)
94
+ * @param code - Source code
95
+ * @param field - Field to analyze
96
+ * @returns Semantic analysis
97
+ */
98
+ analyzeSemanticsHeuristically(code, field) {
99
+ const issues = [];
100
+ const recommendations = [];
101
+ let score = 100;
102
+ // Check naming conventions
103
+ if (field === 'naming_clarity' || field === 'semantic_quality') {
104
+ const namingIssues = this.checkNamingConventions(code);
105
+ issues.push(...namingIssues);
106
+ score -= namingIssues.length * 5;
107
+ }
108
+ // Check best practices
109
+ if (field === 'best_practice_compliance' || field === 'semantic_quality') {
110
+ const practiceIssues = this.checkBestPractices(code);
111
+ issues.push(...practiceIssues);
112
+ score -= practiceIssues.length * 8;
113
+ }
114
+ // Check design patterns
115
+ if (field === 'design_pattern_adherence' || field === 'semantic_quality') {
116
+ const patternIssues = this.checkDesignPatterns(code);
117
+ issues.push(...patternIssues);
118
+ score -= patternIssues.length * 10;
119
+ }
120
+ // Generate recommendations
121
+ if (issues.length > 0) {
122
+ recommendations.push('Review and address identified issues to improve code quality');
123
+ const namingIssues = issues.filter(i => i.type.includes('naming') || i.description.includes('convention'));
124
+ const practiceIssues = issues.filter(i => i.type.includes('practice') || i.type.includes('pattern'));
125
+ if (namingIssues.length > 0) {
126
+ recommendations.push('Follow consistent naming conventions (camelCase for variables, PascalCase for classes)');
127
+ }
128
+ if (practiceIssues.length > 0) {
129
+ recommendations.push('Adopt industry best practices for cleaner, more maintainable code');
130
+ }
131
+ }
132
+ score = Math.max(0, Math.min(100, score));
133
+ return {
134
+ score,
135
+ issues,
136
+ recommendations,
137
+ summary: `Semantic analysis completed: ${score}/100 score, ${issues.length} issues found`,
138
+ };
139
+ }
140
+ /**
141
+ * Check naming conventions
142
+ * @param code - Source code
143
+ * @returns Array of naming issues
144
+ */
145
+ checkNamingConventions(code) {
146
+ const issues = [];
147
+ // Check for single-letter variables (excluding common loop vars)
148
+ const singleLetterVars = code.match(/\b(?:const|let|var)\s+([a-z])\s*=/gi);
149
+ if (singleLetterVars) {
150
+ issues.push({
151
+ type: 'naming',
152
+ severity: 'low',
153
+ description: 'Single-letter variable names reduce code readability',
154
+ suggestion: 'Use descriptive variable names',
155
+ });
156
+ }
157
+ // Check for snake_case in JavaScript/TypeScript (should be camelCase)
158
+ const snakeCaseVars = code.match(/\b(?:const|let|var)\s+([a-z]+_[a-z]+)\s*=/gi);
159
+ if (snakeCaseVars) {
160
+ issues.push({
161
+ type: 'naming',
162
+ severity: 'medium',
163
+ description: 'Use camelCase instead of snake_case for JavaScript/TypeScript',
164
+ suggestion: 'Convert variable names to camelCase',
165
+ });
166
+ }
167
+ return issues;
168
+ }
169
+ /**
170
+ * Check best practices
171
+ * @param code - Source code
172
+ * @returns Array of best practice issues
173
+ */
174
+ checkBestPractices(code) {
175
+ const issues = [];
176
+ // Check for var usage (should use const/let)
177
+ if (code.includes('var ')) {
178
+ issues.push({
179
+ type: 'best-practice',
180
+ severity: 'medium',
181
+ description: 'Use const or let instead of var for better scoping',
182
+ suggestion: 'Replace var with const (for constants) or let (for variables)',
183
+ });
184
+ }
185
+ // Check for == instead of ===
186
+ if (code.match(/[^=!]==[^=]/)) {
187
+ issues.push({
188
+ type: 'best-practice',
189
+ severity: 'medium',
190
+ description: 'Use strict equality (===) instead of loose equality (==)',
191
+ suggestion: 'Replace == with === for type-safe comparisons',
192
+ });
193
+ }
194
+ // Check for console.log in production code
195
+ if (code.includes('console.log')) {
196
+ issues.push({
197
+ type: 'best-practice',
198
+ severity: 'low',
199
+ description: 'Remove console.log statements from production code',
200
+ suggestion: 'Use proper logging framework or remove debug statements',
201
+ });
202
+ }
203
+ return issues;
204
+ }
205
+ /**
206
+ * Check design patterns
207
+ * @param code - Source code
208
+ * @returns Array of design pattern issues
209
+ */
210
+ checkDesignPatterns(code) {
211
+ const issues = [];
212
+ // Check for God classes (very long classes)
213
+ const classMatches = code.match(/class\s+\w+[\s\S]*?\{([\s\S]*?)\n\}/g);
214
+ if (classMatches) {
215
+ for (const classCode of classMatches) {
216
+ const lineCount = classCode.split('\n').length;
217
+ if (lineCount > 200) {
218
+ issues.push({
219
+ type: 'design-pattern',
220
+ severity: 'high',
221
+ description: 'Class is too large (God class anti-pattern)',
222
+ suggestion: 'Break down into smaller, focused classes following Single Responsibility Principle',
223
+ });
224
+ }
225
+ }
226
+ }
227
+ return issues;
228
+ }
229
+ /**
230
+ * Get semantic value from analysis
231
+ * @param field - Field name
232
+ * @param analysis - Semantic analysis
233
+ * @returns Semantic value
234
+ */
235
+ getSemanticValue(field, analysis) {
236
+ switch (field) {
237
+ case 'semantic_quality':
238
+ case 'naming_clarity':
239
+ case 'design_pattern_adherence':
240
+ case 'best_practice_compliance':
241
+ case 'code_intent_alignment':
242
+ case 'contextual_security':
243
+ return analysis.score;
244
+ default:
245
+ return 0;
246
+ }
247
+ }
248
+ }
249
+ exports.SemanticEvaluator = SemanticEvaluator;
250
+ //# sourceMappingURL=semantic-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-evaluator.js","sourceRoot":"","sources":["../../../src/constitution/evaluators/semantic-evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+ import { WebSocketClient } from '../services/websocket/WebSocketClient';
3
+ export interface DashboardFilters {
4
+ sessionId: string | null;
5
+ timeRange: {
6
+ start: Date | null;
7
+ end: Date | null;
8
+ };
9
+ agents: string[];
10
+ searchTerm: string;
11
+ }
12
+ export interface Notification {
13
+ id: string;
14
+ type: 'info' | 'success' | 'warning' | 'error';
15
+ title: string;
16
+ message: string;
17
+ timestamp: Date;
18
+ read: boolean;
19
+ }
20
+ interface DashboardContextValue {
21
+ filters: DashboardFilters;
22
+ updateFilters: (filters: Partial<DashboardFilters>) => void;
23
+ resetFilters: () => void;
24
+ wsClient: WebSocketClient | null;
25
+ wsConnected: boolean;
26
+ wsError: string | null;
27
+ notifications: Notification[];
28
+ addNotification: (notification: Omit<Notification, 'id' | 'timestamp' | 'read'>) => void;
29
+ markNotificationRead: (id: string) => void;
30
+ clearNotifications: () => void;
31
+ activeView: 'overview' | 'mindmap' | 'metrics' | 'timeline';
32
+ setActiveView: (view: 'overview' | 'mindmap' | 'metrics' | 'timeline') => void;
33
+ exportData: () => void;
34
+ refreshData: () => void;
35
+ }
36
+ export declare const DashboardProvider: React.FC<{
37
+ children: React.ReactNode;
38
+ }>;
39
+ export declare const useDashboard: () => DashboardContextValue;
40
+ export {};
41
+ //# sourceMappingURL=DashboardContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardContext.d.ts","sourceRoot":"","sources":["../../src/contexts/DashboardContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsE,MAAM,OAAO,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE;QACT,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;QACnB,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;KAClB,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,qBAAqB;IAE7B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC5D,YAAY,EAAE,MAAM,IAAI,CAAC;IAGzB,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAGvB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,eAAe,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,WAAW,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC;IACzF,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAG/B,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IAC5D,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,KAAK,IAAI,CAAC;IAG/E,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAcD,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAqJrE,CAAC;AAEF,eAAO,MAAM,YAAY,QAAO,qBAM/B,CAAC"}