zone-ai-agent 0.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/.gittignore +4 -0
- package/README.md +36 -0
- package/dist/api/server.js +136 -0
- package/dist/api/server.js.map +1 -0
- package/dist/apply/applyPatchPlan.js +17 -0
- package/dist/apply/applyPatchPlan.js.map +1 -0
- package/dist/apply/canApplyDecision.js +26 -0
- package/dist/apply/canApplyDecision.js.map +1 -0
- package/dist/apply/patchPlan.js +3 -0
- package/dist/apply/patchPlan.js.map +1 -0
- package/dist/apply/renderApplyResult.js +18 -0
- package/dist/apply/renderApplyResult.js.map +1 -0
- package/dist/apply/runApplyFlow.js +40 -0
- package/dist/apply/runApplyFlow.js.map +1 -0
- package/dist/apply/types.js +3 -0
- package/dist/apply/types.js.map +1 -0
- package/dist/audit/auditDiffIntelligence.js +3 -0
- package/dist/audit/auditDiffIntelligence.js.map +1 -0
- package/dist/audit/auditSnapshot.js +87 -0
- package/dist/audit/auditSnapshot.js.map +1 -0
- package/dist/audit/renderAuditDiff.js +64 -0
- package/dist/audit/renderAuditDiff.js.map +1 -0
- package/dist/audit/snapshotDiff.js +53 -0
- package/dist/audit/snapshotDiff.js.map +1 -0
- package/dist/audit/snapshotReader.js +31 -0
- package/dist/audit/snapshotReader.js.map +1 -0
- package/dist/audit/snapshotWriter.js +59 -0
- package/dist/audit/snapshotWriter.js.map +1 -0
- package/dist/ci/evaluateCiResult.js +142 -0
- package/dist/ci/evaluateCiResult.js.map +1 -0
- package/dist/cli/buildGeneratedPatchPlanPreview.js +65 -0
- package/dist/cli/buildGeneratedPatchPlanPreview.js.map +1 -0
- package/dist/cli/colors.js +28 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/diffOutput.js +37 -0
- package/dist/cli/diffOutput.js.map +1 -0
- package/dist/cli/index.js +850 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/loadPatchPlan.js +52 -0
- package/dist/cli/loadPatchPlan.js.map +1 -0
- package/dist/cli/output.js +34 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/parseCliArgs.js +3 -0
- package/dist/cli/parseCliArgs.js.map +1 -0
- package/dist/cli/runGeneratedPatchPlanFlow.js +23 -0
- package/dist/cli/runGeneratedPatchPlanFlow.js.map +1 -0
- package/dist/components/LoginForm.js +64 -0
- package/dist/components/LoginForm.js.map +1 -0
- package/dist/core/analyzeCodePatterns.js +3 -0
- package/dist/core/analyzeCodePatterns.js.map +1 -0
- package/dist/core/applyLlmPatches.js +43 -0
- package/dist/core/applyLlmPatches.js.map +1 -0
- package/dist/core/buildConfidenceBreakdownFromSignals.js +33 -0
- package/dist/core/buildConfidenceBreakdownFromSignals.js.map +1 -0
- package/dist/core/buildDecisionAuditSnapshot.js +18 -0
- package/dist/core/buildDecisionAuditSnapshot.js.map +1 -0
- package/dist/core/buildDecisionTrace.js +113 -0
- package/dist/core/buildDecisionTrace.js.map +1 -0
- package/dist/core/buildFallbackPatchPlan.js +23 -0
- package/dist/core/buildFallbackPatchPlan.js.map +1 -0
- package/dist/core/buildFallbackPlan.js +25 -0
- package/dist/core/buildFallbackPlan.js.map +1 -0
- package/dist/core/buildSchemaAwareContext.js +49 -0
- package/dist/core/buildSchemaAwareContext.js.map +1 -0
- package/dist/core/buildTaskExecutionContext.js +70 -0
- package/dist/core/buildTaskExecutionContext.js.map +1 -0
- package/dist/core/ciEvaluator.js +83 -0
- package/dist/core/ciEvaluator.js.map +1 -0
- package/dist/core/computeRiskScore.js +43 -0
- package/dist/core/computeRiskScore.js.map +1 -0
- package/dist/core/computeRiskScoreDetails.js +106 -0
- package/dist/core/computeRiskScoreDetails.js.map +1 -0
- package/dist/core/confidenceGate.js +83 -0
- package/dist/core/confidenceGate.js.map +1 -0
- package/dist/core/decision/buildDecisionExplanation.js +91 -0
- package/dist/core/decision/buildDecisionExplanation.js.map +1 -0
- package/dist/core/decision/buildDecisionReasonCodes.js +65 -0
- package/dist/core/decision/buildDecisionReasonCodes.js.map +1 -0
- package/dist/core/decision/buildReasonSummaryLine.js +24 -0
- package/dist/core/decision/buildReasonSummaryLine.js.map +1 -0
- package/dist/core/decision/buildRecommendation.js +43 -0
- package/dist/core/decision/buildRecommendation.js.map +1 -0
- package/dist/core/decision/decideExecutionMode.js +125 -0
- package/dist/core/decision/decideExecutionMode.js.map +1 -0
- package/dist/core/decision/decisionReasonCodeMeta.js +91 -0
- package/dist/core/decision/decisionReasonCodeMeta.js.map +1 -0
- package/dist/core/decision/renderDecisionSummary.js +115 -0
- package/dist/core/decision/renderDecisionSummary.js.map +1 -0
- package/dist/core/detectResourceStorage.js +78 -0
- package/dist/core/detectResourceStorage.js.map +1 -0
- package/dist/core/formatOutput.js +53 -0
- package/dist/core/formatOutput.js.map +1 -0
- package/dist/core/intentAwareScore.js +35 -0
- package/dist/core/intentAwareScore.js.map +1 -0
- package/dist/core/loadSavedAgentResult.js +18 -0
- package/dist/core/loadSavedAgentResult.js.map +1 -0
- package/dist/core/normalizeIssues.js +50 -0
- package/dist/core/normalizeIssues.js.map +1 -0
- package/dist/core/normalizeSignals.js +40 -0
- package/dist/core/normalizeSignals.js.map +1 -0
- package/dist/core/output/zoneStageTypes.js +3 -0
- package/dist/core/output/zoneStageTypes.js.map +1 -0
- package/dist/core/patchRiskAnalyzer.js +50 -0
- package/dist/core/patchRiskAnalyzer.js.map +1 -0
- package/dist/core/renderRunAgentResult.js +77 -0
- package/dist/core/renderRunAgentResult.js.map +1 -0
- package/dist/core/result/buildApplyStageResult.js +61 -0
- package/dist/core/result/buildApplyStageResult.js.map +1 -0
- package/dist/core/result/buildCliViewModel.js +79 -0
- package/dist/core/result/buildCliViewModel.js.map +1 -0
- package/dist/core/result/buildConversionStageResult.js +62 -0
- package/dist/core/result/buildConversionStageResult.js.map +1 -0
- package/dist/core/result/buildDecisionStageResult.js +61 -0
- package/dist/core/result/buildDecisionStageResult.js.map +1 -0
- package/dist/core/result/buildExecutionResult.js +148 -0
- package/dist/core/result/buildExecutionResult.js.map +1 -0
- package/dist/core/result/buildPreviewStageResult.js +47 -0
- package/dist/core/result/buildPreviewStageResult.js.map +1 -0
- package/dist/core/result/buildSavedDecisionExplanation.js +52 -0
- package/dist/core/result/buildSavedDecisionExplanation.js.map +1 -0
- package/dist/core/result/buildSavedRecommendation.js +39 -0
- package/dist/core/result/buildSavedRecommendation.js.map +1 -0
- package/dist/core/result/buildStageResultV2.js +52 -0
- package/dist/core/result/buildStageResultV2.js.map +1 -0
- package/dist/core/result/renderBundledResult.js +47 -0
- package/dist/core/result/renderBundledResult.js.map +1 -0
- package/dist/core/result/renderCliResult.js +93 -0
- package/dist/core/result/renderCliResult.js.map +1 -0
- package/dist/core/result/scoreTopRisks.js +205 -0
- package/dist/core/result/scoreTopRisks.js.map +1 -0
- package/dist/core/runAgent.js +210 -0
- package/dist/core/runAgent.js.map +1 -0
- package/dist/core/runFeatureAgent.js +684 -0
- package/dist/core/runFeatureAgent.js.map +1 -0
- package/dist/core/runLlmPatchFlow.js +522 -0
- package/dist/core/runLlmPatchFlow.js.map +1 -0
- package/dist/core/saveAgentResult.js +234 -0
- package/dist/core/saveAgentResult.js.map +1 -0
- package/dist/core/scoring/computeConfidenceBreakdown.js +130 -0
- package/dist/core/scoring/computeConfidenceBreakdown.js.map +1 -0
- package/dist/core/scoring/computeConfidenceScore.js +37 -0
- package/dist/core/scoring/computeConfidenceScore.js.map +1 -0
- package/dist/core/scoring/confidenceRules.js +58 -0
- package/dist/core/scoring/confidenceRules.js.map +1 -0
- package/dist/core/scoring/confidenceScore.js +8 -0
- package/dist/core/scoring/confidenceScore.js.map +1 -0
- package/dist/core/selectRelevantBlocks.js +58 -0
- package/dist/core/selectRelevantBlocks.js.map +1 -0
- package/dist/core/selfHealingLoop.js +209 -0
- package/dist/core/selfHealingLoop.js.map +1 -0
- package/dist/core/taskIntentParser.js +165 -0
- package/dist/core/taskIntentParser.js.map +1 -0
- package/dist/core/types/agentResult.js +3 -0
- package/dist/core/types/agentResult.js.map +1 -0
- package/dist/core/types/risk.js +3 -0
- package/dist/core/types/risk.js.map +1 -0
- package/dist/core/validatePatchAgainstSchema.js +100 -0
- package/dist/core/validatePatchAgainstSchema.js.map +1 -0
- package/dist/core/validateSuggestedArchitecture.js +24 -0
- package/dist/core/validateSuggestedArchitecture.js.map +1 -0
- package/dist/engine/buildDecisionExplanation.js +114 -0
- package/dist/engine/buildDecisionExplanation.js.map +1 -0
- package/dist/engine/contradictionDetector.js +40 -0
- package/dist/engine/contradictionDetector.js.map +1 -0
- package/dist/engine/decisionEngine.js +19 -0
- package/dist/engine/decisionEngine.js.map +1 -0
- package/dist/llm/openaiClient.js +19 -0
- package/dist/llm/openaiClient.js.map +1 -0
- package/dist/llm/planFeature.js +57 -0
- package/dist/llm/planFeature.js.map +1 -0
- package/dist/llm/planFix.js +3 -0
- package/dist/llm/planFix.js.map +1 -0
- package/dist/llm/planFullPatch.js +62 -0
- package/dist/llm/planFullPatch.js.map +1 -0
- package/dist/llm/planPatchPreview.js +60 -0
- package/dist/llm/planPatchPreview.js.map +1 -0
- package/dist/llm/prompts.js +131 -0
- package/dist/llm/prompts.js.map +1 -0
- package/dist/llm/schemas.js +28 -0
- package/dist/llm/schemas.js.map +1 -0
- package/dist/patch/apply/formatApplyFlowResult.js +23 -0
- package/dist/patch/apply/formatApplyFlowResult.js.map +1 -0
- package/dist/patch/apply/renderApplyFlowResult.js +15 -0
- package/dist/patch/apply/renderApplyFlowResult.js.map +1 -0
- package/dist/patch/apply/runApplyFlow.js +88 -0
- package/dist/patch/apply/runApplyFlow.js.map +1 -0
- package/dist/patch/applyFlowTypes.js +3 -0
- package/dist/patch/applyFlowTypes.js.map +1 -0
- package/dist/patch/applyPatchPlan.js +117 -0
- package/dist/patch/applyPatchPlan.js.map +1 -0
- package/dist/patch/backupFile.js +23 -0
- package/dist/patch/backupFile.js.map +1 -0
- package/dist/patch/conversion/canConvertGeneratedPlanToPatchPlan.js +57 -0
- package/dist/patch/conversion/canConvertGeneratedPlanToPatchPlan.js.map +1 -0
- package/dist/patch/conversion/convertGeneratedPlanToPatchPlan.js +38 -0
- package/dist/patch/conversion/convertGeneratedPlanToPatchPlan.js.map +1 -0
- package/dist/patch/conversion/formatGeneratedPlanConversionFailure.js +17 -0
- package/dist/patch/conversion/formatGeneratedPlanConversionFailure.js.map +1 -0
- package/dist/patch/conversion/generatedPlanConversionFailureMeta.js +40 -0
- package/dist/patch/conversion/generatedPlanConversionFailureMeta.js.map +1 -0
- package/dist/patch/conversion/generatedPlanConversionTypes.js +3 -0
- package/dist/patch/conversion/generatedPlanConversionTypes.js.map +1 -0
- package/dist/patch/conversion/renderGeneratedPlanConversionFailure.js +16 -0
- package/dist/patch/conversion/renderGeneratedPlanConversionFailure.js.map +1 -0
- package/dist/patch/generatedPlanConversion.js +96 -0
- package/dist/patch/generatedPlanConversion.js.map +1 -0
- package/dist/patch/patchAnchors.js +3 -0
- package/dist/patch/patchAnchors.js.map +1 -0
- package/dist/patch/patchValidationRules.js +116 -0
- package/dist/patch/patchValidationRules.js.map +1 -0
- package/dist/patch/patchValidationTypes.js +3 -0
- package/dist/patch/patchValidationTypes.js.map +1 -0
- package/dist/patch/renderApplyFlowResult.js +26 -0
- package/dist/patch/renderApplyFlowResult.js.map +1 -0
- package/dist/patch/validatePatchPlan.js +148 -0
- package/dist/patch/validatePatchPlan.js.map +1 -0
- package/dist/patch-generation/buildGeneratedPatchPlan.js +94 -0
- package/dist/patch-generation/buildGeneratedPatchPlan.js.map +1 -0
- package/dist/patch-generation/buildPatchOperations.js +41 -0
- package/dist/patch-generation/buildPatchOperations.js.map +1 -0
- package/dist/patch-generation/classifyPatchIntent.js +62 -0
- package/dist/patch-generation/classifyPatchIntent.js.map +1 -0
- package/dist/patch-generation/formatGeneratedPatchPlanPreview.js +25 -0
- package/dist/patch-generation/formatGeneratedPatchPlanPreview.js.map +1 -0
- package/dist/patch-generation/generatePatchPlan.js +74 -0
- package/dist/patch-generation/generatePatchPlan.js.map +1 -0
- package/dist/patch-generation/generatedPatchPlanTypes.js +3 -0
- package/dist/patch-generation/generatedPatchPlanTypes.js.map +1 -0
- package/dist/patch-generation/isIntentAllowed.js +15 -0
- package/dist/patch-generation/isIntentAllowed.js.map +1 -0
- package/dist/patch-generation/renderGeneratedPatchPlan.js +62 -0
- package/dist/patch-generation/renderGeneratedPatchPlan.js.map +1 -0
- package/dist/prompts/developerPrompt.js +213 -0
- package/dist/prompts/developerPrompt.js.map +1 -0
- package/dist/prompts/fullPatchPrompt.js +82 -0
- package/dist/prompts/fullPatchPrompt.js.map +1 -0
- package/dist/prompts/patchPreviewPrompt.js +83 -0
- package/dist/prompts/patchPreviewPrompt.js.map +1 -0
- package/dist/prompts/planFeaturePrompt.js +73 -0
- package/dist/prompts/planFeaturePrompt.js.map +1 -0
- package/dist/prompts/testEngineerContext.js +184 -0
- package/dist/prompts/testEngineerContext.js.map +1 -0
- package/dist/prompts/testEngineerPrompt.js +135 -0
- package/dist/prompts/testEngineerPrompt.js.map +1 -0
- package/dist/repo/analyzeProjectPatterns.js +46 -0
- package/dist/repo/analyzeProjectPatterns.js.map +1 -0
- package/dist/repo/detectProjectStructure.js +45 -0
- package/dist/repo/detectProjectStructure.js.map +1 -0
- package/dist/repo/getGitChangedFiles.js +96 -0
- package/dist/repo/getGitChangedFiles.js.map +1 -0
- package/dist/repo/loadSchemaSnapshot.js +29 -0
- package/dist/repo/loadSchemaSnapshot.js.map +1 -0
- package/dist/repo/rankRelevantFiles.js +306 -0
- package/dist/repo/rankRelevantFiles.js.map +1 -0
- package/dist/repo/readProjectFiles.js +27 -0
- package/dist/repo/readProjectFiles.js.map +1 -0
- package/dist/repo/scanRepo.js +93 -0
- package/dist/repo/scanRepo.js.map +1 -0
- package/dist/repo/validateSuggestedFiles.js +66 -0
- package/dist/repo/validateSuggestedFiles.js.map +1 -0
- package/dist/roles/dataAnalystContext.js +155 -0
- package/dist/roles/dataAnalystContext.js.map +1 -0
- package/dist/roles/detectDataSchema.js +152 -0
- package/dist/roles/detectDataSchema.js.map +1 -0
- package/dist/roles/detectTestComplexity.js +74 -0
- package/dist/roles/detectTestComplexity.js.map +1 -0
- package/dist/roles/detectTestFramework.js +166 -0
- package/dist/roles/detectTestFramework.js.map +1 -0
- package/dist/roles/runDataAnalystFlow.js +221 -0
- package/dist/roles/runDataAnalystFlow.js.map +1 -0
- package/dist/roles/runTestEngineerFlow.js +266 -0
- package/dist/roles/runTestEngineerFlow.js.map +1 -0
- package/dist/roles/testEngineerContext.js +282 -0
- package/dist/roles/testEngineerContext.js.map +1 -0
- package/dist/roles/testOutputValidator.js +474 -0
- package/dist/roles/testOutputValidator.js.map +1 -0
- package/dist/types/agent.js +3 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/analysis.js +3 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/patch.js +3 -0
- package/dist/types/patch.js.map +1 -0
- package/dist/types/project.js +3 -0
- package/dist/types/project.js.map +1 -0
- package/dist/types/schema.js +3 -0
- package/dist/types/schema.js.map +1 -0
- package/dist/utils/executionTracker.js +33 -0
- package/dist/utils/executionTracker.js.map +1 -0
- package/dist/utils/files.js +35 -0
- package/dist/utils/files.js.map +1 -0
- package/dist/utils/logger.js +179 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.js +14 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/trace.js +10 -0
- package/dist/utils/trace.js.map +1 -0
- package/dist/utils/validation.js +24 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +53 -0
- package/tsconfig.json +17 -0
- package/vitest.config.ts +21 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.buildTestEngineerContext = buildTestEngineerContext;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
function detectPageObjects(files, language) {
|
|
9
|
+
if (!Array.isArray(files))
|
|
10
|
+
return [];
|
|
11
|
+
if (language === "java") {
|
|
12
|
+
return files.filter((f) => f.path.includes("pages/") ||
|
|
13
|
+
f.path.includes("page/") ||
|
|
14
|
+
f.path.endsWith("Page.java") ||
|
|
15
|
+
f.path.endsWith("PageObject.java"));
|
|
16
|
+
}
|
|
17
|
+
if (language === "typescript" || language === "javascript") {
|
|
18
|
+
return files.filter((f) => f.path.includes("pages/") ||
|
|
19
|
+
f.path.includes("page-objects/") ||
|
|
20
|
+
f.path.endsWith(".page.ts") ||
|
|
21
|
+
f.path.endsWith(".page.js"));
|
|
22
|
+
}
|
|
23
|
+
if (language === "python") {
|
|
24
|
+
return files.filter((f) => f.path.includes("pages/") ||
|
|
25
|
+
f.path.endsWith("_page.py") ||
|
|
26
|
+
f.path.includes("page_objects/"));
|
|
27
|
+
}
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
function detectStepDefinitions(files) {
|
|
31
|
+
if (!Array.isArray(files))
|
|
32
|
+
return [];
|
|
33
|
+
return files.filter((f) => f.path.includes("steps/") ||
|
|
34
|
+
f.path.includes("stepdefinitions/") ||
|
|
35
|
+
f.path.includes("step_definitions/") ||
|
|
36
|
+
f.path.endsWith("Steps.java") ||
|
|
37
|
+
f.path.endsWith("_steps.py"));
|
|
38
|
+
}
|
|
39
|
+
function detectFeatureFiles(files) {
|
|
40
|
+
if (!Array.isArray(files))
|
|
41
|
+
return [];
|
|
42
|
+
return files
|
|
43
|
+
.filter((f) => f.path.endsWith(".feature"))
|
|
44
|
+
.sort((a, b) => {
|
|
45
|
+
const aIsPreferred = a.path.startsWith("src/test/resources/features/");
|
|
46
|
+
const bIsPreferred = b.path.startsWith("src/test/resources/features/");
|
|
47
|
+
if (aIsPreferred === bIsPreferred)
|
|
48
|
+
return a.path.localeCompare(b.path);
|
|
49
|
+
return aIsPreferred ? -1 : 1;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function detectTestFiles(files, framework) {
|
|
53
|
+
if (!Array.isArray(files))
|
|
54
|
+
return [];
|
|
55
|
+
switch (framework.framework) {
|
|
56
|
+
case "playwright_ts":
|
|
57
|
+
return files.filter((f) => f.path.endsWith(".spec.ts") || f.path.endsWith(".test.ts"));
|
|
58
|
+
case "playwright_js":
|
|
59
|
+
return files.filter((f) => f.path.endsWith(".spec.js") || f.path.endsWith(".test.js"));
|
|
60
|
+
case "cypress":
|
|
61
|
+
return files.filter((f) => f.path.endsWith(".cy.ts") || f.path.endsWith(".cy.js"));
|
|
62
|
+
case "cucumber_java":
|
|
63
|
+
return files.filter((f) => f.path.endsWith(".feature") || f.path.endsWith("Steps.java"));
|
|
64
|
+
case "selenium_java":
|
|
65
|
+
case "junit":
|
|
66
|
+
case "testng":
|
|
67
|
+
return files.filter((f) => f.path.endsWith("Test.java"));
|
|
68
|
+
case "pytest":
|
|
69
|
+
case "selenium_python":
|
|
70
|
+
return files.filter((f) => f.path.startsWith("test_") || f.path.includes("/test_"));
|
|
71
|
+
default:
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function detectConfigFiles(files, framework) {
|
|
76
|
+
if (!Array.isArray(files))
|
|
77
|
+
return [];
|
|
78
|
+
return files.filter((f) => f.path.includes("playwright.config") ||
|
|
79
|
+
f.path.includes("cypress.config") ||
|
|
80
|
+
f.path.includes("pytest.ini") ||
|
|
81
|
+
f.path.includes("testng.xml") ||
|
|
82
|
+
f.path.includes("pom.xml") ||
|
|
83
|
+
f.path.includes("conftest.py") ||
|
|
84
|
+
f.path.includes("build.gradle"));
|
|
85
|
+
}
|
|
86
|
+
function buildFrameworkSummary(fw) {
|
|
87
|
+
const lines = [
|
|
88
|
+
`Test framework: ${fw.framework}`,
|
|
89
|
+
`Language: ${fw.language}`,
|
|
90
|
+
`Confidence: ${fw.confidence}`,
|
|
91
|
+
`Evidence: ${fw.evidence.join(", ")}`,
|
|
92
|
+
];
|
|
93
|
+
if (fw.testDir)
|
|
94
|
+
lines.push(`Test directory: ${fw.testDir}`);
|
|
95
|
+
lines.push(`Test file pattern: ${fw.testFilePattern}`);
|
|
96
|
+
return lines.join("\n");
|
|
97
|
+
}
|
|
98
|
+
function buildPromptRole(fw) {
|
|
99
|
+
switch (fw.framework) {
|
|
100
|
+
case "playwright_ts":
|
|
101
|
+
return "You are a senior test automation engineer specializing in Playwright with TypeScript.";
|
|
102
|
+
case "playwright_js":
|
|
103
|
+
return "You are a senior test automation engineer specializing in Playwright with JavaScript.";
|
|
104
|
+
case "cypress":
|
|
105
|
+
return "You are a senior test automation engineer specializing in Cypress.";
|
|
106
|
+
case "cucumber_java":
|
|
107
|
+
return "You are a senior test automation engineer specializing in Cucumber BDD with Java and Selenium WebDriver. You write Gherkin scenarios and Java step definitions using Page Object Model.";
|
|
108
|
+
case "selenium_java":
|
|
109
|
+
return "You are a senior test automation engineer specializing in Selenium WebDriver with Java.";
|
|
110
|
+
case "testng":
|
|
111
|
+
return "You are a senior test automation engineer specializing in TestNG with Java and Selenium WebDriver.";
|
|
112
|
+
case "pytest":
|
|
113
|
+
return "You are a senior test automation engineer specializing in pytest with Python.";
|
|
114
|
+
case "selenium_python":
|
|
115
|
+
return "You are a senior test automation engineer specializing in Selenium WebDriver with Python.";
|
|
116
|
+
default:
|
|
117
|
+
return "You are a senior test automation engineer.";
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function buildOutputRules(fw) {
|
|
121
|
+
const common = [
|
|
122
|
+
"Use ONLY methods that exist in the provided page object files",
|
|
123
|
+
"Do NOT invent new methods — if a method does not exist, mention it as a risk",
|
|
124
|
+
"Follow the exact naming conventions used in existing test files",
|
|
125
|
+
"Keep tests focused and minimal",
|
|
126
|
+
];
|
|
127
|
+
switch (fw.framework) {
|
|
128
|
+
case "playwright_ts":
|
|
129
|
+
case "playwright_js":
|
|
130
|
+
return [...common, "Use async/await pattern", "Use expect() from @playwright/test"];
|
|
131
|
+
case "cypress":
|
|
132
|
+
return [...common, "Use cy.get() with data-testid selectors", "Use cy.visit() for navigation"];
|
|
133
|
+
case "cucumber_java":
|
|
134
|
+
return [
|
|
135
|
+
...common,
|
|
136
|
+
"Write Gherkin in Given/When/Then format",
|
|
137
|
+
"Use @Given @When @Then annotations",
|
|
138
|
+
"Inject Page Objects via constructor — NEVER instantiate WebDriver directly",
|
|
139
|
+
"Place feature files in src/test/resources/features/",
|
|
140
|
+
"Place step definitions in src/test/java/ with correct package",
|
|
141
|
+
"ALWAYS use export default ClassName not export default new ClassName()",
|
|
142
|
+
];
|
|
143
|
+
case "selenium_java":
|
|
144
|
+
case "testng":
|
|
145
|
+
return [...common, "Use @Test annotation", "Use explicit waits — never Thread.sleep()"];
|
|
146
|
+
case "pytest":
|
|
147
|
+
case "selenium_python":
|
|
148
|
+
return [...common, "Use pytest fixtures", "Use assert statements"];
|
|
149
|
+
default:
|
|
150
|
+
return common;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function buildFileLocationRules(fw) {
|
|
154
|
+
switch (fw.framework) {
|
|
155
|
+
case "playwright_ts":
|
|
156
|
+
return ["Test files: tests/ or e2e/", "Extension: .spec.ts"];
|
|
157
|
+
case "playwright_js":
|
|
158
|
+
return ["Test files: tests/ or e2e/", "Extension: .spec.js"];
|
|
159
|
+
case "cypress":
|
|
160
|
+
return ["Test files: cypress/e2e/", "Extension: .cy.ts or .cy.js"];
|
|
161
|
+
case "cucumber_java":
|
|
162
|
+
return [
|
|
163
|
+
"Feature files: src/test/resources/features/",
|
|
164
|
+
"Step definitions: src/test/java/<package>/stepdefinitions/",
|
|
165
|
+
"Page objects: src/main/java/<package>/pages/",
|
|
166
|
+
];
|
|
167
|
+
case "selenium_java":
|
|
168
|
+
case "testng":
|
|
169
|
+
return ["Test classes: src/test/java/<package>/", "Naming: <Name>Test.java"];
|
|
170
|
+
case "pytest":
|
|
171
|
+
case "selenium_python":
|
|
172
|
+
return ["Test files: tests/", "Naming: test_<name>.py"];
|
|
173
|
+
default:
|
|
174
|
+
return ["Follow existing project structure"];
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
const TASK_FILLER_WORDS = new Set([
|
|
178
|
+
"a", "an", "the", "please", "write", "new", "cucumber",
|
|
179
|
+
"scenario", "for", "test", "create", "generate", "feature",
|
|
180
|
+
"playwright", "pytest", "username", "selector",
|
|
181
|
+
"is", "and", "use", "as", "credentials", "after", "verify",
|
|
182
|
+
"url", "contains", "password", "submit", "with",
|
|
183
|
+
]);
|
|
184
|
+
function buildIntentTokens(task) {
|
|
185
|
+
const sanitizedTask = task
|
|
186
|
+
.toLowerCase()
|
|
187
|
+
.normalize("NFKD")
|
|
188
|
+
.replace(/[\u0300-\u036f]/g, "")
|
|
189
|
+
.replace(/https?:\/\/[^\s]+/g, " ")
|
|
190
|
+
.replace(/www\.[^\s]+/g, " ")
|
|
191
|
+
.replace(/[a-z0-9-]+\.(com|org|net|io|dev|app|co)[^\s]*/g, " ")
|
|
192
|
+
.replace(/[^a-z0-9\s]+/g, " ")
|
|
193
|
+
.trim();
|
|
194
|
+
const rawTokens = sanitizedTask.split(/\s+/).filter(Boolean);
|
|
195
|
+
const meaningfulTokens = rawTokens.filter((token) => !TASK_FILLER_WORDS.has(token));
|
|
196
|
+
const sourceTokens = meaningfulTokens.length > 0 ? meaningfulTokens : rawTokens;
|
|
197
|
+
const limitedTokens = [];
|
|
198
|
+
let totalLength = 0;
|
|
199
|
+
for (const token of sourceTokens) {
|
|
200
|
+
const nextLength = totalLength === 0 ? token.length : totalLength + 1 + token.length;
|
|
201
|
+
if (limitedTokens.length >= 5 || nextLength > 40) {
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
limitedTokens.push(token);
|
|
205
|
+
totalLength = nextLength;
|
|
206
|
+
}
|
|
207
|
+
return limitedTokens.length > 0 ? limitedTokens : ["generated", "test"];
|
|
208
|
+
}
|
|
209
|
+
function buildOutputNameParts(task) {
|
|
210
|
+
const tokens = buildIntentTokens(task);
|
|
211
|
+
const slug = tokens.join("_");
|
|
212
|
+
const pascal = tokens
|
|
213
|
+
.map((token) => token.charAt(0).toUpperCase() + token.slice(1))
|
|
214
|
+
.join("");
|
|
215
|
+
return { slug, pascal };
|
|
216
|
+
}
|
|
217
|
+
function findExistingDirectory(files, matcher) {
|
|
218
|
+
const existingFile = [...files]
|
|
219
|
+
.sort((a, b) => {
|
|
220
|
+
const aIsPreferred = a.path.startsWith("src/test/resources/features/");
|
|
221
|
+
const bIsPreferred = b.path.startsWith("src/test/resources/features/");
|
|
222
|
+
if (aIsPreferred === bIsPreferred)
|
|
223
|
+
return a.path.localeCompare(b.path);
|
|
224
|
+
return aIsPreferred ? -1 : 1;
|
|
225
|
+
})
|
|
226
|
+
.find(matcher);
|
|
227
|
+
return existingFile ? node_path_1.default.posix.dirname(existingFile.path) : null;
|
|
228
|
+
}
|
|
229
|
+
function buildOutputPaths(task, fw, files) {
|
|
230
|
+
const { slug, pascal } = buildOutputNameParts(task);
|
|
231
|
+
const base = fw.testDir ?? "tests";
|
|
232
|
+
switch (fw.framework) {
|
|
233
|
+
case "playwright_ts":
|
|
234
|
+
return { testFile: `${base}/${slug}.spec.ts` };
|
|
235
|
+
case "playwright_js":
|
|
236
|
+
return { testFile: `${base}/${slug}.spec.js` };
|
|
237
|
+
case "cypress":
|
|
238
|
+
return { testFile: `cypress/e2e/${slug}.cy.ts` };
|
|
239
|
+
case "cucumber_java": {
|
|
240
|
+
const featureDir = findExistingDirectory(files, (file) => file.path.endsWith(".feature")) ??
|
|
241
|
+
fw.testDir ??
|
|
242
|
+
"src/test/resources/features";
|
|
243
|
+
const stepDefinitionDir = findExistingDirectory(files, (file) => file.path.endsWith("Steps.java")) ??
|
|
244
|
+
"src/test/java/com/stepdefinitions";
|
|
245
|
+
return {
|
|
246
|
+
testFile: `${featureDir}/${slug}.feature`,
|
|
247
|
+
featureFile: `${featureDir}/${slug}.feature`,
|
|
248
|
+
stepDefinition: `${stepDefinitionDir}/${pascal}Steps.java`,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
case "selenium_java":
|
|
252
|
+
case "testng":
|
|
253
|
+
return { testFile: `src/test/java/${pascal}Test.java` };
|
|
254
|
+
case "pytest":
|
|
255
|
+
case "selenium_python":
|
|
256
|
+
return { testFile: `tests/test_${slug}.py` };
|
|
257
|
+
default:
|
|
258
|
+
return { testFile: `tests/${slug}.test` };
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
function buildTestEngineerContext(task, framework, files) {
|
|
262
|
+
const safeFiles = Array.isArray(files) ? files : [];
|
|
263
|
+
const existingTestFiles = detectTestFiles(safeFiles, framework);
|
|
264
|
+
const pageObjectFiles = detectPageObjects(safeFiles, framework.language);
|
|
265
|
+
const stepDefinitionFiles = detectStepDefinitions(safeFiles);
|
|
266
|
+
const featureFiles = detectFeatureFiles(safeFiles);
|
|
267
|
+
const configFiles = detectConfigFiles(safeFiles, framework);
|
|
268
|
+
return {
|
|
269
|
+
framework,
|
|
270
|
+
existingTestFiles,
|
|
271
|
+
pageObjectFiles,
|
|
272
|
+
stepDefinitionFiles,
|
|
273
|
+
featureFiles,
|
|
274
|
+
configFiles,
|
|
275
|
+
frameworkSummary: buildFrameworkSummary(framework),
|
|
276
|
+
promptRole: buildPromptRole(framework),
|
|
277
|
+
outputRules: buildOutputRules(framework),
|
|
278
|
+
fileLocationRules: buildFileLocationRules(framework),
|
|
279
|
+
outputPaths: buildOutputPaths(task, framework, safeFiles),
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=testEngineerContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testEngineerContext.js","sourceRoot":"","sources":["../../src/roles/testEngineerContext.ts"],"names":[],"mappings":"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"}
|