@aisdlc/core 2.3.0 → 2.4.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/dist/index.cjs +516 -100
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +72 -1
- package/dist/index.d.ts +72 -1
- package/dist/index.js +513 -101
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -266,19 +266,26 @@ function extractPythonFunctions(content, filePath) {
|
|
|
266
266
|
}
|
|
267
267
|
return buildMetricsFromBlocks(blocks, content, filePath);
|
|
268
268
|
}
|
|
269
|
-
function
|
|
270
|
-
if (
|
|
271
|
-
|
|
272
|
-
|
|
269
|
+
function tryStartBraceFunction(line, state, ext) {
|
|
270
|
+
if (state.currentFn || state.inBlockComment || state.rawTerm) return;
|
|
271
|
+
const candidate = matchFunctionHeader(line, ext);
|
|
272
|
+
if (candidate) {
|
|
273
273
|
state.currentFn = candidate;
|
|
274
274
|
state.braceCount = 0;
|
|
275
275
|
state.fnLines = [];
|
|
276
276
|
}
|
|
277
|
-
|
|
278
|
-
|
|
277
|
+
}
|
|
278
|
+
function updateBraceScanState(line, state, ext) {
|
|
279
|
+
const res = scanBracesInLine(line, state.inBlockComment, state.rawTerm, ext);
|
|
279
280
|
state.inBlockComment = res.nowInBlock;
|
|
281
|
+
state.rawTerm = res.nowRawTerm;
|
|
280
282
|
state.braceCount += res.delta;
|
|
281
|
-
|
|
283
|
+
}
|
|
284
|
+
function processBraceLine(line, state, blocks, lineIndex, ext) {
|
|
285
|
+
tryStartBraceFunction(line, state, ext);
|
|
286
|
+
if (state.currentFn) state.fnLines.push(line);
|
|
287
|
+
updateBraceScanState(line, state, ext);
|
|
288
|
+
if (state.currentFn && state.braceCount === 0 && state.fnLines.length > 1) {
|
|
282
289
|
blocks.push({ name: state.currentFn, body: state.fnLines.join("\n"), startLine: lineIndex });
|
|
283
290
|
state.currentFn = null;
|
|
284
291
|
state.fnLines = [];
|
|
@@ -288,98 +295,153 @@ function extractBraceFunctions(content, filePath) {
|
|
|
288
295
|
const ext = path4.extname(filePath).toLowerCase();
|
|
289
296
|
const lines = content.split("\n");
|
|
290
297
|
const blocks = [];
|
|
291
|
-
const state = {
|
|
298
|
+
const state = {
|
|
299
|
+
currentFn: null,
|
|
300
|
+
braceCount: 0,
|
|
301
|
+
fnLines: [],
|
|
302
|
+
inBlockComment: false,
|
|
303
|
+
rawTerm: null
|
|
304
|
+
};
|
|
292
305
|
for (let i = 0; i < lines.length; i++) {
|
|
293
306
|
processBraceLine(lines[i], state, blocks, i, ext);
|
|
294
307
|
}
|
|
295
308
|
return buildMetricsFromBlocks(blocks, content, filePath);
|
|
296
309
|
}
|
|
310
|
+
var HEADER_EXCLUSIONS = /* @__PURE__ */ new Set([
|
|
311
|
+
"if",
|
|
312
|
+
"for",
|
|
313
|
+
"foreach",
|
|
314
|
+
"while",
|
|
315
|
+
"switch",
|
|
316
|
+
"catch",
|
|
317
|
+
"select",
|
|
318
|
+
"match",
|
|
319
|
+
"class",
|
|
320
|
+
"struct",
|
|
321
|
+
"interface",
|
|
322
|
+
"record",
|
|
323
|
+
"enum",
|
|
324
|
+
"namespace",
|
|
325
|
+
"using",
|
|
326
|
+
"lock",
|
|
327
|
+
"fixed",
|
|
328
|
+
"synchronized",
|
|
329
|
+
"try",
|
|
330
|
+
"else"
|
|
331
|
+
]);
|
|
297
332
|
function matchCStyleHeader(line) {
|
|
298
333
|
const match = line.match(
|
|
299
|
-
/(?:(?:public|private|protected|static|async|virtual|override|fn)\s+)*(?:function\s+([a-zA-Z0-9_$]+)|(?:[a-zA-Z0-9_<>[\]
|
|
334
|
+
/(?:(?:public|private|protected|internal|static|async|virtual|override|sealed|abstract|final|synchronized|default|fn)\s+)*(?:function\s+([a-zA-Z0-9_$]+)|(?:[a-zA-Z0-9_<>[\]?,.\s]+\s+)+([a-zA-Z0-9_$]+)\s*(?:<[^>]+>)?\s*\([^;{}]*\)\s*(?:where\s+[^{]+|throws\s+[^{]+)?\{|([a-zA-Z0-9_$]+)\s*\([^;{}]*\)\s*(?::\s*[^{]+\s*)?\{)/
|
|
300
335
|
);
|
|
301
336
|
if (!match) return null;
|
|
302
337
|
const candidate = match[1] || match[2] || match[3];
|
|
303
|
-
|
|
304
|
-
return candidate && !exclusions.includes(candidate) ? candidate : null;
|
|
338
|
+
return candidate && !HEADER_EXCLUSIONS.has(candidate) ? candidate : null;
|
|
305
339
|
}
|
|
306
340
|
function matchFunctionHeader(line, ext) {
|
|
307
341
|
const trimmed = line.trim();
|
|
308
|
-
if (trimmed.startsWith("//") || trimmed.startsWith("/*") || trimmed.startsWith("*"))
|
|
342
|
+
if (trimmed.startsWith("//") || trimmed.startsWith("/*") || trimmed.startsWith("*") || trimmed.startsWith("#")) {
|
|
343
|
+
return null;
|
|
344
|
+
}
|
|
309
345
|
if (ext === ".go") {
|
|
310
|
-
const match = line.match(/func\s+(?:\([^)]*\)\s*)?([a-zA-Z0-9_$]+)\s*\(/);
|
|
346
|
+
const match = line.match(/func\s+(?:\([^)]*\)\s*)?([a-zA-Z0-9_$]+)\s*(?:\[[^\]]*\])?\s*\(/);
|
|
311
347
|
return match ? match[1] : null;
|
|
312
348
|
}
|
|
313
349
|
if (ext === ".rs") {
|
|
314
|
-
const match = line.match(/(?:pub
|
|
350
|
+
const match = line.match(/(?:pub(?:\([^)]*\))?\s+)?(?:async\s+)?(?:unsafe\s+)?(?:const\s+)?fn\s+([a-zA-Z0-9_$]+)\s*(?:<[^>]*>)?\s*\(/);
|
|
315
351
|
return match ? match[1] : null;
|
|
316
352
|
}
|
|
317
353
|
return matchCStyleHeader(line);
|
|
318
354
|
}
|
|
319
|
-
function
|
|
320
|
-
if (
|
|
321
|
-
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
if (
|
|
325
|
-
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
+
function detectRustOrGoRawString(sub, ext) {
|
|
356
|
+
if (ext === ".rs") {
|
|
357
|
+
const m = sub.match(/^r(#*)"/);
|
|
358
|
+
return m ? { term: `"${m[1]}`, advance: m[0].length - 1 } : null;
|
|
359
|
+
}
|
|
360
|
+
if (ext === ".go" && sub.startsWith("`")) {
|
|
361
|
+
return { term: "`", advance: 0 };
|
|
362
|
+
}
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
function detectCsJavaOrCppRawString(sub, ext) {
|
|
366
|
+
if (ext === ".cs" || ext === ".java") {
|
|
367
|
+
const m = sub.match(/^\$*("{3,})/);
|
|
368
|
+
if (m) return { term: m[1], advance: m[0].length - 1 };
|
|
369
|
+
const v = ext === ".cs" ? sub.match(/^(@\$|\$@|@)"/) : null;
|
|
370
|
+
return v ? { term: '"', advance: v[0].length - 1 } : null;
|
|
371
|
+
}
|
|
372
|
+
const cpp = sub.match(/^R"([a-zA-Z0-9_]*)\(/);
|
|
373
|
+
return cpp ? { term: `)${cpp[1]}"`, advance: cpp[0].length - 1 } : null;
|
|
374
|
+
}
|
|
375
|
+
function detectRawStringOpen(line, index, ext) {
|
|
376
|
+
const sub = line.slice(index);
|
|
377
|
+
return detectRustOrGoRawString(sub, ext) || detectCsJavaOrCppRawString(sub, ext);
|
|
378
|
+
}
|
|
379
|
+
function consumeRawOrBlock(line, index, state) {
|
|
380
|
+
if (state.inBlock) {
|
|
381
|
+
if (line[index] === "*" && line[index + 1] === "/") {
|
|
382
|
+
state.inBlock = false;
|
|
383
|
+
return { advance: 1, handled: true };
|
|
384
|
+
}
|
|
385
|
+
return { advance: 0, handled: true };
|
|
386
|
+
}
|
|
387
|
+
if (state.rawTerm) {
|
|
388
|
+
if (line.startsWith(state.rawTerm, index)) {
|
|
389
|
+
const len = state.rawTerm.length - 1;
|
|
390
|
+
state.rawTerm = null;
|
|
391
|
+
return { advance: len, handled: true };
|
|
392
|
+
}
|
|
393
|
+
return { advance: 0, handled: true };
|
|
394
|
+
}
|
|
395
|
+
return { advance: 0, handled: false };
|
|
396
|
+
}
|
|
397
|
+
function consumeNormalQuote(line, index, state) {
|
|
398
|
+
if (!state.inString) return { advance: 0, handled: false };
|
|
399
|
+
const ch = line[index];
|
|
400
|
+
if (ch === "\\") return { advance: 1, handled: true };
|
|
401
|
+
if (ch === state.inString) state.inString = null;
|
|
402
|
+
return { advance: 0, handled: true };
|
|
403
|
+
}
|
|
404
|
+
function applyQuoteOrBrace(ch, state) {
|
|
405
|
+
if (ch === '"' || ch === "'") {
|
|
406
|
+
state.inString = ch;
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
if (ch === "{") state.delta++;
|
|
410
|
+
if (ch === "}") state.delta--;
|
|
411
|
+
}
|
|
412
|
+
function stepActiveCodeToken(line, j, ext, state) {
|
|
413
|
+
const pair = line.slice(j, j + 2);
|
|
414
|
+
if (pair === "//") return { advance: 0, stop: true };
|
|
415
|
+
if (pair === "/*") {
|
|
355
416
|
state.inBlock = true;
|
|
356
417
|
return { advance: 1, stop: false };
|
|
357
418
|
}
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
419
|
+
const rawOpen = detectRawStringOpen(line, j, ext);
|
|
420
|
+
if (rawOpen) {
|
|
421
|
+
state.rawTerm = rawOpen.term;
|
|
422
|
+
return { advance: rawOpen.advance, stop: false };
|
|
361
423
|
}
|
|
362
|
-
state
|
|
424
|
+
applyQuoteOrBrace(line[j], state);
|
|
363
425
|
return { advance: 0, stop: false };
|
|
364
426
|
}
|
|
365
|
-
function scanBracesInLine(line, wasInBlock, ext) {
|
|
366
|
-
const state = { delta: 0, inBlock: wasInBlock, inString: null };
|
|
427
|
+
function scanBracesInLine(line, wasInBlock, wasRawTerm, ext) {
|
|
428
|
+
const state = { delta: 0, inBlock: wasInBlock, rawTerm: wasRawTerm, inString: null };
|
|
367
429
|
for (let j = 0; j < line.length; j++) {
|
|
368
|
-
const
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
if (skipped.handled) {
|
|
372
|
-
state.inBlock = skipped.inBlock;
|
|
373
|
-
state.inString = skipped.inString;
|
|
374
|
-
if (skipped.skip) j++;
|
|
430
|
+
const rawOrBlock = consumeRawOrBlock(line, j, state);
|
|
431
|
+
if (rawOrBlock.handled) {
|
|
432
|
+
j += rawOrBlock.advance;
|
|
375
433
|
continue;
|
|
376
434
|
}
|
|
377
|
-
const
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
435
|
+
const quoteStep = consumeNormalQuote(line, j, state);
|
|
436
|
+
if (quoteStep.handled) {
|
|
437
|
+
j += quoteStep.advance;
|
|
438
|
+
continue;
|
|
439
|
+
}
|
|
440
|
+
const codeStep = stepActiveCodeToken(line, j, ext, state);
|
|
441
|
+
if (codeStep.stop) break;
|
|
442
|
+
j += codeStep.advance;
|
|
381
443
|
}
|
|
382
|
-
return { delta: state.delta, nowInBlock: state.inBlock };
|
|
444
|
+
return { delta: state.delta, nowInBlock: state.inBlock, nowRawTerm: state.rawTerm };
|
|
383
445
|
}
|
|
384
446
|
function buildMetricsFromBlocks(blocks, content, filePath) {
|
|
385
447
|
if (blocks.length === 0) {
|
|
@@ -403,11 +465,20 @@ function buildMetricsFromBlocks(blocks, content, filePath) {
|
|
|
403
465
|
}
|
|
404
466
|
function detectPolyglotSmells(body) {
|
|
405
467
|
const smells = [];
|
|
406
|
-
if (/#\s*noqa|#\s*type:\s*ignore|@SuppressWarnings/.test(body)) {
|
|
468
|
+
if (/#\s*noqa|#\s*type:\s*ignore|@SuppressWarnings|#pragma\s+warning\s+disable/.test(body)) {
|
|
407
469
|
smells.push("Supresi\xF3n no autorizada de linter");
|
|
408
470
|
}
|
|
409
471
|
return smells;
|
|
410
472
|
}
|
|
473
|
+
function stripStringsAndComments(body, ext) {
|
|
474
|
+
let cleaned = body;
|
|
475
|
+
if (ext === ".py") {
|
|
476
|
+
cleaned = cleaned.replace(/"""[\s\S]*?"""|'''[\s\S]*?'''/g, '""').replace(/#.*/g, "");
|
|
477
|
+
} else {
|
|
478
|
+
cleaned = cleaned.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, "").replace(/r(#+)"[\s\S]*?"\1/g, '""').replace(/R"([a-zA-Z0-9_]*)\([\s\S]*?\)\1"/g, '""').replace(/\$*"{3,}[\s\S]*?"{3,}/g, '""').replace(/`[\s\S]*?`/g, '""');
|
|
479
|
+
}
|
|
480
|
+
return cleaned.replace(/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/g, '""');
|
|
481
|
+
}
|
|
411
482
|
function computeHalsteadMI(body, cyclomatic, loc, commentCount) {
|
|
412
483
|
const cleanText = body.replace(/\/\*[\s\S]*?\*\/|\/\/.*|#.*/g, "");
|
|
413
484
|
const tokens = cleanText.split(/[\s,;().{}[\]=+\-*/<>!&|:]+/).filter((t) => t.length > 0);
|
|
@@ -432,9 +503,11 @@ function countCommentsAndLoc(rawLines, isPy) {
|
|
|
432
503
|
function calculatePolyglotMetrics(body, name, filePath, startLine) {
|
|
433
504
|
const ext = path4.extname(filePath).toLowerCase();
|
|
434
505
|
const rawLines = body.split(/\r?\n/).map((l) => l.trim()).filter((l) => l.length > 0);
|
|
435
|
-
const { loc, commentCount
|
|
436
|
-
const
|
|
437
|
-
const
|
|
506
|
+
const { loc, commentCount } = countCommentsAndLoc(rawLines, ext === ".py");
|
|
507
|
+
const strippedBody = stripStringsAndComments(body, ext);
|
|
508
|
+
const strippedLines = strippedBody.split(/\r?\n/).filter((l) => l.trim().length > 0);
|
|
509
|
+
const cyclomatic = computePolyglotCyclomatic(strippedBody, ext);
|
|
510
|
+
const cognitive = computePolyglotCognitive(strippedLines, ext === ".py");
|
|
438
511
|
const maintainability = computeHalsteadMI(body, cyclomatic, loc, commentCount);
|
|
439
512
|
return {
|
|
440
513
|
functionName: name,
|
|
@@ -447,40 +520,60 @@ function calculatePolyglotMetrics(body, name, filePath, startLine) {
|
|
|
447
520
|
line: startLine ? startLine + 1 : 1
|
|
448
521
|
};
|
|
449
522
|
}
|
|
450
|
-
function
|
|
451
|
-
let regex;
|
|
523
|
+
function getCyclomaticPattern(ext) {
|
|
452
524
|
if (ext === ".py") {
|
|
453
|
-
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
525
|
+
return /\b(if|elif|for|while|except|case)\b|\b(and|or)\b/g;
|
|
526
|
+
}
|
|
527
|
+
if (ext === ".go") {
|
|
528
|
+
return /\b(if|for|case|select)\b|&&|\|\|/g;
|
|
529
|
+
}
|
|
530
|
+
if (ext === ".rs") {
|
|
531
|
+
return /\b(if|for|while|match)\b|&&|\|\||\?/g;
|
|
532
|
+
}
|
|
533
|
+
if (ext === ".cs") {
|
|
534
|
+
return /\b(if|else\s+if|for|foreach|while|catch|case|when)\b|\?\?|\?\.(?=[a-zA-Z_])|&&|\|\|/g;
|
|
460
535
|
}
|
|
461
|
-
|
|
462
|
-
|
|
536
|
+
if (ext === ".java") {
|
|
537
|
+
return /\b(if|else\s+if|for|while|catch|case|when)\b|&&|\|\|/g;
|
|
538
|
+
}
|
|
539
|
+
return /\b(if|else\s+if|for|while|catch|case)\b|\?|&&|\|\|/g;
|
|
540
|
+
}
|
|
541
|
+
function computePolyglotCyclomatic(strippedBody, ext) {
|
|
542
|
+
const regex = getCyclomaticPattern(ext);
|
|
543
|
+
const matches = strippedBody.match(regex);
|
|
463
544
|
return 1 + (matches ? matches.length : 0);
|
|
464
545
|
}
|
|
465
|
-
|
|
546
|
+
var PY_COGNITIVE_RE = /\b(if|elif|for|while|except|match)\b/;
|
|
547
|
+
var BRACE_COGNITIVE_RE = /\b(if|for|foreach|while|catch|match|select|switch)\b/;
|
|
548
|
+
function computePythonCognitive(lines) {
|
|
549
|
+
let cognitive = 0;
|
|
550
|
+
const baseIndent = lines.length > 0 ? lines[0].length - lines[0].trimStart().length : 0;
|
|
551
|
+
for (let i = 1; i < lines.length; i++) {
|
|
552
|
+
const line = lines[i];
|
|
553
|
+
if (PY_COGNITIVE_RE.test(line)) {
|
|
554
|
+
const relIndent = Math.max(0, line.length - line.trimStart().length - baseIndent - 4);
|
|
555
|
+
cognitive += 1 + Math.floor(relIndent / 4);
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
return cognitive;
|
|
559
|
+
}
|
|
560
|
+
function computeBraceCognitive(lines) {
|
|
466
561
|
let cognitive = 0;
|
|
467
562
|
let nesting = 0;
|
|
468
|
-
for (
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
cognitive += 1 + Math.floor(indent / 4);
|
|
473
|
-
}
|
|
474
|
-
} else {
|
|
475
|
-
if (line.includes("{")) nesting++;
|
|
476
|
-
if (line.includes("}")) nesting = Math.max(0, nesting - 1);
|
|
477
|
-
if (/\b(if|for|while|catch|match|select)\b/.test(line)) {
|
|
478
|
-
cognitive += 1 + nesting;
|
|
479
|
-
}
|
|
563
|
+
for (let i = 1; i < lines.length; i++) {
|
|
564
|
+
const line = lines[i];
|
|
565
|
+
if (BRACE_COGNITIVE_RE.test(line)) {
|
|
566
|
+
cognitive += 1 + nesting;
|
|
480
567
|
}
|
|
568
|
+
const opens = (line.match(/\{/g) || []).length;
|
|
569
|
+
const closes = (line.match(/\}/g) || []).length;
|
|
570
|
+
nesting = Math.max(0, nesting + opens - closes);
|
|
481
571
|
}
|
|
482
572
|
return cognitive;
|
|
483
573
|
}
|
|
574
|
+
function computePolyglotCognitive(lines, isPy) {
|
|
575
|
+
return isPy ? computePythonCognitive(lines) : computeBraceCognitive(lines);
|
|
576
|
+
}
|
|
484
577
|
function walkMdFiles(dir, fileList = [], excludeDirs = [
|
|
485
578
|
"node_modules",
|
|
486
579
|
".git",
|
|
@@ -1064,9 +1157,54 @@ function collectTestCorpus(rootDir, allMdFiles) {
|
|
|
1064
1157
|
}
|
|
1065
1158
|
return { gherkinSources, combinedTests: testContents.join("\n") };
|
|
1066
1159
|
}
|
|
1067
|
-
function
|
|
1160
|
+
function isCucumberScenarioPassed(element) {
|
|
1161
|
+
const steps = Array.isArray(element.steps) ? element.steps : [];
|
|
1162
|
+
if (steps.length === 0) return false;
|
|
1163
|
+
return steps.every((s) => {
|
|
1164
|
+
const res = s.result;
|
|
1165
|
+
return res && res.status === "passed";
|
|
1166
|
+
});
|
|
1167
|
+
}
|
|
1168
|
+
function countCucumberScenarios(raw) {
|
|
1169
|
+
let passed = 0;
|
|
1170
|
+
let failed = 0;
|
|
1171
|
+
for (const feat of raw) {
|
|
1172
|
+
const elements = Array.isArray(feat.elements) ? feat.elements : [];
|
|
1173
|
+
for (const el of elements) {
|
|
1174
|
+
if (isCucumberScenarioPassed(el)) passed++;
|
|
1175
|
+
else failed++;
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
return { passed, failed };
|
|
1179
|
+
}
|
|
1180
|
+
function parseCucumberReportFile(reportPath) {
|
|
1181
|
+
if (!fs7.existsSync(reportPath)) return void 0;
|
|
1182
|
+
try {
|
|
1183
|
+
const raw = JSON.parse(fs7.readFileSync(reportPath, "utf-8"));
|
|
1184
|
+
if (!Array.isArray(raw)) return void 0;
|
|
1185
|
+
const { passed, failed } = countCucumberScenarios(raw);
|
|
1186
|
+
return {
|
|
1187
|
+
evaluatedFeatures: raw.length,
|
|
1188
|
+
passedScenarios: passed,
|
|
1189
|
+
failedScenarios: failed,
|
|
1190
|
+
passed: passed + failed > 0 && failed === 0
|
|
1191
|
+
};
|
|
1192
|
+
} catch {
|
|
1193
|
+
return void 0;
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
function resolveCucumberReport(rootDir, options) {
|
|
1197
|
+
const candidate = options.cucumberReportPath ? path4.isAbsolute(options.cucumberReportPath) ? options.cucumberReportPath : path4.join(rootDir, options.cucumberReportPath) : path4.join(rootDir, "reports", "cucumber-report.json");
|
|
1198
|
+
const parsed = parseCucumberReportFile(candidate);
|
|
1199
|
+
if (parsed) return parsed;
|
|
1200
|
+
if (options.enforceCucumberExecution) {
|
|
1201
|
+
return { evaluatedFeatures: 0, passedScenarios: 0, failedScenarios: 1, passed: false };
|
|
1202
|
+
}
|
|
1203
|
+
return void 0;
|
|
1204
|
+
}
|
|
1205
|
+
function assembleCoverageResult(reqAudit, taskAudit, useCaseFlows, reqErrors, taskErrors, ucErrors, rootDir, options) {
|
|
1068
1206
|
return {
|
|
1069
|
-
success: reqErrors === 0 && taskErrors === 0 && ucErrors === 0,
|
|
1207
|
+
success: reqErrors === 0 && taskErrors === 0 && ucErrors === 0 && (!resolveCucumberReport(rootDir, options) || resolveCucumberReport(rootDir, options).passed),
|
|
1070
1208
|
totalRequirements: reqAudit.length,
|
|
1071
1209
|
passedRequirements: reqAudit.length - reqErrors,
|
|
1072
1210
|
failedRequirements: reqErrors,
|
|
@@ -1077,6 +1215,7 @@ function assembleCoverageResult(reqAudit, taskAudit, useCaseFlows, reqErrors, ta
|
|
|
1077
1215
|
tasks: taskAudit,
|
|
1078
1216
|
useCaseFlows,
|
|
1079
1217
|
failedUseCaseFlows: ucErrors,
|
|
1218
|
+
...resolveCucumberReport(rootDir, options) ? { cucumberExecution: resolveCucumberReport(rootDir, options) } : {},
|
|
1080
1219
|
reportMarkdown: generateTestingCoverageReportMarkdown(reqAudit, taskAudit, reqErrors, taskErrors)
|
|
1081
1220
|
};
|
|
1082
1221
|
}
|
|
@@ -1128,7 +1267,9 @@ function verifyTestingCoverage(options = {}) {
|
|
|
1128
1267
|
state.useCaseFlows,
|
|
1129
1268
|
state.reqErrors,
|
|
1130
1269
|
state.taskErrors,
|
|
1131
|
-
state.ucErrors
|
|
1270
|
+
state.ucErrors,
|
|
1271
|
+
rootDir,
|
|
1272
|
+
options
|
|
1132
1273
|
);
|
|
1133
1274
|
}
|
|
1134
1275
|
|
|
@@ -5504,6 +5645,277 @@ function verifyTasksGovernance(options = {}) {
|
|
|
5504
5645
|
);
|
|
5505
5646
|
return assembleGovernanceResult(data, reportMarkdown);
|
|
5506
5647
|
}
|
|
5648
|
+
var BddStepRegistry = class {
|
|
5649
|
+
definitions = [];
|
|
5650
|
+
register(pattern, handler) {
|
|
5651
|
+
this.definitions.push({ pattern, handler });
|
|
5652
|
+
return this;
|
|
5653
|
+
}
|
|
5654
|
+
given(pattern, handler) {
|
|
5655
|
+
return this.register(pattern, handler);
|
|
5656
|
+
}
|
|
5657
|
+
when(pattern, handler) {
|
|
5658
|
+
return this.register(pattern, handler);
|
|
5659
|
+
}
|
|
5660
|
+
then(pattern, handler) {
|
|
5661
|
+
return this.register(pattern, handler);
|
|
5662
|
+
}
|
|
5663
|
+
getDefinitions() {
|
|
5664
|
+
return this.definitions;
|
|
5665
|
+
}
|
|
5666
|
+
};
|
|
5667
|
+
var STEP_PREFIX_RE = /^(Given|When|Then|And|But|Dado|Cuando|Entonces|Y|Pero)\s+(.+)$/i;
|
|
5668
|
+
var SCENARIO_HEADER_RE = /^(Scenario|Escenario|Scenario Outline|Esquema del escenario):\s*(.+)$/i;
|
|
5669
|
+
function parseTableRowCells(line) {
|
|
5670
|
+
return line.trim().replace(/^\|/, "").replace(/\|$/, "").split("|").map((c) => c.trim());
|
|
5671
|
+
}
|
|
5672
|
+
function attachStepTableRow(lastStep, cells) {
|
|
5673
|
+
if (!lastStep || cells.length < 2) return;
|
|
5674
|
+
if (!lastStep.table) lastStep.table = {};
|
|
5675
|
+
lastStep.table[cells[0]] = cells[1];
|
|
5676
|
+
}
|
|
5677
|
+
function attachExampleRow(scenario, headers, cells) {
|
|
5678
|
+
if (!scenario) return headers;
|
|
5679
|
+
if (headers.length === 0) return cells;
|
|
5680
|
+
const row = {};
|
|
5681
|
+
for (let i = 0; i < headers.length; i++) {
|
|
5682
|
+
row[headers[i]] = cells[i] ?? "";
|
|
5683
|
+
}
|
|
5684
|
+
scenario.examples.push(row);
|
|
5685
|
+
return headers;
|
|
5686
|
+
}
|
|
5687
|
+
function createInitialParseState() {
|
|
5688
|
+
return {
|
|
5689
|
+
featureName: "Unnamed Feature",
|
|
5690
|
+
featureTags: [],
|
|
5691
|
+
pendingTags: [],
|
|
5692
|
+
backgroundSteps: [],
|
|
5693
|
+
scenarios: [],
|
|
5694
|
+
currentScenario: null,
|
|
5695
|
+
inBackground: false,
|
|
5696
|
+
inExamples: false,
|
|
5697
|
+
exampleHeaders: []
|
|
5698
|
+
};
|
|
5699
|
+
}
|
|
5700
|
+
function handleStructuralHeaderLine(line, state) {
|
|
5701
|
+
if (/^(Feature|Caracter[ií]stica):/i.test(line)) {
|
|
5702
|
+
state.featureName = line.replace(/^(Feature|Caracter[ií]stica):\s*/i, "").trim();
|
|
5703
|
+
state.featureTags.push(...state.pendingTags);
|
|
5704
|
+
state.pendingTags = [];
|
|
5705
|
+
return true;
|
|
5706
|
+
}
|
|
5707
|
+
if (/^(Background|Antecedentes):/i.test(line)) {
|
|
5708
|
+
state.inBackground = true;
|
|
5709
|
+
state.inExamples = false;
|
|
5710
|
+
state.currentScenario = null;
|
|
5711
|
+
return true;
|
|
5712
|
+
}
|
|
5713
|
+
if (/^(Examples|Ejemplos):/i.test(line)) {
|
|
5714
|
+
state.inExamples = true;
|
|
5715
|
+
state.exampleHeaders = [];
|
|
5716
|
+
return true;
|
|
5717
|
+
}
|
|
5718
|
+
return false;
|
|
5719
|
+
}
|
|
5720
|
+
function startScenarioBlock(scenMatch, state) {
|
|
5721
|
+
state.inBackground = false;
|
|
5722
|
+
state.inExamples = false;
|
|
5723
|
+
const block = {
|
|
5724
|
+
name: scenMatch[2].trim(),
|
|
5725
|
+
tags: [...state.featureTags, ...state.pendingTags],
|
|
5726
|
+
isOutline: /outline|esquema/i.test(scenMatch[1]),
|
|
5727
|
+
steps: [],
|
|
5728
|
+
examples: []
|
|
5729
|
+
};
|
|
5730
|
+
state.pendingTags = [];
|
|
5731
|
+
state.scenarios.push(block);
|
|
5732
|
+
state.currentScenario = block;
|
|
5733
|
+
}
|
|
5734
|
+
function appendParsedStep(stepMatch, state) {
|
|
5735
|
+
const step = { keyword: stepMatch[1], text: stepMatch[2].trim() };
|
|
5736
|
+
if (state.inBackground) {
|
|
5737
|
+
state.backgroundSteps.push(step);
|
|
5738
|
+
} else if (state.currentScenario) {
|
|
5739
|
+
state.currentScenario.steps.push(step);
|
|
5740
|
+
}
|
|
5741
|
+
}
|
|
5742
|
+
function handleScenarioOrStepLine(line, state) {
|
|
5743
|
+
const scenMatch = line.match(SCENARIO_HEADER_RE);
|
|
5744
|
+
if (scenMatch) {
|
|
5745
|
+
startScenarioBlock(scenMatch, state);
|
|
5746
|
+
return;
|
|
5747
|
+
}
|
|
5748
|
+
const stepMatch = line.match(STEP_PREFIX_RE);
|
|
5749
|
+
if (stepMatch) {
|
|
5750
|
+
appendParsedStep(stepMatch, state);
|
|
5751
|
+
}
|
|
5752
|
+
}
|
|
5753
|
+
function processFeatureLine(rawLine, state) {
|
|
5754
|
+
const line = rawLine.trim();
|
|
5755
|
+
if (!line || line.startsWith("#")) return;
|
|
5756
|
+
if (line.startsWith("@")) {
|
|
5757
|
+
const tags = line.split(/\s+/).filter((t) => t.startsWith("@"));
|
|
5758
|
+
state.pendingTags.push(...tags);
|
|
5759
|
+
return;
|
|
5760
|
+
}
|
|
5761
|
+
if (line.startsWith("|")) {
|
|
5762
|
+
const cells = parseTableRowCells(line);
|
|
5763
|
+
if (state.inExamples) {
|
|
5764
|
+
state.exampleHeaders = attachExampleRow(state.currentScenario, state.exampleHeaders, cells);
|
|
5765
|
+
} else {
|
|
5766
|
+
const targetList = state.inBackground ? state.backgroundSteps : state.currentScenario?.steps || [];
|
|
5767
|
+
attachStepTableRow(targetList[targetList.length - 1], cells);
|
|
5768
|
+
}
|
|
5769
|
+
return;
|
|
5770
|
+
}
|
|
5771
|
+
if (!handleStructuralHeaderLine(line, state)) {
|
|
5772
|
+
handleScenarioOrStepLine(line, state);
|
|
5773
|
+
}
|
|
5774
|
+
}
|
|
5775
|
+
function parseFeatureDocument(content) {
|
|
5776
|
+
const state = createInitialParseState();
|
|
5777
|
+
for (const rawLine of content.split(/\r?\n/)) {
|
|
5778
|
+
processFeatureLine(rawLine, state);
|
|
5779
|
+
}
|
|
5780
|
+
return {
|
|
5781
|
+
featureName: state.featureName,
|
|
5782
|
+
tags: state.featureTags,
|
|
5783
|
+
backgroundSteps: state.backgroundSteps,
|
|
5784
|
+
scenarios: state.scenarios
|
|
5785
|
+
};
|
|
5786
|
+
}
|
|
5787
|
+
function interpolatePlaceholders(text, row) {
|
|
5788
|
+
let out = text;
|
|
5789
|
+
for (const [k, v] of Object.entries(row)) {
|
|
5790
|
+
out = out.replace(new RegExp(`<${k}>`, "g"), v);
|
|
5791
|
+
}
|
|
5792
|
+
return out;
|
|
5793
|
+
}
|
|
5794
|
+
function expandScenarioOutlines(scenarios) {
|
|
5795
|
+
const expanded = [];
|
|
5796
|
+
for (const sc of scenarios) {
|
|
5797
|
+
if (!sc.isOutline || sc.examples.length === 0) {
|
|
5798
|
+
expanded.push(sc);
|
|
5799
|
+
continue;
|
|
5800
|
+
}
|
|
5801
|
+
sc.examples.forEach((row, idx) => {
|
|
5802
|
+
expanded.push({
|
|
5803
|
+
name: `${sc.name} (Example #${idx + 1})`,
|
|
5804
|
+
tags: sc.tags,
|
|
5805
|
+
isOutline: false,
|
|
5806
|
+
steps: sc.steps.map((st) => ({
|
|
5807
|
+
keyword: st.keyword,
|
|
5808
|
+
text: interpolatePlaceholders(st.text, row),
|
|
5809
|
+
table: st.table
|
|
5810
|
+
})),
|
|
5811
|
+
examples: []
|
|
5812
|
+
});
|
|
5813
|
+
});
|
|
5814
|
+
}
|
|
5815
|
+
return expanded;
|
|
5816
|
+
}
|
|
5817
|
+
function matchStepDefinition(text, definitions) {
|
|
5818
|
+
for (const entry of definitions) {
|
|
5819
|
+
if (typeof entry.pattern === "string") {
|
|
5820
|
+
if (entry.pattern === text) return { entry, args: [] };
|
|
5821
|
+
} else {
|
|
5822
|
+
const m = text.match(entry.pattern);
|
|
5823
|
+
if (m) return { entry, args: m.slice(1) };
|
|
5824
|
+
}
|
|
5825
|
+
}
|
|
5826
|
+
return null;
|
|
5827
|
+
}
|
|
5828
|
+
async function executeSingleStep(step, definitions) {
|
|
5829
|
+
const matched = matchStepDefinition(step.text, definitions);
|
|
5830
|
+
if (!matched) {
|
|
5831
|
+
return { keyword: step.keyword, text: step.text, status: "undefined", durationMs: 0 };
|
|
5832
|
+
}
|
|
5833
|
+
const start = Date.now();
|
|
5834
|
+
try {
|
|
5835
|
+
await matched.entry.handler(matched.args, step.table);
|
|
5836
|
+
return { keyword: step.keyword, text: step.text, status: "passed", durationMs: Date.now() - start };
|
|
5837
|
+
} catch (err) {
|
|
5838
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
5839
|
+
return {
|
|
5840
|
+
keyword: step.keyword,
|
|
5841
|
+
text: step.text,
|
|
5842
|
+
status: "failed",
|
|
5843
|
+
durationMs: Date.now() - start,
|
|
5844
|
+
errorMessage: msg
|
|
5845
|
+
};
|
|
5846
|
+
}
|
|
5847
|
+
}
|
|
5848
|
+
async function executeScenarioSteps(allSteps, definitions) {
|
|
5849
|
+
const stepResults = [];
|
|
5850
|
+
let status = "passed";
|
|
5851
|
+
for (const step of allSteps) {
|
|
5852
|
+
if (status !== "passed") {
|
|
5853
|
+
stepResults.push({ keyword: step.keyword, text: step.text, status: "skipped", durationMs: 0 });
|
|
5854
|
+
continue;
|
|
5855
|
+
}
|
|
5856
|
+
const res = await executeSingleStep(step, definitions);
|
|
5857
|
+
stepResults.push(res);
|
|
5858
|
+
if (res.status === "failed" || res.status === "undefined") {
|
|
5859
|
+
status = res.status;
|
|
5860
|
+
}
|
|
5861
|
+
}
|
|
5862
|
+
return { stepResults, status };
|
|
5863
|
+
}
|
|
5864
|
+
async function runAllExpandedScenarios(parsed, definitions) {
|
|
5865
|
+
const expanded = expandScenarioOutlines(parsed.scenarios);
|
|
5866
|
+
const out = [];
|
|
5867
|
+
for (const sc of expanded) {
|
|
5868
|
+
const combinedSteps = [...parsed.backgroundSteps, ...sc.steps];
|
|
5869
|
+
const { stepResults, status } = await executeScenarioSteps(combinedSteps, definitions);
|
|
5870
|
+
out.push({ name: sc.name, tags: sc.tags, status, steps: stepResults });
|
|
5871
|
+
}
|
|
5872
|
+
return out;
|
|
5873
|
+
}
|
|
5874
|
+
async function executeBddFeature(featurePath, registry, options = {}) {
|
|
5875
|
+
const rootDir = options.rootDir || process.cwd();
|
|
5876
|
+
const fullPath = path4.isAbsolute(featurePath) ? featurePath : path4.join(rootDir, featurePath);
|
|
5877
|
+
const parsed = parseFeatureDocument(fs7.readFileSync(fullPath, "utf-8"));
|
|
5878
|
+
const scenarios = await runAllExpandedScenarios(parsed, registry.getDefinitions());
|
|
5879
|
+
const report = {
|
|
5880
|
+
uri: path4.relative(rootDir, fullPath).replace(/\\/g, "/"),
|
|
5881
|
+
featureName: parsed.featureName,
|
|
5882
|
+
tags: parsed.tags,
|
|
5883
|
+
scenarios,
|
|
5884
|
+
passed: scenarios.length > 0 && scenarios.every((s) => s.status === "passed")
|
|
5885
|
+
};
|
|
5886
|
+
if (options.writeReportPath) writeCucumberJsonReport([report], options.writeReportPath);
|
|
5887
|
+
return report;
|
|
5888
|
+
}
|
|
5889
|
+
function mapStepToCucumberJson(st) {
|
|
5890
|
+
return {
|
|
5891
|
+
keyword: `${st.keyword} `,
|
|
5892
|
+
name: st.text,
|
|
5893
|
+
result: {
|
|
5894
|
+
status: st.status,
|
|
5895
|
+
duration: st.durationMs * 1e6,
|
|
5896
|
+
...st.errorMessage ? { error_message: st.errorMessage } : {}
|
|
5897
|
+
}
|
|
5898
|
+
};
|
|
5899
|
+
}
|
|
5900
|
+
function mapFeatureToCucumberJson(r) {
|
|
5901
|
+
return {
|
|
5902
|
+
uri: r.uri,
|
|
5903
|
+
name: r.featureName,
|
|
5904
|
+
tags: r.tags.map((t) => ({ name: t })),
|
|
5905
|
+
elements: r.scenarios.map((sc) => ({
|
|
5906
|
+
type: "scenario",
|
|
5907
|
+
name: sc.name,
|
|
5908
|
+
tags: sc.tags.map((t) => ({ name: t })),
|
|
5909
|
+
steps: sc.steps.map(mapStepToCucumberJson)
|
|
5910
|
+
}))
|
|
5911
|
+
};
|
|
5912
|
+
}
|
|
5913
|
+
function writeCucumberJsonReport(reports, outputPath) {
|
|
5914
|
+
const dir = path4.dirname(outputPath);
|
|
5915
|
+
if (!fs7.existsSync(dir)) fs7.mkdirSync(dir, { recursive: true });
|
|
5916
|
+
const payload = JSON.stringify(reports.map(mapFeatureToCucumberJson), null, 2);
|
|
5917
|
+
fs7.writeFileSync(outputPath, payload, "utf-8");
|
|
5918
|
+
}
|
|
5507
5919
|
function isToolAvailable(toolName) {
|
|
5508
5920
|
try {
|
|
5509
5921
|
const cmd = process.platform === "win32" ? "where" : "which";
|
|
@@ -6144,7 +6556,7 @@ function resolveProjectIdentity(options) {
|
|
|
6144
6556
|
function buildBomMetadata(name, version) {
|
|
6145
6557
|
return {
|
|
6146
6558
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
6147
|
-
tools: [{ vendor: "AI-SDLC", name: "@aisdlc/core", version: "2.
|
|
6559
|
+
tools: [{ vendor: "AI-SDLC", name: "@aisdlc/core", version: "2.4.0" }],
|
|
6148
6560
|
component: { type: "application", name, version }
|
|
6149
6561
|
};
|
|
6150
6562
|
}
|
|
@@ -16318,6 +16730,6 @@ function sanitizeDlpPayload(payload, policy = createDefaultDlpPolicy()) {
|
|
|
16318
16730
|
}
|
|
16319
16731
|
}
|
|
16320
16732
|
|
|
16321
|
-
export { ALL_ARCHITECTURE_TEMPLATES, BRANCH_PATTERNS, DEFAULT_DLP_RULES, DEFAULT_EXCLUDED_PATTERNS, DEFAULT_EXCLUDES, DEFAULT_EXTENSIONS, DEFAULT_PRIVACY_POLICY, DEFAULT_SAST_EXCLUDES, GENERAL_SOURCE_EXTENSIONS, KPI_SUMMARY_END_TAG, KPI_SUMMARY_START_TAG, LIFECYCLE_SKILL_TEMPLATES, OpenSpecAdapter, PII_SAST_RULES, PREPARE_COMMIT_MSG_SCRIPT, PROMPT_INJECTION_SIGNATURES, PROTECTED_BYPASS_PATTERNS, SARIF_SCHEMA_2_1_0, SARIF_VERSION, SAST_RULES, SCHEMA_SCHEMAS_ARCHITECTURE_ADR_SCHEMA_JSON, SCHEMA_SCHEMAS_ARCHITECTURE_COMPONENT_SCHEMA_JSON, SCHEMA_SCHEMAS_ARCHITECTURE_INTRODUCTION_AND_GOALS_SCHEMA_JSON, SCHEMA_SCHEMAS_COMPLIANCE_LICENSE_MANIFEST_SCHEMA_JSON, SCHEMA_SCHEMAS_COMPLIANCE_LICENSE_POLICY_SCHEMA_JSON, SCHEMA_SCHEMAS_COMPLIANCE_QUALITY_POLICY_SCHEMA_JSON, SCHEMA_SCHEMAS_IDE_MCP_CONFIG_SCHEMA_JSON, SCHEMA_SCHEMAS_MANUALS_PRODUCTION_MANUAL_SCHEMA_JSON, SCHEMA_SCHEMAS_MANUALS_USER_MANUAL_SCHEMA_JSON, SCHEMA_SCHEMAS_PRIVACY_DATA_ASSET_SCHEMA_JSON, SCHEMA_SCHEMAS_PRIVACY_PRIVACY_POLICY_SCHEMA_JSON, SCHEMA_SCHEMAS_PRIVACY_PRIVACY_REQ_SCHEMA_JSON, SCHEMA_SCHEMAS_PRIVACY_PRIVACY_ROPA_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_ACTOR_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_BOUNDED_CONTEXT_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_BUSINESS_RULE_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_JOURNEY_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_REQUIREMENT_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_TERM_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_USE_CASE_SCHEMA_JSON, SCHEMA_SCHEMAS_SAFETY_HAZARD_SCHEMA_JSON, SCHEMA_SCHEMAS_SAFETY_SAFETY_REQ_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_DESIGN_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_HANDOFF_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_PROPOSAL_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_RELEASE_KPIS_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_SESSION_TELEMETRY_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_SPEC_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_TASKS_SCHEMA_JSON, SCHEMA_SCHEMAS_SECURITY_ABUSE_CASE_SCHEMA_JSON, SCHEMA_SCHEMAS_SECURITY_ENCLAVE_SCHEMA_JSON, SCHEMA_SCHEMAS_SECURITY_SECURITY_REQ_SCHEMA_JSON, SCHEMA_SCHEMAS_SECURITY_THREAT_ACTOR_SCHEMA_JSON, SCHEMA_SCHEMAS_WORKFLOW_AGENT_HANDOFF_SCHEMA_JSON, SECRET_RULES, SPECIALIZED_AGENT_TEMPLATES, STARTER_ANTIGRAVITY_MCP, STARTER_ANTIGRAVITY_RULES, STARTER_ARCH_ADR, STARTER_ARCH_ARCHITECTURE_CONSTRAINTS, STARTER_ARCH_COMPONENT, STARTER_ARCH_CONTEXT_AND_SCOPE, STARTER_ARCH_CROSS_CUTTING_CONCEPTS, STARTER_ARCH_DEPLOYMENT_VIEW, STARTER_ARCH_GLOSSARY, STARTER_ARCH_INTRODUCTION_AND_GOALS, STARTER_ARCH_LEVEL_1_WHITEBOX, STARTER_ARCH_QUALITY_REQUIREMENTS, STARTER_ARCH_RISKS_AND_TECHNICAL_DEBT, STARTER_ARCH_RUNTIME_VIEW, STARTER_ARCH_SOLUTION_STRATEGY, STARTER_AZURE_PIPELINES, STARTER_BASE_TEMPLATES, STARTER_BITBUCKET_PIPELINES, STARTER_CLAUDE_RULES, STARTER_COMPLIANCE_LICENSE_MANIFEST_YAML, STARTER_COPILOT_RULES, STARTER_CURSOR_CORE_RULES, STARTER_CURSOR_MCP, STARTER_CURSOR_PRODUCT_RULES, STARTER_CURSOR_QUALITY_RULES, STARTER_GITHUB_CI, STARTER_GITHUB_DEPLOY_DASHBOARD, STARTER_GITHUB_PR_KPI, STARTER_GITHUB_PULL_REQUEST_TEMPLATE, STARTER_GITHUB_SDD_INTEGRATE, STARTER_GITLAB_CI, STARTER_LICENSE_POLICY, STARTER_PRIVACY_POLICY, STARTER_PROCESS_README, STARTER_PULL_REQUEST_TEMPLATE, STARTER_QUALITY_POLICY, STARTER_REQUIREMENT_TEMPLATE, STARTER_SCHEMAS, STARTER_SCHEMAS_MAP, STARTER_TASK_TEMPLATE, STARTER_TEMPLATES_CI_AZURE_PIPELINES_YML, STARTER_TEMPLATES_CI_BITBUCKET_PIPELINES_YML, STARTER_TEMPLATES_CI_GITHUB_WORKFLOWS_CI_YML, STARTER_TEMPLATES_CI_GITHUB_WORKFLOWS_DEPLOY_DASHBOARD_YML, STARTER_TEMPLATES_CI_GITHUB_WORKFLOWS_PR_KPI_SUMMARY_YML, STARTER_TEMPLATES_CI_GITHUB_WORKFLOWS_SDD_INTEGRATE_ON_MERGE_YML, STARTER_TEMPLATES_CI__GITLAB_CI_YML, STARTER_TEMPLATES_COMPLIANCE_COMMERCIAL_ACQUISITION_REQUEST_TEMPLATE_MD, STARTER_TEMPLATES_MANUALS_PRODUCTION_MANUAL_TEMPLATE_MD, STARTER_TEMPLATES_MANUALS_USER_MANUAL_TEMPLATE_MD, STARTER_TEMPLATES_PRIVACY_DATA_ASSET_TEMPLATE_MD, STARTER_TEMPLATES_PRIVACY_DPIA_REQUEST_TEMPLATE_MD, STARTER_TEMPLATES_PRIVACY_PRIVACY_REQ_TEMPLATE_MD, STARTER_TEMPLATES_PRIVACY_PRIVACY_ROPA_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_ACTOR_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_BOUNDED_CONTEXT_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_BUSINESS_RULE_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_JOURNEY_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_REQUIREMENT_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_TERM_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_USER_DESIGN_FEEDBACK_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_USE_CASE_TEMPLATE_MD, STARTER_TEMPLATES_SAFETY_HAZARD_TEMPLATE_MD, STARTER_TEMPLATES_SAFETY_SAFETY_REQ_TEMPLATE_MD, STARTER_TEMPLATES_SDD_DESIGN_TEMPLATE_MD, STARTER_TEMPLATES_SDD_HANDOFF_TEMPLATE_YAML, STARTER_TEMPLATES_SDD_PROPOSAL_TEMPLATE_MD, STARTER_TEMPLATES_SDD_PULL_REQUEST_TEMPLATE_MD, STARTER_TEMPLATES_SDD_SPEC_TEMPLATE_MD, STARTER_TEMPLATES_SDD_TASKS_TEMPLATE_MD, STARTER_TEMPLATES_SECURITY_ABUSE_CASE_TEMPLATE_MD, STARTER_TEMPLATES_SECURITY_ENCLAVE_TEMPLATE_MD, STARTER_TEMPLATES_SECURITY_SECURITY_REQ_TEMPLATE_MD, STARTER_TEMPLATES_SECURITY_THREAT_ACTOR_TEMPLATE_MD, STARTER_TEMPLATES_WORKFLOW_AGENT_HANDOFF_TEMPLATE_MD, STARTER_VSCODE_MCP, STARTER_WORKFLOW_HANDOFF_TEMPLATE, STARTER__GITHUB_PULL_REQUEST_TEMPLATE_MD, SpecKitAdapter, TYPE_TO_SCHEMA_MAP, VALID_AGENT_TARGETS, VALID_ARCHITECTURE_GRANULARITIES, VALID_AUTONOMY_MODES, VALID_CHANGE_PROFILES, VALID_CI_PROVIDERS, aggregateCommitKpiRecords, aggregatePrKpis, aggregateReleaseKpis, analyzeBddVariantsForRequirement, appendRevisionHistoryRow, applyRatchetMode, buildCycloneDxComponent, buildCycloneDxVulnerabilities, buildFeatureFileContent, buildGraphElements, calculateJaccardSimilarity, calculateMetrics, calculateRating, calculateShannonEntropy, checkGherkinInSync, checkoutTaskBranch, classifyBranch, classifyMetricFromMessage, collectAgentFiles, collectDashboardMetrics, collectHistoricalKpis, computeCanonicalSha256, computeSha256, computeViolationSignature, createDefaultDlpPolicy, createDefaultQualityPolicy, depositProductHandoffSidecar, detectActiveChangeForIntegration, detectAuthorIdentity, detectLanguage, detectProfileFromChange, detectPromptInjection, emitCiOutput, evaluateCompoundLicense, evaluateSingleDependency, evaluateVulnerabilityThresholds, extractBaselineEntriesFromResults, extractCitations, extractCommitKpisFromRange, extractDirectDepNames, extractFeatureTags, extractFrontmatter, extractFunctions, extractFunctionsBraceLanguages, extractFunctionsPolyglot, extractFunctionsPython, extractFunctionsTypeScriptAst, extractGherkinBlock, extractGherkinFeatures, extractNormativeText, findChangeWorkspaceDir, findLicenseFile, formatCommitTrailers, formatPrKpiMarkdown, formatReleaseKpiMarkdown, generateBranchHierarchyPlan, generateCycloneDxSbom, generateDashboardReport, generateDuplicatesReportMarkdown, generateGovernanceReportMarkdown, generateLicenseReportMarkdown, generatePdacReportMarkdown, generatePrivacyReportMarkdown, generateQualityReport, generateRopaInventoryMarkdown, generateSastReportMarkdown, generateSecretsReportMarkdown, generateSecuritySarifReport, generateSuppressionsAuditReport, generateTestingCoverageReportMarkdown, generateThirdPartyNotices, generateTraceabilityReportMarkdown, getArchitectureTemplates, getCytoscapeScript, getGitDiffLines, getNextCorrelativeNumber, getSddAdapter, inferArtifactTypeFromId, inferMissingTrailers, initProject, injectKpisIntoPrBody, installGitHooks, integrateSddChange, isGitleaksInstalled, isMetricWorsened, isPathProtectedFromPatch, isPlaceholderOrIgnored, isRequirementArtifact2 as isRequirementArtifact, isSemgrepInstalled, isToolAvailable, loadDlpPolicy, loadPrivacyPolicy, loadProductHandoffSidecar, loadQualityBaseline, locateTaskInActiveChanges, mapSastSeverityToSarifLevel, maskSecret, normalizeSpdxLicense, normalizeUri, parseCommitTrailers, parseDlpPolicy, parseFrontmatter, parseFrontmatterId, parseGenericDoc, parseLicensePolicy, parseMarkdownFrontmatter, parseQualityPolicy, parseRequirementFile, parseSecuritySuppression, parseSpecCatalogScope, parseTasksDoc, parseTasksFromContent, parseTrivyVulnerabilities, processPackageDir, readCodeCoverageSummary, readPackageJson, renderAntigravityAgentFile, renderAntigravitySkillFile, renderAutonomyModeSection, renderClaudeAgentFile, renderClaudeSkillFile, renderCopilotAgentFile, renderCopilotSkillFile, renderCursorAgentFile, renderCursorSkillFile, renderDashboardHtml, renderManualsTab, resolveAgentTargets, resolveBranchHierarchy, resolveCiEnvironment, resolveCytoscapePath, resolveDefaultBranchBase, resolveFeatureFilePath, resolveGitRef, resolveLicenseFromFile, resolveReleaseBaseBranch, resolveSastCwe, resolveSastOwasp, resolveSchemaForArtifact, resolveTargetFiles, runGitleaksCli, runSemgrepCli, sanitizeDlpPayload, sanitizeDlpText, scaffoldSddChange, scanAllProductHandoffs, scanAllTestArtifacts, scanContentForSecrets, scanFileForPrivacyViolations, scanFileForSast, scanGoDependencies, scanInstalledLicenses, scanManualsInWorkspace, scanMavenDependencies, scanPnpmStore, scanPythonDependencies, scanRustDependencies, scanSubdirectories, scanWithNativeFs, scanWithSyft, scanWithTrivy, serializeSarifDocument, slugify, syncPdacDigests, tokenizeTitle, updateCitationsInContent, validateAgainstSchema, validateArtifactSchema, verifyArtifactDuplicates, verifyArtifactsSchemas, verifyLicenses, verifyManuals, verifyPdacGraph, verifyPrivacy, verifyProgressiveFriction, verifyQualityGate, verifySast, verifySddIntegration, verifySecrets, verifyTasksGovernance, verifyTestingCoverage, verifyTraceability, walkDir, walkMdFiles, walkProjectFiles, walkSourceFiles, walkTaskFiles, writeCycloneDxSbom, writeQualityBaseline, writeReleaseKpiReport, writeSecuritySarifReport, writeThirdPartyNotices };
|
|
16733
|
+
export { ALL_ARCHITECTURE_TEMPLATES, BRANCH_PATTERNS, BddStepRegistry, DEFAULT_DLP_RULES, DEFAULT_EXCLUDED_PATTERNS, DEFAULT_EXCLUDES, DEFAULT_EXTENSIONS, DEFAULT_PRIVACY_POLICY, DEFAULT_SAST_EXCLUDES, GENERAL_SOURCE_EXTENSIONS, KPI_SUMMARY_END_TAG, KPI_SUMMARY_START_TAG, LIFECYCLE_SKILL_TEMPLATES, OpenSpecAdapter, PII_SAST_RULES, PREPARE_COMMIT_MSG_SCRIPT, PROMPT_INJECTION_SIGNATURES, PROTECTED_BYPASS_PATTERNS, SARIF_SCHEMA_2_1_0, SARIF_VERSION, SAST_RULES, SCHEMA_SCHEMAS_ARCHITECTURE_ADR_SCHEMA_JSON, SCHEMA_SCHEMAS_ARCHITECTURE_COMPONENT_SCHEMA_JSON, SCHEMA_SCHEMAS_ARCHITECTURE_INTRODUCTION_AND_GOALS_SCHEMA_JSON, SCHEMA_SCHEMAS_COMPLIANCE_LICENSE_MANIFEST_SCHEMA_JSON, SCHEMA_SCHEMAS_COMPLIANCE_LICENSE_POLICY_SCHEMA_JSON, SCHEMA_SCHEMAS_COMPLIANCE_QUALITY_POLICY_SCHEMA_JSON, SCHEMA_SCHEMAS_IDE_MCP_CONFIG_SCHEMA_JSON, SCHEMA_SCHEMAS_MANUALS_PRODUCTION_MANUAL_SCHEMA_JSON, SCHEMA_SCHEMAS_MANUALS_USER_MANUAL_SCHEMA_JSON, SCHEMA_SCHEMAS_PRIVACY_DATA_ASSET_SCHEMA_JSON, SCHEMA_SCHEMAS_PRIVACY_PRIVACY_POLICY_SCHEMA_JSON, SCHEMA_SCHEMAS_PRIVACY_PRIVACY_REQ_SCHEMA_JSON, SCHEMA_SCHEMAS_PRIVACY_PRIVACY_ROPA_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_ACTOR_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_BOUNDED_CONTEXT_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_BUSINESS_RULE_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_JOURNEY_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_REQUIREMENT_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_TERM_SCHEMA_JSON, SCHEMA_SCHEMAS_PRODUCT_USE_CASE_SCHEMA_JSON, SCHEMA_SCHEMAS_SAFETY_HAZARD_SCHEMA_JSON, SCHEMA_SCHEMAS_SAFETY_SAFETY_REQ_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_DESIGN_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_HANDOFF_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_PROPOSAL_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_RELEASE_KPIS_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_SESSION_TELEMETRY_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_SPEC_SCHEMA_JSON, SCHEMA_SCHEMAS_SDD_TASKS_SCHEMA_JSON, SCHEMA_SCHEMAS_SECURITY_ABUSE_CASE_SCHEMA_JSON, SCHEMA_SCHEMAS_SECURITY_ENCLAVE_SCHEMA_JSON, SCHEMA_SCHEMAS_SECURITY_SECURITY_REQ_SCHEMA_JSON, SCHEMA_SCHEMAS_SECURITY_THREAT_ACTOR_SCHEMA_JSON, SCHEMA_SCHEMAS_WORKFLOW_AGENT_HANDOFF_SCHEMA_JSON, SECRET_RULES, SPECIALIZED_AGENT_TEMPLATES, STARTER_ANTIGRAVITY_MCP, STARTER_ANTIGRAVITY_RULES, STARTER_ARCH_ADR, STARTER_ARCH_ARCHITECTURE_CONSTRAINTS, STARTER_ARCH_COMPONENT, STARTER_ARCH_CONTEXT_AND_SCOPE, STARTER_ARCH_CROSS_CUTTING_CONCEPTS, STARTER_ARCH_DEPLOYMENT_VIEW, STARTER_ARCH_GLOSSARY, STARTER_ARCH_INTRODUCTION_AND_GOALS, STARTER_ARCH_LEVEL_1_WHITEBOX, STARTER_ARCH_QUALITY_REQUIREMENTS, STARTER_ARCH_RISKS_AND_TECHNICAL_DEBT, STARTER_ARCH_RUNTIME_VIEW, STARTER_ARCH_SOLUTION_STRATEGY, STARTER_AZURE_PIPELINES, STARTER_BASE_TEMPLATES, STARTER_BITBUCKET_PIPELINES, STARTER_CLAUDE_RULES, STARTER_COMPLIANCE_LICENSE_MANIFEST_YAML, STARTER_COPILOT_RULES, STARTER_CURSOR_CORE_RULES, STARTER_CURSOR_MCP, STARTER_CURSOR_PRODUCT_RULES, STARTER_CURSOR_QUALITY_RULES, STARTER_GITHUB_CI, STARTER_GITHUB_DEPLOY_DASHBOARD, STARTER_GITHUB_PR_KPI, STARTER_GITHUB_PULL_REQUEST_TEMPLATE, STARTER_GITHUB_SDD_INTEGRATE, STARTER_GITLAB_CI, STARTER_LICENSE_POLICY, STARTER_PRIVACY_POLICY, STARTER_PROCESS_README, STARTER_PULL_REQUEST_TEMPLATE, STARTER_QUALITY_POLICY, STARTER_REQUIREMENT_TEMPLATE, STARTER_SCHEMAS, STARTER_SCHEMAS_MAP, STARTER_TASK_TEMPLATE, STARTER_TEMPLATES_CI_AZURE_PIPELINES_YML, STARTER_TEMPLATES_CI_BITBUCKET_PIPELINES_YML, STARTER_TEMPLATES_CI_GITHUB_WORKFLOWS_CI_YML, STARTER_TEMPLATES_CI_GITHUB_WORKFLOWS_DEPLOY_DASHBOARD_YML, STARTER_TEMPLATES_CI_GITHUB_WORKFLOWS_PR_KPI_SUMMARY_YML, STARTER_TEMPLATES_CI_GITHUB_WORKFLOWS_SDD_INTEGRATE_ON_MERGE_YML, STARTER_TEMPLATES_CI__GITLAB_CI_YML, STARTER_TEMPLATES_COMPLIANCE_COMMERCIAL_ACQUISITION_REQUEST_TEMPLATE_MD, STARTER_TEMPLATES_MANUALS_PRODUCTION_MANUAL_TEMPLATE_MD, STARTER_TEMPLATES_MANUALS_USER_MANUAL_TEMPLATE_MD, STARTER_TEMPLATES_PRIVACY_DATA_ASSET_TEMPLATE_MD, STARTER_TEMPLATES_PRIVACY_DPIA_REQUEST_TEMPLATE_MD, STARTER_TEMPLATES_PRIVACY_PRIVACY_REQ_TEMPLATE_MD, STARTER_TEMPLATES_PRIVACY_PRIVACY_ROPA_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_ACTOR_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_BOUNDED_CONTEXT_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_BUSINESS_RULE_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_JOURNEY_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_REQUIREMENT_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_TERM_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_USER_DESIGN_FEEDBACK_TEMPLATE_MD, STARTER_TEMPLATES_PRODUCT_USE_CASE_TEMPLATE_MD, STARTER_TEMPLATES_SAFETY_HAZARD_TEMPLATE_MD, STARTER_TEMPLATES_SAFETY_SAFETY_REQ_TEMPLATE_MD, STARTER_TEMPLATES_SDD_DESIGN_TEMPLATE_MD, STARTER_TEMPLATES_SDD_HANDOFF_TEMPLATE_YAML, STARTER_TEMPLATES_SDD_PROPOSAL_TEMPLATE_MD, STARTER_TEMPLATES_SDD_PULL_REQUEST_TEMPLATE_MD, STARTER_TEMPLATES_SDD_SPEC_TEMPLATE_MD, STARTER_TEMPLATES_SDD_TASKS_TEMPLATE_MD, STARTER_TEMPLATES_SECURITY_ABUSE_CASE_TEMPLATE_MD, STARTER_TEMPLATES_SECURITY_ENCLAVE_TEMPLATE_MD, STARTER_TEMPLATES_SECURITY_SECURITY_REQ_TEMPLATE_MD, STARTER_TEMPLATES_SECURITY_THREAT_ACTOR_TEMPLATE_MD, STARTER_TEMPLATES_WORKFLOW_AGENT_HANDOFF_TEMPLATE_MD, STARTER_VSCODE_MCP, STARTER_WORKFLOW_HANDOFF_TEMPLATE, STARTER__GITHUB_PULL_REQUEST_TEMPLATE_MD, SpecKitAdapter, TYPE_TO_SCHEMA_MAP, VALID_AGENT_TARGETS, VALID_ARCHITECTURE_GRANULARITIES, VALID_AUTONOMY_MODES, VALID_CHANGE_PROFILES, VALID_CI_PROVIDERS, aggregateCommitKpiRecords, aggregatePrKpis, aggregateReleaseKpis, analyzeBddVariantsForRequirement, appendRevisionHistoryRow, applyRatchetMode, buildCycloneDxComponent, buildCycloneDxVulnerabilities, buildFeatureFileContent, buildGraphElements, calculateJaccardSimilarity, calculateMetrics, calculateRating, calculateShannonEntropy, checkGherkinInSync, checkoutTaskBranch, classifyBranch, classifyMetricFromMessage, collectAgentFiles, collectDashboardMetrics, collectHistoricalKpis, computeCanonicalSha256, computeSha256, computeViolationSignature, createDefaultDlpPolicy, createDefaultQualityPolicy, depositProductHandoffSidecar, detectActiveChangeForIntegration, detectAuthorIdentity, detectLanguage, detectProfileFromChange, detectPromptInjection, emitCiOutput, evaluateCompoundLicense, evaluateSingleDependency, evaluateVulnerabilityThresholds, executeBddFeature, extractBaselineEntriesFromResults, extractCitations, extractCommitKpisFromRange, extractDirectDepNames, extractFeatureTags, extractFrontmatter, extractFunctions, extractFunctionsBraceLanguages, extractFunctionsPolyglot, extractFunctionsPython, extractFunctionsTypeScriptAst, extractGherkinBlock, extractGherkinFeatures, extractNormativeText, findChangeWorkspaceDir, findLicenseFile, formatCommitTrailers, formatPrKpiMarkdown, formatReleaseKpiMarkdown, generateBranchHierarchyPlan, generateCycloneDxSbom, generateDashboardReport, generateDuplicatesReportMarkdown, generateGovernanceReportMarkdown, generateLicenseReportMarkdown, generatePdacReportMarkdown, generatePrivacyReportMarkdown, generateQualityReport, generateRopaInventoryMarkdown, generateSastReportMarkdown, generateSecretsReportMarkdown, generateSecuritySarifReport, generateSuppressionsAuditReport, generateTestingCoverageReportMarkdown, generateThirdPartyNotices, generateTraceabilityReportMarkdown, getArchitectureTemplates, getCytoscapeScript, getGitDiffLines, getNextCorrelativeNumber, getSddAdapter, inferArtifactTypeFromId, inferMissingTrailers, initProject, injectKpisIntoPrBody, installGitHooks, integrateSddChange, isGitleaksInstalled, isMetricWorsened, isPathProtectedFromPatch, isPlaceholderOrIgnored, isRequirementArtifact2 as isRequirementArtifact, isSemgrepInstalled, isToolAvailable, loadDlpPolicy, loadPrivacyPolicy, loadProductHandoffSidecar, loadQualityBaseline, locateTaskInActiveChanges, mapSastSeverityToSarifLevel, maskSecret, normalizeSpdxLicense, normalizeUri, parseCommitTrailers, parseDlpPolicy, parseFeatureDocument, parseFrontmatter, parseFrontmatterId, parseGenericDoc, parseLicensePolicy, parseMarkdownFrontmatter, parseQualityPolicy, parseRequirementFile, parseSecuritySuppression, parseSpecCatalogScope, parseTasksDoc, parseTasksFromContent, parseTrivyVulnerabilities, processPackageDir, readCodeCoverageSummary, readPackageJson, renderAntigravityAgentFile, renderAntigravitySkillFile, renderAutonomyModeSection, renderClaudeAgentFile, renderClaudeSkillFile, renderCopilotAgentFile, renderCopilotSkillFile, renderCursorAgentFile, renderCursorSkillFile, renderDashboardHtml, renderManualsTab, resolveAgentTargets, resolveBranchHierarchy, resolveCiEnvironment, resolveCytoscapePath, resolveDefaultBranchBase, resolveFeatureFilePath, resolveGitRef, resolveLicenseFromFile, resolveReleaseBaseBranch, resolveSastCwe, resolveSastOwasp, resolveSchemaForArtifact, resolveTargetFiles, runGitleaksCli, runSemgrepCli, sanitizeDlpPayload, sanitizeDlpText, scaffoldSddChange, scanAllProductHandoffs, scanAllTestArtifacts, scanContentForSecrets, scanFileForPrivacyViolations, scanFileForSast, scanGoDependencies, scanInstalledLicenses, scanManualsInWorkspace, scanMavenDependencies, scanPnpmStore, scanPythonDependencies, scanRustDependencies, scanSubdirectories, scanWithNativeFs, scanWithSyft, scanWithTrivy, serializeSarifDocument, slugify, syncPdacDigests, tokenizeTitle, updateCitationsInContent, validateAgainstSchema, validateArtifactSchema, verifyArtifactDuplicates, verifyArtifactsSchemas, verifyLicenses, verifyManuals, verifyPdacGraph, verifyPrivacy, verifyProgressiveFriction, verifyQualityGate, verifySast, verifySddIntegration, verifySecrets, verifyTasksGovernance, verifyTestingCoverage, verifyTraceability, walkDir, walkMdFiles, walkProjectFiles, walkSourceFiles, walkTaskFiles, writeCucumberJsonReport, writeCycloneDxSbom, writeQualityBaseline, writeReleaseKpiReport, writeSecuritySarifReport, writeThirdPartyNotices };
|
|
16322
16734
|
//# sourceMappingURL=index.js.map
|
|
16323
16735
|
//# sourceMappingURL=index.js.map
|