agentic-qe 1.8.3 → 1.9.0
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.
- package/.claude/skills/agentic-jujutsu/SKILL.md +645 -0
- package/.claude/skills/cicd-pipeline-qe-orchestrator/README.md +2 -2
- package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +6 -6
- package/CHANGELOG.md +595 -0
- package/README.md +117 -16
- package/config/constitution.schema.json +423 -0
- package/config/otel-collector.yaml +234 -0
- package/dist/App.d.ts +5 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/App.js +15 -0
- package/dist/App.js.map +1 -0
- package/dist/cli/commands/constitution.d.ts +34 -0
- package/dist/cli/commands/constitution.d.ts.map +1 -0
- package/dist/cli/commands/constitution.js +679 -0
- package/dist/cli/commands/constitution.js.map +1 -0
- package/dist/cli/commands/init-claude-md-template.js +3 -3
- package/dist/cli/commands/init.d.ts +8 -75
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +22 -2292
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/telemetry.d.ts +36 -0
- package/dist/cli/commands/telemetry.d.ts.map +1 -0
- package/dist/cli/commands/telemetry.js +364 -0
- package/dist/cli/commands/telemetry.js.map +1 -0
- package/dist/cli/index.js +66 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/agents.d.ts +22 -0
- package/dist/cli/init/agents.d.ts.map +1 -0
- package/dist/cli/init/agents.js +522 -0
- package/dist/cli/init/agents.js.map +1 -0
- package/dist/cli/init/bash-wrapper.d.ts +14 -0
- package/dist/cli/init/bash-wrapper.d.ts.map +1 -0
- package/dist/cli/init/bash-wrapper.js +47 -0
- package/dist/cli/init/bash-wrapper.js.map +1 -0
- package/dist/cli/init/claude-config.d.ts +24 -0
- package/dist/cli/init/claude-config.d.ts.map +1 -0
- package/dist/cli/init/claude-config.js +275 -0
- package/dist/cli/init/claude-config.js.map +1 -0
- package/dist/cli/init/claude-md.d.ts +19 -0
- package/dist/cli/init/claude-md.d.ts.map +1 -0
- package/dist/cli/init/claude-md.js +153 -0
- package/dist/cli/init/claude-md.js.map +1 -0
- package/dist/cli/init/commands.d.ts +6 -0
- package/dist/cli/init/commands.d.ts.map +1 -0
- package/dist/cli/init/commands.js +83 -0
- package/dist/cli/init/commands.js.map +1 -0
- package/dist/cli/init/database-init.d.ts +15 -0
- package/dist/cli/init/database-init.d.ts.map +1 -0
- package/dist/cli/init/database-init.js +203 -0
- package/dist/cli/init/database-init.js.map +1 -0
- package/dist/cli/init/directory-structure.d.ts +14 -0
- package/dist/cli/init/directory-structure.d.ts.map +1 -0
- package/dist/cli/init/directory-structure.js +107 -0
- package/dist/cli/init/directory-structure.js.map +1 -0
- package/dist/cli/init/documentation.d.ts +14 -0
- package/dist/cli/init/documentation.d.ts.map +1 -0
- package/dist/cli/init/documentation.js +195 -0
- package/dist/cli/init/documentation.js.map +1 -0
- package/dist/cli/init/fleet-config.d.ts +34 -0
- package/dist/cli/init/fleet-config.d.ts.map +1 -0
- package/dist/cli/init/fleet-config.js +269 -0
- package/dist/cli/init/fleet-config.js.map +1 -0
- package/dist/cli/init/helpers.d.ts +6 -0
- package/dist/cli/init/helpers.d.ts.map +1 -0
- package/dist/cli/init/helpers.js +94 -0
- package/dist/cli/init/helpers.js.map +1 -0
- package/dist/cli/init/index.d.ts +32 -0
- package/dist/cli/init/index.d.ts.map +1 -0
- package/dist/cli/init/index.js +294 -0
- package/dist/cli/init/index.js.map +1 -0
- package/dist/cli/init/skills.d.ts +6 -0
- package/dist/cli/init/skills.d.ts.map +1 -0
- package/dist/cli/init/skills.js +138 -0
- package/dist/cli/init/skills.js.map +1 -0
- package/dist/cli/init/utils/file-utils.d.ts +74 -0
- package/dist/cli/init/utils/file-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/file-utils.js +187 -0
- package/dist/cli/init/utils/file-utils.js.map +1 -0
- package/dist/cli/init/utils/index.d.ts +18 -0
- package/dist/cli/init/utils/index.d.ts.map +1 -0
- package/dist/cli/init/utils/index.js +48 -0
- package/dist/cli/init/utils/index.js.map +1 -0
- package/dist/cli/init/utils/log-utils.d.ts +47 -0
- package/dist/cli/init/utils/log-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/log-utils.js +68 -0
- package/dist/cli/init/utils/log-utils.js.map +1 -0
- package/dist/cli/init/utils/path-utils.d.ts +91 -0
- package/dist/cli/init/utils/path-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/path-utils.js +208 -0
- package/dist/cli/init/utils/path-utils.js.map +1 -0
- package/dist/cli/init/utils/validation-utils.d.ts +44 -0
- package/dist/cli/init/utils/validation-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/validation-utils.js +68 -0
- package/dist/cli/init/utils/validation-utils.js.map +1 -0
- package/dist/cli/init/utils.d.ts +183 -0
- package/dist/cli/init/utils.d.ts.map +1 -0
- package/dist/cli/init/utils.js +354 -0
- package/dist/cli/init/utils.js.map +1 -0
- package/dist/components/Dashboard/Dashboard.d.ts +4 -0
- package/dist/components/Dashboard/Dashboard.d.ts.map +1 -0
- package/dist/components/Dashboard/Dashboard.js +148 -0
- package/dist/components/Dashboard/Dashboard.js.map +1 -0
- package/dist/components/Dashboard/DashboardHeader.d.ts +4 -0
- package/dist/components/Dashboard/DashboardHeader.d.ts.map +1 -0
- package/dist/components/Dashboard/DashboardHeader.js +138 -0
- package/dist/components/Dashboard/DashboardHeader.js.map +1 -0
- package/dist/constitution/evaluators/ast-evaluator.d.ts +42 -0
- package/dist/constitution/evaluators/ast-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/ast-evaluator.js +303 -0
- package/dist/constitution/evaluators/ast-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/base.d.ts +144 -0
- package/dist/constitution/evaluators/base.d.ts.map +1 -0
- package/dist/constitution/evaluators/base.js +144 -0
- package/dist/constitution/evaluators/base.js.map +1 -0
- package/dist/constitution/evaluators/index.d.ts +19 -0
- package/dist/constitution/evaluators/index.d.ts.map +1 -0
- package/dist/constitution/evaluators/index.js +56 -0
- package/dist/constitution/evaluators/index.js.map +1 -0
- package/dist/constitution/evaluators/metric-evaluator.d.ts +59 -0
- package/dist/constitution/evaluators/metric-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/metric-evaluator.js +195 -0
- package/dist/constitution/evaluators/metric-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/pattern-evaluator.d.ts +66 -0
- package/dist/constitution/evaluators/pattern-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/pattern-evaluator.js +221 -0
- package/dist/constitution/evaluators/pattern-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/semantic-evaluator.d.ts +68 -0
- package/dist/constitution/evaluators/semantic-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/semantic-evaluator.js +250 -0
- package/dist/constitution/evaluators/semantic-evaluator.js.map +1 -0
- package/dist/constitution/index.d.ts +105 -0
- package/dist/constitution/index.d.ts.map +1 -0
- package/dist/constitution/index.js +207 -0
- package/dist/constitution/index.js.map +1 -0
- package/dist/constitution/loader.d.ts +141 -0
- package/dist/constitution/loader.d.ts.map +1 -0
- package/dist/constitution/loader.js +515 -0
- package/dist/constitution/loader.js.map +1 -0
- package/dist/constitution/schema.d.ts +409 -0
- package/dist/constitution/schema.d.ts.map +1 -0
- package/dist/constitution/schema.js +71 -0
- package/dist/constitution/schema.js.map +1 -0
- package/dist/contexts/DashboardContext.d.ts +41 -0
- package/dist/contexts/DashboardContext.d.ts.map +1 -0
- package/dist/contexts/DashboardContext.js +187 -0
- package/dist/contexts/DashboardContext.js.map +1 -0
- package/dist/core/memory/MemoryManagerFactory.d.ts +77 -0
- package/dist/core/memory/MemoryManagerFactory.d.ts.map +1 -0
- package/dist/core/memory/MemoryManagerFactory.js +270 -0
- package/dist/core/memory/MemoryManagerFactory.js.map +1 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts +58 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +375 -131
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/index.d.ts +1 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +12 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/hooks/useKeyboardShortcuts.d.ts +12 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.js +69 -0
- package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/mcp/handlers/memory/memory-backup.js +6 -6
- package/dist/mcp/handlers/memory/memory-backup.js.map +1 -1
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -1
- package/dist/mcp/handlers/phase2/Phase2Tools.js +4 -2
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +4 -38
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +4 -4
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/persistence/event-store.d.ts +162 -0
- package/dist/persistence/event-store.d.ts.map +1 -0
- package/dist/persistence/event-store.js +315 -0
- package/dist/persistence/event-store.js.map +1 -0
- package/dist/persistence/index.d.ts +145 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +227 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/metrics-aggregator.d.ts +187 -0
- package/dist/persistence/metrics-aggregator.d.ts.map +1 -0
- package/dist/persistence/metrics-aggregator.js +495 -0
- package/dist/persistence/metrics-aggregator.js.map +1 -0
- package/dist/persistence/reasoning-store.d.ts +178 -0
- package/dist/persistence/reasoning-store.d.ts.map +1 -0
- package/dist/persistence/reasoning-store.js +440 -0
- package/dist/persistence/reasoning-store.js.map +1 -0
- package/dist/persistence/schema.d.ts +181 -0
- package/dist/persistence/schema.d.ts.map +1 -0
- package/dist/persistence/schema.js +186 -0
- package/dist/persistence/schema.js.map +1 -0
- package/dist/telemetry/bootstrap.d.ts +67 -0
- package/dist/telemetry/bootstrap.d.ts.map +1 -0
- package/dist/telemetry/bootstrap.js +320 -0
- package/dist/telemetry/bootstrap.js.map +1 -0
- package/dist/telemetry/index.d.ts +16 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +84 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/instrumentation/agent.d.ts +158 -0
- package/dist/telemetry/instrumentation/agent.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/agent.js +372 -0
- package/dist/telemetry/instrumentation/agent.js.map +1 -0
- package/dist/telemetry/instrumentation/index.d.ts +24 -0
- package/dist/telemetry/instrumentation/index.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/index.js +54 -0
- package/dist/telemetry/instrumentation/index.js.map +1 -0
- package/dist/telemetry/instrumentation/memory.d.ts +313 -0
- package/dist/telemetry/instrumentation/memory.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/memory.js +552 -0
- package/dist/telemetry/instrumentation/memory.js.map +1 -0
- package/dist/telemetry/instrumentation/task.d.ts +146 -0
- package/dist/telemetry/instrumentation/task.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/task.js +305 -0
- package/dist/telemetry/instrumentation/task.js.map +1 -0
- package/dist/telemetry/metrics/agent-metrics.d.ts +109 -0
- package/dist/telemetry/metrics/agent-metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics/agent-metrics.js +213 -0
- package/dist/telemetry/metrics/agent-metrics.js.map +1 -0
- package/dist/telemetry/metrics/collectors/cost.d.ts +246 -0
- package/dist/telemetry/metrics/collectors/cost.d.ts.map +1 -0
- package/dist/telemetry/metrics/collectors/cost.js +526 -0
- package/dist/telemetry/metrics/collectors/cost.js.map +1 -0
- package/dist/telemetry/metrics/collectors/pricing-config.d.ts +87 -0
- package/dist/telemetry/metrics/collectors/pricing-config.d.ts.map +1 -0
- package/dist/telemetry/metrics/collectors/pricing-config.js +207 -0
- package/dist/telemetry/metrics/collectors/pricing-config.js.map +1 -0
- package/dist/telemetry/metrics/index.d.ts +54 -0
- package/dist/telemetry/metrics/index.d.ts.map +1 -0
- package/dist/telemetry/metrics/index.js +116 -0
- package/dist/telemetry/metrics/index.js.map +1 -0
- package/dist/telemetry/metrics/quality-metrics.d.ts +171 -0
- package/dist/telemetry/metrics/quality-metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics/quality-metrics.js +259 -0
- package/dist/telemetry/metrics/quality-metrics.js.map +1 -0
- package/dist/telemetry/metrics/system-metrics.d.ts +129 -0
- package/dist/telemetry/metrics/system-metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics/system-metrics.js +380 -0
- package/dist/telemetry/metrics/system-metrics.js.map +1 -0
- package/dist/telemetry/types.d.ts +195 -0
- package/dist/telemetry/types.d.ts.map +1 -0
- package/dist/telemetry/types.js +90 -0
- package/dist/telemetry/types.js.map +1 -0
- package/dist/visualization/api/RestEndpoints.d.ts +136 -0
- package/dist/visualization/api/RestEndpoints.d.ts.map +1 -0
- package/dist/visualization/api/RestEndpoints.js +428 -0
- package/dist/visualization/api/RestEndpoints.js.map +1 -0
- package/dist/visualization/api/WebSocketServer.d.ts +165 -0
- package/dist/visualization/api/WebSocketServer.d.ts.map +1 -0
- package/dist/visualization/api/WebSocketServer.js +518 -0
- package/dist/visualization/api/WebSocketServer.js.map +1 -0
- package/dist/visualization/core/DataTransformer.d.ts +89 -0
- package/dist/visualization/core/DataTransformer.d.ts.map +1 -0
- package/dist/visualization/core/DataTransformer.js +478 -0
- package/dist/visualization/core/DataTransformer.js.map +1 -0
- package/dist/visualization/index.d.ts +92 -0
- package/dist/visualization/index.d.ts.map +1 -0
- package/dist/visualization/index.js +121 -0
- package/dist/visualization/index.js.map +1 -0
- package/dist/visualization/types.d.ts +148 -0
- package/dist/visualization/types.d.ts.map +1 -0
- package/dist/visualization/types.js +7 -0
- package/dist/visualization/types.js.map +1 -0
- package/dist/voting/consensus.d.ts +87 -0
- package/dist/voting/consensus.d.ts.map +1 -0
- package/dist/voting/consensus.js +568 -0
- package/dist/voting/consensus.js.map +1 -0
- package/dist/voting/index.d.ts +12 -0
- package/dist/voting/index.d.ts.map +1 -0
- package/dist/voting/index.js +36 -0
- package/dist/voting/index.js.map +1 -0
- package/dist/voting/orchestrator.d.ts +65 -0
- package/dist/voting/orchestrator.d.ts.map +1 -0
- package/dist/voting/orchestrator.js +306 -0
- package/dist/voting/orchestrator.js.map +1 -0
- package/dist/voting/panel-assembly.d.ts +54 -0
- package/dist/voting/panel-assembly.d.ts.map +1 -0
- package/dist/voting/panel-assembly.js +192 -0
- package/dist/voting/panel-assembly.js.map +1 -0
- package/dist/voting/protocol.d.ts +119 -0
- package/dist/voting/protocol.d.ts.map +1 -0
- package/dist/voting/protocol.js +18 -0
- package/dist/voting/protocol.js.map +1 -0
- package/dist/voting/types.d.ts +125 -0
- package/dist/voting/types.d.ts.map +1 -0
- package/dist/voting/types.js +7 -0
- package/dist/voting/types.js.map +1 -0
- package/package.json +43 -2
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base Evaluator Interface
|
|
4
|
+
*
|
|
5
|
+
* Defines the contract for all clause evaluators in the constitution framework.
|
|
6
|
+
* Evaluators analyze code/data against constitution rules and return evaluation results.
|
|
7
|
+
*
|
|
8
|
+
* @module constitution/evaluators/base
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.EvaluatorFactory = exports.BaseEvaluator = void 0;
|
|
13
|
+
/**
|
|
14
|
+
* Abstract base class for evaluators
|
|
15
|
+
*/
|
|
16
|
+
class BaseEvaluator {
|
|
17
|
+
async initialize(config) {
|
|
18
|
+
this.config = config;
|
|
19
|
+
}
|
|
20
|
+
async dispose() {
|
|
21
|
+
// Base implementation does nothing
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Helper to compare values using operator
|
|
25
|
+
* @param actual - Actual value
|
|
26
|
+
* @param operator - Comparison operator
|
|
27
|
+
* @param expected - Expected value
|
|
28
|
+
* @returns True if comparison passes
|
|
29
|
+
*/
|
|
30
|
+
compareValues(actual, operator, expected) {
|
|
31
|
+
switch (operator) {
|
|
32
|
+
case 'equals':
|
|
33
|
+
return actual === expected;
|
|
34
|
+
case 'not_equals':
|
|
35
|
+
return actual !== expected;
|
|
36
|
+
case 'greater_than':
|
|
37
|
+
return typeof actual === 'number' && typeof expected === 'number'
|
|
38
|
+
? actual > expected
|
|
39
|
+
: false;
|
|
40
|
+
case 'less_than':
|
|
41
|
+
return typeof actual === 'number' && typeof expected === 'number'
|
|
42
|
+
? actual < expected
|
|
43
|
+
: false;
|
|
44
|
+
case 'greater_than_or_equal':
|
|
45
|
+
return typeof actual === 'number' && typeof expected === 'number'
|
|
46
|
+
? actual >= expected
|
|
47
|
+
: false;
|
|
48
|
+
case 'less_than_or_equal':
|
|
49
|
+
return typeof actual === 'number' && typeof expected === 'number'
|
|
50
|
+
? actual <= expected
|
|
51
|
+
: false;
|
|
52
|
+
case 'contains':
|
|
53
|
+
return typeof actual === 'string' && typeof expected === 'string'
|
|
54
|
+
? actual.includes(expected)
|
|
55
|
+
: Array.isArray(actual)
|
|
56
|
+
? actual.includes(expected)
|
|
57
|
+
: false;
|
|
58
|
+
case 'not_contains':
|
|
59
|
+
return typeof actual === 'string' && typeof expected === 'string'
|
|
60
|
+
? !actual.includes(expected)
|
|
61
|
+
: Array.isArray(actual)
|
|
62
|
+
? !actual.includes(expected)
|
|
63
|
+
: true;
|
|
64
|
+
case 'matches':
|
|
65
|
+
if (typeof actual === 'string' && typeof expected === 'string') {
|
|
66
|
+
try {
|
|
67
|
+
const regex = new RegExp(expected);
|
|
68
|
+
return regex.test(actual);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
case 'in':
|
|
76
|
+
return Array.isArray(expected)
|
|
77
|
+
? expected.includes(actual)
|
|
78
|
+
: false;
|
|
79
|
+
case 'not_in':
|
|
80
|
+
return Array.isArray(expected)
|
|
81
|
+
? !expected.includes(actual)
|
|
82
|
+
: true;
|
|
83
|
+
case 'exists':
|
|
84
|
+
return actual !== null && actual !== undefined;
|
|
85
|
+
case 'not_exists':
|
|
86
|
+
return actual === null || actual === undefined;
|
|
87
|
+
default:
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Create a check result
|
|
93
|
+
* @param passed - Whether check passed
|
|
94
|
+
* @param field - Field checked
|
|
95
|
+
* @param actual - Actual value
|
|
96
|
+
* @param expected - Expected value
|
|
97
|
+
* @param operator - Operator used
|
|
98
|
+
* @param message - Optional message
|
|
99
|
+
* @returns Check result
|
|
100
|
+
*/
|
|
101
|
+
createResult(passed, field, actual, expected, operator, message) {
|
|
102
|
+
return {
|
|
103
|
+
passed,
|
|
104
|
+
actualValue: actual,
|
|
105
|
+
expectedValue: expected,
|
|
106
|
+
operator,
|
|
107
|
+
field,
|
|
108
|
+
message,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.BaseEvaluator = BaseEvaluator;
|
|
113
|
+
/**
|
|
114
|
+
* Factory for creating evaluators
|
|
115
|
+
*/
|
|
116
|
+
class EvaluatorFactory {
|
|
117
|
+
/**
|
|
118
|
+
* Register an evaluator type
|
|
119
|
+
* @param type - Check type
|
|
120
|
+
* @param factory - Factory function to create evaluator
|
|
121
|
+
*/
|
|
122
|
+
static register(type, factory) {
|
|
123
|
+
this.evaluators.set(type, factory);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Create an evaluator for the given type
|
|
127
|
+
* @param type - Check type
|
|
128
|
+
* @returns Evaluator instance or null if not found
|
|
129
|
+
*/
|
|
130
|
+
static create(type) {
|
|
131
|
+
const factory = this.evaluators.get(type);
|
|
132
|
+
return factory ? factory() : null;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get all registered evaluator types
|
|
136
|
+
* @returns Array of check types
|
|
137
|
+
*/
|
|
138
|
+
static getTypes() {
|
|
139
|
+
return Array.from(this.evaluators.keys());
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.EvaluatorFactory = EvaluatorFactory;
|
|
143
|
+
EvaluatorFactory.evaluators = new Map();
|
|
144
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/constitution/evaluators/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constitution Evaluators
|
|
3
|
+
*
|
|
4
|
+
* Exports all evaluator types and factory for creating evaluators.
|
|
5
|
+
* Provides a unified interface for evaluating constitution rules.
|
|
6
|
+
*
|
|
7
|
+
* @module constitution/evaluators
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
*/
|
|
10
|
+
export * from './base';
|
|
11
|
+
export { ASTEvaluator } from './ast-evaluator';
|
|
12
|
+
export { MetricEvaluator } from './metric-evaluator';
|
|
13
|
+
export { PatternEvaluator, CustomPatternEvaluator } from './pattern-evaluator';
|
|
14
|
+
export { SemanticEvaluator } from './semantic-evaluator';
|
|
15
|
+
/**
|
|
16
|
+
* Register all built-in evaluators
|
|
17
|
+
*/
|
|
18
|
+
export declare function registerBuiltInEvaluators(): void;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/constitution/evaluators/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAQzD;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAKhD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Constitution Evaluators
|
|
4
|
+
*
|
|
5
|
+
* Exports all evaluator types and factory for creating evaluators.
|
|
6
|
+
* Provides a unified interface for evaluating constitution rules.
|
|
7
|
+
*
|
|
8
|
+
* @module constitution/evaluators
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
23
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.SemanticEvaluator = exports.CustomPatternEvaluator = exports.PatternEvaluator = exports.MetricEvaluator = exports.ASTEvaluator = void 0;
|
|
27
|
+
exports.registerBuiltInEvaluators = registerBuiltInEvaluators;
|
|
28
|
+
__exportStar(require("./base"), exports);
|
|
29
|
+
var ast_evaluator_1 = require("./ast-evaluator");
|
|
30
|
+
Object.defineProperty(exports, "ASTEvaluator", { enumerable: true, get: function () { return ast_evaluator_1.ASTEvaluator; } });
|
|
31
|
+
var metric_evaluator_1 = require("./metric-evaluator");
|
|
32
|
+
Object.defineProperty(exports, "MetricEvaluator", { enumerable: true, get: function () { return metric_evaluator_1.MetricEvaluator; } });
|
|
33
|
+
var pattern_evaluator_1 = require("./pattern-evaluator");
|
|
34
|
+
Object.defineProperty(exports, "PatternEvaluator", { enumerable: true, get: function () { return pattern_evaluator_1.PatternEvaluator; } });
|
|
35
|
+
Object.defineProperty(exports, "CustomPatternEvaluator", { enumerable: true, get: function () { return pattern_evaluator_1.CustomPatternEvaluator; } });
|
|
36
|
+
var semantic_evaluator_1 = require("./semantic-evaluator");
|
|
37
|
+
Object.defineProperty(exports, "SemanticEvaluator", { enumerable: true, get: function () { return semantic_evaluator_1.SemanticEvaluator; } });
|
|
38
|
+
const base_1 = require("./base");
|
|
39
|
+
const ast_evaluator_2 = require("./ast-evaluator");
|
|
40
|
+
const metric_evaluator_2 = require("./metric-evaluator");
|
|
41
|
+
const pattern_evaluator_2 = require("./pattern-evaluator");
|
|
42
|
+
const semantic_evaluator_2 = require("./semantic-evaluator");
|
|
43
|
+
/**
|
|
44
|
+
* Register all built-in evaluators
|
|
45
|
+
*/
|
|
46
|
+
function registerBuiltInEvaluators() {
|
|
47
|
+
base_1.EvaluatorFactory.register('ast', () => new ast_evaluator_2.ASTEvaluator());
|
|
48
|
+
base_1.EvaluatorFactory.register('metric', () => new metric_evaluator_2.MetricEvaluator());
|
|
49
|
+
base_1.EvaluatorFactory.register('pattern', () => new pattern_evaluator_2.PatternEvaluator());
|
|
50
|
+
base_1.EvaluatorFactory.register('semantic', () => new semantic_evaluator_2.SemanticEvaluator());
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Initialize evaluator factory with all built-in evaluators
|
|
54
|
+
*/
|
|
55
|
+
registerBuiltInEvaluators();
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/constitution/evaluators/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;AAiBH,8DAKC;AApBD,yCAAuB;AACvB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,yDAA+E;AAAtE,qHAAA,gBAAgB,OAAA;AAAE,2HAAA,sBAAsB,OAAA;AACjD,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAE1B,iCAA0C;AAC1C,mDAA+C;AAC/C,yDAAqD;AACrD,2DAAuD;AACvD,6DAAyD;AAEzD;;GAEG;AACH,SAAgB,yBAAyB;IACvC,uBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,4BAAY,EAAE,CAAC,CAAC;IAC3D,uBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,kCAAe,EAAE,CAAC,CAAC;IACjE,uBAAgB,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,oCAAgB,EAAE,CAAC,CAAC;IACnE,uBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,sCAAiB,EAAE,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,yBAAyB,EAAE,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metric Evaluator
|
|
3
|
+
*
|
|
4
|
+
* Calculates and evaluates quantitative quality metrics.
|
|
5
|
+
* Supports metrics like test coverage, maintainability index, technical debt ratio.
|
|
6
|
+
* Can work with pre-calculated metrics or compute them on demand.
|
|
7
|
+
*
|
|
8
|
+
* @module constitution/evaluators/metric-evaluator
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
import type { RuleCondition } from '../schema';
|
|
12
|
+
import { BaseEvaluator, type CheckResult, type EvaluationContext } from './base';
|
|
13
|
+
/**
|
|
14
|
+
* Metric Evaluator for quantitative quality metrics
|
|
15
|
+
*/
|
|
16
|
+
export declare class MetricEvaluator extends BaseEvaluator {
|
|
17
|
+
readonly type: "metric";
|
|
18
|
+
canHandle(condition: RuleCondition): boolean;
|
|
19
|
+
evaluate(condition: RuleCondition, context: EvaluationContext): Promise<CheckResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Get metrics from context or calculate them
|
|
22
|
+
* @param context - Evaluation context
|
|
23
|
+
* @returns Quality metrics
|
|
24
|
+
*/
|
|
25
|
+
private getMetrics;
|
|
26
|
+
/**
|
|
27
|
+
* Convert context metrics to quality metrics
|
|
28
|
+
* @param metrics - Context metrics
|
|
29
|
+
* @returns Quality metrics
|
|
30
|
+
*/
|
|
31
|
+
private convertMetrics;
|
|
32
|
+
/**
|
|
33
|
+
* Calculate metrics from source code
|
|
34
|
+
* @param sourceCode - Source code to analyze
|
|
35
|
+
* @param data - Additional context data
|
|
36
|
+
* @returns Calculated metrics
|
|
37
|
+
*/
|
|
38
|
+
private calculateMetrics;
|
|
39
|
+
/**
|
|
40
|
+
* Estimate cyclomatic complexity (simple heuristic)
|
|
41
|
+
* @param code - Source code
|
|
42
|
+
* @returns Estimated complexity
|
|
43
|
+
*/
|
|
44
|
+
private estimateComplexity;
|
|
45
|
+
/**
|
|
46
|
+
* Estimate code duplication (simple heuristic)
|
|
47
|
+
* @param code - Source code
|
|
48
|
+
* @returns Estimated duplication percentage
|
|
49
|
+
*/
|
|
50
|
+
private estimateDuplication;
|
|
51
|
+
/**
|
|
52
|
+
* Get metric value by field name
|
|
53
|
+
* @param field - Field name
|
|
54
|
+
* @param metrics - Calculated metrics
|
|
55
|
+
* @returns Metric value
|
|
56
|
+
*/
|
|
57
|
+
private getMetricValue;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=metric-evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metric-evaluator.d.ts","sourceRoot":"","sources":["../../../src/constitution/evaluators/metric-evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAwDjF;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAElC,SAAS,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO;IAItC,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0C1F;;;;OAIG;YACW,UAAU;IAexB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IA8BxB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;CAkCvB"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Metric Evaluator
|
|
4
|
+
*
|
|
5
|
+
* Calculates and evaluates quantitative quality metrics.
|
|
6
|
+
* Supports metrics like test coverage, maintainability index, technical debt ratio.
|
|
7
|
+
* Can work with pre-calculated metrics or compute them on demand.
|
|
8
|
+
*
|
|
9
|
+
* @module constitution/evaluators/metric-evaluator
|
|
10
|
+
* @version 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.MetricEvaluator = void 0;
|
|
14
|
+
const base_1 = require("./base");
|
|
15
|
+
/**
|
|
16
|
+
* Fields that metric evaluator can check
|
|
17
|
+
*/
|
|
18
|
+
const METRIC_FIELDS = new Set([
|
|
19
|
+
'quality_score',
|
|
20
|
+
'coverage',
|
|
21
|
+
'maintainability_index',
|
|
22
|
+
'technical_debt_ratio',
|
|
23
|
+
'security_score',
|
|
24
|
+
'doc_coverage',
|
|
25
|
+
'duplication_percentage',
|
|
26
|
+
'automation_percentage',
|
|
27
|
+
'defect_detection_rate',
|
|
28
|
+
'mean_time_to_detection',
|
|
29
|
+
'result_variance',
|
|
30
|
+
'execution_time',
|
|
31
|
+
'vulnerability_count',
|
|
32
|
+
'code_smell_count',
|
|
33
|
+
]);
|
|
34
|
+
/**
|
|
35
|
+
* Metric Evaluator for quantitative quality metrics
|
|
36
|
+
*/
|
|
37
|
+
class MetricEvaluator extends base_1.BaseEvaluator {
|
|
38
|
+
constructor() {
|
|
39
|
+
super(...arguments);
|
|
40
|
+
this.type = 'metric';
|
|
41
|
+
}
|
|
42
|
+
canHandle(condition) {
|
|
43
|
+
return METRIC_FIELDS.has(condition.field);
|
|
44
|
+
}
|
|
45
|
+
async evaluate(condition, context) {
|
|
46
|
+
try {
|
|
47
|
+
// Get metrics from context or calculate them
|
|
48
|
+
const metrics = await this.getMetrics(context);
|
|
49
|
+
// Get the requested metric value
|
|
50
|
+
const actualValue = this.getMetricValue(condition.field, metrics);
|
|
51
|
+
// Handle missing metrics
|
|
52
|
+
if (actualValue === undefined || actualValue === null) {
|
|
53
|
+
return this.createResult(false, condition.field, null, condition.value, condition.operator, `Metric '${condition.field}' not available in context`);
|
|
54
|
+
}
|
|
55
|
+
// Compare against expected value
|
|
56
|
+
const passed = this.compareValues(actualValue, condition.operator, condition.value);
|
|
57
|
+
return this.createResult(passed, condition.field, actualValue, condition.value, condition.operator);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
return this.createResult(false, condition.field, null, condition.value, condition.operator, `Metric evaluation failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get metrics from context or calculate them
|
|
65
|
+
* @param context - Evaluation context
|
|
66
|
+
* @returns Quality metrics
|
|
67
|
+
*/
|
|
68
|
+
async getMetrics(context) {
|
|
69
|
+
// If metrics are pre-calculated in context, use them
|
|
70
|
+
if (context.metrics) {
|
|
71
|
+
return this.convertMetrics(context.metrics);
|
|
72
|
+
}
|
|
73
|
+
// Otherwise, calculate metrics from source code
|
|
74
|
+
if (context.sourceCode) {
|
|
75
|
+
return this.calculateMetrics(context.sourceCode, context.data || {});
|
|
76
|
+
}
|
|
77
|
+
// If neither is available, return empty metrics
|
|
78
|
+
return {};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Convert context metrics to quality metrics
|
|
82
|
+
* @param metrics - Context metrics
|
|
83
|
+
* @returns Quality metrics
|
|
84
|
+
*/
|
|
85
|
+
convertMetrics(metrics) {
|
|
86
|
+
return {
|
|
87
|
+
qualityScore: metrics.quality_score ?? metrics.qualityScore,
|
|
88
|
+
coverage: metrics.coverage,
|
|
89
|
+
maintainabilityIndex: metrics.maintainability_index ?? metrics.maintainabilityIndex,
|
|
90
|
+
technicalDebtRatio: metrics.technical_debt_ratio ?? metrics.technicalDebtRatio,
|
|
91
|
+
securityScore: metrics.security_score ?? metrics.securityScore,
|
|
92
|
+
docCoverage: metrics.doc_coverage ?? metrics.docCoverage,
|
|
93
|
+
duplicationPercentage: metrics.duplication_percentage ?? metrics.duplicationPercentage,
|
|
94
|
+
automationPercentage: metrics.automation_percentage ?? metrics.automationPercentage,
|
|
95
|
+
defectDetectionRate: metrics.defect_detection_rate ?? metrics.defectDetectionRate,
|
|
96
|
+
meanTimeToDetection: metrics.mean_time_to_detection ?? metrics.meanTimeToDetection,
|
|
97
|
+
resultVariance: metrics.result_variance ?? metrics.resultVariance,
|
|
98
|
+
executionTime: metrics.execution_time ?? metrics.executionTime,
|
|
99
|
+
vulnerabilityCount: metrics.vulnerability_count ?? metrics.vulnerabilityCount,
|
|
100
|
+
codeSmellCount: metrics.code_smell_count ?? metrics.codeSmellCount,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Calculate metrics from source code
|
|
105
|
+
* @param sourceCode - Source code to analyze
|
|
106
|
+
* @param data - Additional context data
|
|
107
|
+
* @returns Calculated metrics
|
|
108
|
+
*/
|
|
109
|
+
calculateMetrics(sourceCode, data) {
|
|
110
|
+
const metrics = {};
|
|
111
|
+
// Calculate maintainability index
|
|
112
|
+
// Formula: MI = 171 - 5.2 * ln(HV) - 0.23 * CC - 16.2 * ln(LOC)
|
|
113
|
+
// Where: HV = Halstead Volume, CC = Cyclomatic Complexity, LOC = Lines of Code
|
|
114
|
+
const lines = sourceCode.split('\n').length;
|
|
115
|
+
const estimatedComplexity = this.estimateComplexity(sourceCode);
|
|
116
|
+
// Simplified maintainability index calculation
|
|
117
|
+
metrics.maintainabilityIndex = Math.max(0, Math.min(100, 171 - 5.2 * Math.log(lines * 10) - 0.23 * estimatedComplexity - 16.2 * Math.log(lines)));
|
|
118
|
+
// Calculate documentation coverage (simple heuristic: comment ratio)
|
|
119
|
+
const commentLines = (sourceCode.match(/\/\/.+|\/\*[\s\S]*?\*\//g) || []).length;
|
|
120
|
+
metrics.docCoverage = Math.min(100, (commentLines / lines) * 300); // 1 comment per 3 lines = 100%
|
|
121
|
+
// Calculate duplication (simple heuristic: repeated lines)
|
|
122
|
+
metrics.duplicationPercentage = this.estimateDuplication(sourceCode);
|
|
123
|
+
// Use data from context if available
|
|
124
|
+
if (data.coverage !== undefined)
|
|
125
|
+
metrics.coverage = Number(data.coverage);
|
|
126
|
+
if (data.securityScore !== undefined)
|
|
127
|
+
metrics.securityScore = Number(data.securityScore);
|
|
128
|
+
if (data.vulnerabilityCount !== undefined)
|
|
129
|
+
metrics.vulnerabilityCount = Number(data.vulnerabilityCount);
|
|
130
|
+
return metrics;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Estimate cyclomatic complexity (simple heuristic)
|
|
134
|
+
* @param code - Source code
|
|
135
|
+
* @returns Estimated complexity
|
|
136
|
+
*/
|
|
137
|
+
estimateComplexity(code) {
|
|
138
|
+
const controlFlowKeywords = /\b(if|else|switch|case|for|while|do|catch|&&|\|\||\?)\b/g;
|
|
139
|
+
const matches = code.match(controlFlowKeywords);
|
|
140
|
+
return (matches?.length || 0) + 1;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Estimate code duplication (simple heuristic)
|
|
144
|
+
* @param code - Source code
|
|
145
|
+
* @returns Estimated duplication percentage
|
|
146
|
+
*/
|
|
147
|
+
estimateDuplication(code) {
|
|
148
|
+
const lines = code.split('\n').filter(line => line.trim().length > 0);
|
|
149
|
+
const uniqueLines = new Set(lines);
|
|
150
|
+
const duplicatedLines = lines.length - uniqueLines.size;
|
|
151
|
+
return lines.length > 0 ? (duplicatedLines / lines.length) * 100 : 0;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get metric value by field name
|
|
155
|
+
* @param field - Field name
|
|
156
|
+
* @param metrics - Calculated metrics
|
|
157
|
+
* @returns Metric value
|
|
158
|
+
*/
|
|
159
|
+
getMetricValue(field, metrics) {
|
|
160
|
+
switch (field) {
|
|
161
|
+
case 'quality_score':
|
|
162
|
+
return metrics.qualityScore;
|
|
163
|
+
case 'coverage':
|
|
164
|
+
return metrics.coverage;
|
|
165
|
+
case 'maintainability_index':
|
|
166
|
+
return metrics.maintainabilityIndex;
|
|
167
|
+
case 'technical_debt_ratio':
|
|
168
|
+
return metrics.technicalDebtRatio;
|
|
169
|
+
case 'security_score':
|
|
170
|
+
return metrics.securityScore;
|
|
171
|
+
case 'doc_coverage':
|
|
172
|
+
return metrics.docCoverage;
|
|
173
|
+
case 'duplication_percentage':
|
|
174
|
+
return metrics.duplicationPercentage;
|
|
175
|
+
case 'automation_percentage':
|
|
176
|
+
return metrics.automationPercentage;
|
|
177
|
+
case 'defect_detection_rate':
|
|
178
|
+
return metrics.defectDetectionRate;
|
|
179
|
+
case 'mean_time_to_detection':
|
|
180
|
+
return metrics.meanTimeToDetection;
|
|
181
|
+
case 'result_variance':
|
|
182
|
+
return metrics.resultVariance;
|
|
183
|
+
case 'execution_time':
|
|
184
|
+
return metrics.executionTime;
|
|
185
|
+
case 'vulnerability_count':
|
|
186
|
+
return metrics.vulnerabilityCount;
|
|
187
|
+
case 'code_smell_count':
|
|
188
|
+
return metrics.codeSmellCount;
|
|
189
|
+
default:
|
|
190
|
+
return undefined;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
exports.MetricEvaluator = MetricEvaluator;
|
|
195
|
+
//# sourceMappingURL=metric-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metric-evaluator.js","sourceRoot":"","sources":["../../../src/constitution/evaluators/metric-evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Evaluator
|
|
3
|
+
*
|
|
4
|
+
* Uses regex patterns to detect code issues like:
|
|
5
|
+
* - Hardcoded secrets (API keys, passwords, tokens)
|
|
6
|
+
* - SQL injection vulnerabilities
|
|
7
|
+
* - XSS vulnerabilities
|
|
8
|
+
* - Other security and quality patterns
|
|
9
|
+
*
|
|
10
|
+
* @module constitution/evaluators/pattern-evaluator
|
|
11
|
+
* @version 1.0.0
|
|
12
|
+
*/
|
|
13
|
+
import type { RuleCondition } from '../schema';
|
|
14
|
+
import { BaseEvaluator, type CheckResult, type EvaluationContext } from './base';
|
|
15
|
+
/**
|
|
16
|
+
* Pattern Evaluator for regex-based code analysis
|
|
17
|
+
*/
|
|
18
|
+
export declare class PatternEvaluator extends BaseEvaluator {
|
|
19
|
+
readonly type: "pattern";
|
|
20
|
+
canHandle(condition: RuleCondition): boolean;
|
|
21
|
+
evaluate(condition: RuleCondition, context: EvaluationContext): Promise<CheckResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Detect patterns in source code
|
|
24
|
+
* @param field - Field to check
|
|
25
|
+
* @param sourceCode - Source code to analyze
|
|
26
|
+
* @returns Array of pattern matches
|
|
27
|
+
*/
|
|
28
|
+
private detectPatterns;
|
|
29
|
+
/**
|
|
30
|
+
* Get patterns for a specific field
|
|
31
|
+
* @param field - Field name
|
|
32
|
+
* @returns Array of regex patterns
|
|
33
|
+
*/
|
|
34
|
+
private getPatternsForField;
|
|
35
|
+
/**
|
|
36
|
+
* Get actual value based on field type
|
|
37
|
+
* @param field - Field name
|
|
38
|
+
* @param matches - Pattern matches
|
|
39
|
+
* @returns Actual value for comparison
|
|
40
|
+
*/
|
|
41
|
+
private getActualValue;
|
|
42
|
+
/**
|
|
43
|
+
* Get context lines around a match
|
|
44
|
+
* @param lines - All source lines
|
|
45
|
+
* @param lineIndex - Index of matched line
|
|
46
|
+
* @param contextLines - Number of context lines
|
|
47
|
+
* @returns Context string
|
|
48
|
+
*/
|
|
49
|
+
private getContext;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Custom pattern evaluator for user-defined patterns
|
|
53
|
+
*/
|
|
54
|
+
export declare class CustomPatternEvaluator extends BaseEvaluator {
|
|
55
|
+
readonly type: "pattern";
|
|
56
|
+
private customPatterns;
|
|
57
|
+
/**
|
|
58
|
+
* Register a custom pattern
|
|
59
|
+
* @param field - Field name
|
|
60
|
+
* @param patterns - Regex patterns
|
|
61
|
+
*/
|
|
62
|
+
registerPattern(field: string, patterns: RegExp[]): void;
|
|
63
|
+
canHandle(condition: RuleCondition): boolean;
|
|
64
|
+
evaluate(condition: RuleCondition, context: EvaluationContext): Promise<CheckResult>;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=pattern-evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-evaluator.d.ts","sourceRoot":"","sources":["../../../src/constitution/evaluators/pattern-evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AA0EjF;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,aAAa;IACjD,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IAEnC,SAAS,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO;IAItC,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAmD1F;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAwBtB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAWtB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;CAKnB;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,aAAa;IACvD,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IACnC,OAAO,CAAC,cAAc,CAA+B;IAErD;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAIxD,SAAS,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO;IAItC,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;CAmC3F"}
|