agentic-qe 1.8.2 → 1.8.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.
- package/.claude/agents/qe-test-generator.md +580 -0
- package/.claude/agents/subagents/qe-code-reviewer.md +86 -0
- package/.claude/agents/subagents/qe-coverage-gap-analyzer.md +485 -0
- package/.claude/agents/subagents/qe-data-generator.md +86 -0
- package/.claude/agents/subagents/qe-flaky-investigator.md +416 -0
- package/.claude/agents/subagents/qe-integration-tester.md +87 -0
- package/.claude/agents/subagents/qe-performance-validator.md +98 -0
- package/.claude/agents/subagents/qe-security-auditor.md +86 -0
- package/.claude/agents/subagents/qe-test-data-architect-sub.md +553 -0
- package/.claude/agents/subagents/qe-test-implementer.md +229 -15
- package/.claude/agents/subagents/qe-test-refactorer.md +265 -15
- package/.claude/agents/subagents/qe-test-writer.md +180 -20
- package/CHANGELOG.md +74 -0
- package/README.md +48 -50
- package/dist/core/hooks/validators/TDDPhaseValidator.d.ts +110 -0
- package/dist/core/hooks/validators/TDDPhaseValidator.d.ts.map +1 -0
- package/dist/core/hooks/validators/TDDPhaseValidator.js +287 -0
- package/dist/core/hooks/validators/TDDPhaseValidator.js.map +1 -0
- package/dist/core/hooks/validators/index.d.ts +3 -1
- package/dist/core/hooks/validators/index.d.ts.map +1 -1
- package/dist/core/hooks/validators/index.js +4 -2
- package/dist/core/hooks/validators/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TDD Phase Validator - Runtime enforcement for TDD subagent coordination
|
|
4
|
+
*
|
|
5
|
+
* Validates that each phase of the TDD cycle produces correct output
|
|
6
|
+
* in the memory store before allowing transition to next phase.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.TDDPhaseValidator = void 0;
|
|
10
|
+
const crypto_1 = require("crypto");
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
class TDDPhaseValidator {
|
|
13
|
+
constructor(memoryClient) {
|
|
14
|
+
this.memoryClient = memoryClient;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Validate RED phase output before transitioning to GREEN
|
|
18
|
+
*/
|
|
19
|
+
async validateREDPhase(cycleId) {
|
|
20
|
+
const errors = [];
|
|
21
|
+
const warnings = [];
|
|
22
|
+
const metrics = {
|
|
23
|
+
memoryKeyExists: false,
|
|
24
|
+
outputSchemaValid: false,
|
|
25
|
+
handoffReady: false,
|
|
26
|
+
fileIntegrityValid: false
|
|
27
|
+
};
|
|
28
|
+
// 1. Check memory key exists
|
|
29
|
+
const memoryKey = `aqe/tdd/cycle-${cycleId}/red/tests`;
|
|
30
|
+
let output = null;
|
|
31
|
+
try {
|
|
32
|
+
output = await this.memoryClient.retrieve(memoryKey, { partition: 'coordination' });
|
|
33
|
+
metrics.memoryKeyExists = !!output;
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
errors.push(`Failed to retrieve RED phase output from ${memoryKey}: ${e}`);
|
|
37
|
+
}
|
|
38
|
+
if (!output) {
|
|
39
|
+
errors.push(`RED phase output not found at ${memoryKey}`);
|
|
40
|
+
return { valid: false, phase: 'RED', cycleId, errors, warnings, metrics };
|
|
41
|
+
}
|
|
42
|
+
// 2. Validate schema
|
|
43
|
+
if (!output.cycleId || output.cycleId !== cycleId) {
|
|
44
|
+
errors.push(`Cycle ID mismatch: expected ${cycleId}, got ${output.cycleId}`);
|
|
45
|
+
}
|
|
46
|
+
else if (!output.testFile?.path || !output.testFile?.hash) {
|
|
47
|
+
errors.push('Missing testFile.path or testFile.hash in RED output');
|
|
48
|
+
}
|
|
49
|
+
else if (!output.validation || typeof output.validation.allTestsFailing !== 'boolean') {
|
|
50
|
+
errors.push('Missing or invalid validation.allTestsFailing in RED output');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
metrics.outputSchemaValid = true;
|
|
54
|
+
}
|
|
55
|
+
// 3. Validate tests are failing (RED phase requirement)
|
|
56
|
+
if (output.validation && !output.validation.allTestsFailing) {
|
|
57
|
+
errors.push('RED phase violation: Tests must fail initially. Found passing tests.');
|
|
58
|
+
}
|
|
59
|
+
// 4. Check handoff readiness
|
|
60
|
+
if (!output.readyForHandoff) {
|
|
61
|
+
errors.push('RED phase not ready for handoff');
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
metrics.handoffReady = true;
|
|
65
|
+
}
|
|
66
|
+
// 5. Validate file integrity
|
|
67
|
+
if (output.testFile?.path && output.testFile?.hash) {
|
|
68
|
+
const fileValid = await this.validateFileHash(output.testFile.path, output.testFile.hash);
|
|
69
|
+
metrics.fileIntegrityValid = fileValid;
|
|
70
|
+
if (!fileValid) {
|
|
71
|
+
errors.push(`Test file hash mismatch for ${output.testFile.path}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
valid: errors.length === 0,
|
|
76
|
+
phase: 'RED',
|
|
77
|
+
cycleId,
|
|
78
|
+
errors,
|
|
79
|
+
warnings,
|
|
80
|
+
metrics
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Validate GREEN phase output before transitioning to REFACTOR
|
|
85
|
+
*/
|
|
86
|
+
async validateGREENPhase(cycleId) {
|
|
87
|
+
const errors = [];
|
|
88
|
+
const warnings = [];
|
|
89
|
+
const metrics = {
|
|
90
|
+
memoryKeyExists: false,
|
|
91
|
+
outputSchemaValid: false,
|
|
92
|
+
handoffReady: false,
|
|
93
|
+
fileIntegrityValid: false
|
|
94
|
+
};
|
|
95
|
+
// 1. Check memory key exists
|
|
96
|
+
const memoryKey = `aqe/tdd/cycle-${cycleId}/green/impl`;
|
|
97
|
+
let output = null;
|
|
98
|
+
try {
|
|
99
|
+
output = await this.memoryClient.retrieve(memoryKey, { partition: 'coordination' });
|
|
100
|
+
metrics.memoryKeyExists = !!output;
|
|
101
|
+
}
|
|
102
|
+
catch (e) {
|
|
103
|
+
errors.push(`Failed to retrieve GREEN phase output from ${memoryKey}: ${e}`);
|
|
104
|
+
}
|
|
105
|
+
if (!output) {
|
|
106
|
+
errors.push(`GREEN phase output not found at ${memoryKey}`);
|
|
107
|
+
return { valid: false, phase: 'GREEN', cycleId, errors, warnings, metrics };
|
|
108
|
+
}
|
|
109
|
+
// 2. Validate schema
|
|
110
|
+
if (!output.cycleId || output.cycleId !== cycleId) {
|
|
111
|
+
errors.push(`Cycle ID mismatch: expected ${cycleId}, got ${output.cycleId}`);
|
|
112
|
+
}
|
|
113
|
+
else if (!output.implFile?.path || !output.implFile?.hash) {
|
|
114
|
+
errors.push('Missing implFile.path or implFile.hash in GREEN output');
|
|
115
|
+
}
|
|
116
|
+
else if (!output.validation || typeof output.validation.allTestsPassing !== 'boolean') {
|
|
117
|
+
errors.push('Missing or invalid validation.allTestsPassing in GREEN output');
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
metrics.outputSchemaValid = true;
|
|
121
|
+
}
|
|
122
|
+
// 3. Validate tests are passing (GREEN phase requirement)
|
|
123
|
+
if (output.validation && !output.validation.allTestsPassing) {
|
|
124
|
+
errors.push('GREEN phase violation: All tests must pass.');
|
|
125
|
+
}
|
|
126
|
+
// 4. Validate test file hash matches RED phase
|
|
127
|
+
try {
|
|
128
|
+
const redOutput = await this.memoryClient.retrieve(`aqe/tdd/cycle-${cycleId}/red/tests`, { partition: 'coordination' });
|
|
129
|
+
if (redOutput && output.testFile?.hash !== redOutput.testFile?.hash) {
|
|
130
|
+
errors.push(`Test file was modified between RED and GREEN phases`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (e) {
|
|
134
|
+
warnings.push(`Could not verify RED phase for test file integrity: ${e}`);
|
|
135
|
+
}
|
|
136
|
+
// 5. Check handoff readiness
|
|
137
|
+
if (!output.readyForHandoff) {
|
|
138
|
+
errors.push('GREEN phase not ready for handoff');
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
metrics.handoffReady = true;
|
|
142
|
+
}
|
|
143
|
+
// 6. Validate file integrity
|
|
144
|
+
if (output.implFile?.path && output.implFile?.hash) {
|
|
145
|
+
const fileValid = await this.validateFileHash(output.implFile.path, output.implFile.hash);
|
|
146
|
+
metrics.fileIntegrityValid = fileValid;
|
|
147
|
+
if (!fileValid) {
|
|
148
|
+
errors.push(`Implementation file hash mismatch for ${output.implFile.path}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
valid: errors.length === 0,
|
|
153
|
+
phase: 'GREEN',
|
|
154
|
+
cycleId,
|
|
155
|
+
errors,
|
|
156
|
+
warnings,
|
|
157
|
+
metrics
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Validate REFACTOR phase output (final validation)
|
|
162
|
+
*/
|
|
163
|
+
async validateREFACTORPhase(cycleId) {
|
|
164
|
+
const errors = [];
|
|
165
|
+
const warnings = [];
|
|
166
|
+
const metrics = {
|
|
167
|
+
memoryKeyExists: false,
|
|
168
|
+
outputSchemaValid: false,
|
|
169
|
+
handoffReady: false,
|
|
170
|
+
fileIntegrityValid: false
|
|
171
|
+
};
|
|
172
|
+
// 1. Check memory key exists
|
|
173
|
+
const memoryKey = `aqe/tdd/cycle-${cycleId}/refactor/result`;
|
|
174
|
+
let output = null;
|
|
175
|
+
try {
|
|
176
|
+
output = await this.memoryClient.retrieve(memoryKey, { partition: 'coordination' });
|
|
177
|
+
metrics.memoryKeyExists = !!output;
|
|
178
|
+
}
|
|
179
|
+
catch (e) {
|
|
180
|
+
errors.push(`Failed to retrieve REFACTOR phase output from ${memoryKey}: ${e}`);
|
|
181
|
+
}
|
|
182
|
+
if (!output) {
|
|
183
|
+
errors.push(`REFACTOR phase output not found at ${memoryKey}`);
|
|
184
|
+
return { valid: false, phase: 'REFACTOR', cycleId, errors, warnings, metrics };
|
|
185
|
+
}
|
|
186
|
+
// 2. Validate schema
|
|
187
|
+
if (!output.cycleId || output.cycleId !== cycleId) {
|
|
188
|
+
errors.push(`Cycle ID mismatch: expected ${cycleId}, got ${output.cycleId}`);
|
|
189
|
+
}
|
|
190
|
+
else if (!output.implFile?.path || !output.implFile?.hash) {
|
|
191
|
+
errors.push('Missing implFile.path or implFile.hash in REFACTOR output');
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
metrics.outputSchemaValid = true;
|
|
195
|
+
}
|
|
196
|
+
// 3. Validate tests still passing after refactor
|
|
197
|
+
if (output.validation && !output.validation.allTestsPassing) {
|
|
198
|
+
errors.push('REFACTOR phase violation: Tests must still pass after refactoring.');
|
|
199
|
+
}
|
|
200
|
+
// 4. Validate test file hash unchanged throughout cycle
|
|
201
|
+
try {
|
|
202
|
+
const redOutput = await this.memoryClient.retrieve(`aqe/tdd/cycle-${cycleId}/red/tests`, { partition: 'coordination' });
|
|
203
|
+
if (redOutput && output.testFile?.hash !== redOutput.testFile?.hash) {
|
|
204
|
+
errors.push(`Test file was modified during TDD cycle - integrity violation`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch (e) {
|
|
208
|
+
warnings.push(`Could not verify RED phase for test file integrity: ${e}`);
|
|
209
|
+
}
|
|
210
|
+
// 5. Check review readiness
|
|
211
|
+
if (!output.readyForReview) {
|
|
212
|
+
warnings.push('REFACTOR phase not marked ready for review');
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
metrics.handoffReady = true;
|
|
216
|
+
}
|
|
217
|
+
// 6. Validate coverage didn't decrease
|
|
218
|
+
try {
|
|
219
|
+
const greenOutput = await this.memoryClient.retrieve(`aqe/tdd/cycle-${cycleId}/green/impl`, { partition: 'coordination' });
|
|
220
|
+
if (greenOutput && output.validation?.coverage < greenOutput.validation?.coverage) {
|
|
221
|
+
warnings.push(`Coverage decreased from ${greenOutput.validation.coverage}% to ${output.validation.coverage}%`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch (e) {
|
|
225
|
+
warnings.push(`Could not verify GREEN phase for coverage comparison: ${e}`);
|
|
226
|
+
}
|
|
227
|
+
// 7. Validate file integrity
|
|
228
|
+
if (output.implFile?.path && output.implFile?.hash) {
|
|
229
|
+
const fileValid = await this.validateFileHash(output.implFile.path, output.implFile.hash);
|
|
230
|
+
metrics.fileIntegrityValid = fileValid;
|
|
231
|
+
if (!fileValid) {
|
|
232
|
+
errors.push(`Implementation file hash mismatch for ${output.implFile.path}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
valid: errors.length === 0,
|
|
237
|
+
phase: 'REFACTOR',
|
|
238
|
+
cycleId,
|
|
239
|
+
errors,
|
|
240
|
+
warnings,
|
|
241
|
+
metrics
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Validate complete TDD cycle
|
|
246
|
+
*/
|
|
247
|
+
async validateCompleteCycle(cycleId) {
|
|
248
|
+
const redResult = await this.validateREDPhase(cycleId);
|
|
249
|
+
const greenResult = await this.validateGREENPhase(cycleId);
|
|
250
|
+
const refactorResult = await this.validateREFACTORPhase(cycleId);
|
|
251
|
+
const allValid = redResult.valid && greenResult.valid && refactorResult.valid;
|
|
252
|
+
const totalErrors = redResult.errors.length + greenResult.errors.length + refactorResult.errors.length;
|
|
253
|
+
return {
|
|
254
|
+
valid: allValid,
|
|
255
|
+
phases: [redResult, greenResult, refactorResult],
|
|
256
|
+
summary: allValid
|
|
257
|
+
? `TDD cycle ${cycleId} completed successfully with full coordination`
|
|
258
|
+
: `TDD cycle ${cycleId} has ${totalErrors} validation errors`
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Calculate SHA256 hash of a file
|
|
263
|
+
*/
|
|
264
|
+
static calculateFileHash(filePath) {
|
|
265
|
+
if (!(0, fs_1.existsSync)(filePath)) {
|
|
266
|
+
throw new Error(`File not found: ${filePath}`);
|
|
267
|
+
}
|
|
268
|
+
const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
|
|
269
|
+
return (0, crypto_1.createHash)('sha256').update(content).digest('hex');
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Validate file hash matches expected
|
|
273
|
+
*/
|
|
274
|
+
async validateFileHash(filePath, expectedHash) {
|
|
275
|
+
try {
|
|
276
|
+
const actualHash = TDDPhaseValidator.calculateFileHash(filePath);
|
|
277
|
+
return actualHash === expectedHash;
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
exports.TDDPhaseValidator = TDDPhaseValidator;
|
|
285
|
+
// Export for use in hooks system
|
|
286
|
+
exports.default = TDDPhaseValidator;
|
|
287
|
+
//# sourceMappingURL=TDDPhaseValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TDDPhaseValidator.js","sourceRoot":"","sources":["../../../../src/core/hooks/validators/TDDPhaseValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Post-Task Validators - Output, Quality, Coverage, and
|
|
2
|
+
* Post-Task Validators - Output, Quality, Coverage, Performance, and TDD Phase Validation
|
|
3
3
|
*/
|
|
4
4
|
export { OutputValidator } from './OutputValidator';
|
|
5
5
|
export { QualityValidator } from './QualityValidator';
|
|
6
6
|
export { CoverageValidator } from './CoverageValidator';
|
|
7
7
|
export { PerformanceValidator } from './PerformanceValidator';
|
|
8
|
+
export { TDDPhaseValidator } from './TDDPhaseValidator';
|
|
8
9
|
export type { OutputValidationOptions, OutputValidationResult } from './OutputValidator';
|
|
9
10
|
export type { QualityValidationOptions, QualityValidationResult } from './QualityValidator';
|
|
10
11
|
export type { CoverageValidationOptions, CoverageValidationResult } from './CoverageValidator';
|
|
11
12
|
export type { PerformanceValidationOptions, PerformanceValidationResult } from './PerformanceValidator';
|
|
13
|
+
export type { TDDValidationResult, REDPhaseOutput, GREENPhaseOutput, REFACTORPhaseOutput, MemoryClient } from './TDDPhaseValidator';
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/validators/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/validators/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,YAAY,EACV,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EACV,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACb,MAAM,qBAAqB,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Post-Task Validators - Output, Quality, Coverage, and
|
|
3
|
+
* Post-Task Validators - Output, Quality, Coverage, Performance, and TDD Phase Validation
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.PerformanceValidator = exports.CoverageValidator = exports.QualityValidator = exports.OutputValidator = void 0;
|
|
6
|
+
exports.TDDPhaseValidator = exports.PerformanceValidator = exports.CoverageValidator = exports.QualityValidator = exports.OutputValidator = void 0;
|
|
7
7
|
var OutputValidator_1 = require("./OutputValidator");
|
|
8
8
|
Object.defineProperty(exports, "OutputValidator", { enumerable: true, get: function () { return OutputValidator_1.OutputValidator; } });
|
|
9
9
|
var QualityValidator_1 = require("./QualityValidator");
|
|
@@ -12,4 +12,6 @@ var CoverageValidator_1 = require("./CoverageValidator");
|
|
|
12
12
|
Object.defineProperty(exports, "CoverageValidator", { enumerable: true, get: function () { return CoverageValidator_1.CoverageValidator; } });
|
|
13
13
|
var PerformanceValidator_1 = require("./PerformanceValidator");
|
|
14
14
|
Object.defineProperty(exports, "PerformanceValidator", { enumerable: true, get: function () { return PerformanceValidator_1.PerformanceValidator; } });
|
|
15
|
+
var TDDPhaseValidator_1 = require("./TDDPhaseValidator");
|
|
16
|
+
Object.defineProperty(exports, "TDDPhaseValidator", { enumerable: true, get: function () { return TDDPhaseValidator_1.TDDPhaseValidator; } });
|
|
15
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/hooks/validators/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/hooks/validators/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAC7B,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-qe",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.3",
|
|
4
4
|
"description": "Agentic Quality Engineering Fleet System - AI-driven quality management platform with 38 QE skills, learning, pattern reuse, ML-based flaky detection, Multi-Model Router (70-81% cost savings), streaming progress updates, 102 MCP tools, and native TypeScript hooks",
|
|
5
5
|
"main": "dist/cli/index.js",
|
|
6
6
|
"types": "dist/cli/index.d.ts",
|