UNPKG

@autobe/agent

Version:

AI backend server code generator

75 lines 2.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.detectOversizedToc = exports.detectTechLockin = void 0; // ─── A) Technology Lock-in Detection ─── /** * Prohibited technology-specific keywords. * * Requirements documents must be technology-neutral. These patterns detect * specific database, ORM, framework, infrastructure, and algorithm references * that constitute implementation lock-in. */ const PROHIBITED_TECH_PATTERNS = [ // Algorithm specifics { regex: /\bbcrypt\s+(?:with\s+)?cost\s+factor/i, label: "bcrypt cost factor", }, // DB-specific syntax { regex: /\bRETURNING\s+clause\b/i, label: "RETURNING clause (DB-specific)" }, ]; /** * Detect technology lock-in in section content. * * Scans all section titles and content for prohibited technology-specific * keywords. Used in the validate callback to force LLM retry. * * @returns Array of human-readable violation strings (empty = no violations) */ const detectTechLockin = (sections) => { const violations = []; for (let i = 0; i < sections.length; i++) { const section = sections[i]; const combined = `${section.title}\n${section.content}`; for (const { regex, label } of PROHIBITED_TECH_PATTERNS) { // Reset lastIndex for safety (though these don't use /g flag) regex.lastIndex = 0; if (regex.test(combined)) { violations.push(`Section "${section.title}": Technology lock-in "${label}" detected. ` + `Requirements must be technology-neutral. Replace with a generic equivalent.`); } } } return violations; }; exports.detectTechLockin = detectTechLockin; // ─── B) Oversized Overview Detection ─── const OVERVIEW_MAX_LINES = 600; /** * Detect if the overview file's sections exceed the maximum line count. * * 00-toc.md should be a concise project summary and navigation aid, not a * detailed requirements document. If the total line count across all sections * exceeds `OVERVIEW_MAX_LINES`, returns a violation string. * * @returns Array of violation strings (empty = no violation) */ const detectOversizedToc = (sectionResults) => { let totalLines = 0; for (const sectionsForModule of sectionResults) { for (const sectionEvent of sectionsForModule) { for (const section of sectionEvent.sectionSections) { totalLines += section.content.split("\n").length; } } } if (totalLines > OVERVIEW_MAX_LINES) { return [ `Overview exceeds ${OVERVIEW_MAX_LINES} lines (actual: ${totalLines}). ` + `Remove detailed requirements, keep only navigation tables and brief summaries.`, ]; } return []; }; exports.detectOversizedToc = detectOversizedToc; //# sourceMappingURL=buildHardValidators.js.map