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,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildTaskKeywords = buildTaskKeywords;
|
|
4
|
+
exports.buildContextBlocksFromFiles = buildContextBlocksFromFiles;
|
|
5
|
+
exports.buildExecutionContext = buildExecutionContext;
|
|
6
|
+
const taskIntentParser_1 = require("./taskIntentParser");
|
|
7
|
+
const selectRelevantBlocks_1 = require("./selectRelevantBlocks");
|
|
8
|
+
const patchRiskAnalyzer_1 = require("./patchRiskAnalyzer");
|
|
9
|
+
const validateSuggestedArchitecture_1 = require("./validateSuggestedArchitecture");
|
|
10
|
+
const loadSchemaSnapshot_js_1 = require("../repo/loadSchemaSnapshot.js");
|
|
11
|
+
const analyzeProjectPatterns_js_1 = require("../repo/analyzeProjectPatterns.js");
|
|
12
|
+
const detectResourceStorage_js_1 = require("./detectResourceStorage.js");
|
|
13
|
+
const buildSchemaAwareContext_js_1 = require("./buildSchemaAwareContext.js");
|
|
14
|
+
function buildTaskKeywords(task, extra = []) {
|
|
15
|
+
return Array.from(new Set(task
|
|
16
|
+
.toLowerCase()
|
|
17
|
+
.split(/[^a-z0-9_]+/i)
|
|
18
|
+
.filter(Boolean)
|
|
19
|
+
.concat(extra.filter(Boolean))));
|
|
20
|
+
}
|
|
21
|
+
function buildContextBlocksFromFiles(files, keywords) {
|
|
22
|
+
return files.flatMap((file) => (0, selectRelevantBlocks_1.selectRelevantBlocks)({
|
|
23
|
+
filePath: file.path,
|
|
24
|
+
content: file.content,
|
|
25
|
+
keywords,
|
|
26
|
+
maxBlocks: 3
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
async function buildExecutionContext(input) {
|
|
30
|
+
const intent = (0, taskIntentParser_1.parseTaskIntent)(input.task);
|
|
31
|
+
const keywords = buildTaskKeywords(input.task, [
|
|
32
|
+
intent.parentResource ?? "",
|
|
33
|
+
intent.nestedResource ?? "",
|
|
34
|
+
...intent.paramHints
|
|
35
|
+
]);
|
|
36
|
+
const contextBlocks = buildContextBlocksFromFiles(input.candidateFiles, keywords);
|
|
37
|
+
const architectureValidation = (0, validateSuggestedArchitecture_1.validateSuggestedArchitecture)(intent, input.suggestedFiles);
|
|
38
|
+
const patchRisk = input.patchPreview
|
|
39
|
+
? (0, patchRiskAnalyzer_1.analyzePatchRisk)(intent, input.patchPreview)
|
|
40
|
+
: { warnings: [], isHighRisk: false };
|
|
41
|
+
const schemaSnapshot = await (0, loadSchemaSnapshot_js_1.loadSchemaSnapshot)(input.projectRoot);
|
|
42
|
+
const projectPatternAnalysis = (0, analyzeProjectPatterns_js_1.analyzeProjectPatterns)(input.candidateFiles);
|
|
43
|
+
const resourceStorageInsight = intent.parentResource
|
|
44
|
+
? (0, detectResourceStorage_js_1.detectResourceStorage)({
|
|
45
|
+
parentResource: intent.parentResource,
|
|
46
|
+
nestedResource: intent.nestedResource,
|
|
47
|
+
files: input.candidateFiles,
|
|
48
|
+
schema: schemaSnapshot
|
|
49
|
+
})
|
|
50
|
+
: null;
|
|
51
|
+
const schemaAwareContext = (0, buildSchemaAwareContext_js_1.buildSchemaAwareContext)({
|
|
52
|
+
intent,
|
|
53
|
+
schema: schemaSnapshot,
|
|
54
|
+
projectPatterns: projectPatternAnalysis,
|
|
55
|
+
storageInsight: resourceStorageInsight
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
intent,
|
|
59
|
+
keywords,
|
|
60
|
+
contextBlocks,
|
|
61
|
+
architectureWarnings: architectureValidation.warnings,
|
|
62
|
+
patchRiskWarnings: patchRisk.warnings,
|
|
63
|
+
isHighRisk: patchRisk.isHighRisk,
|
|
64
|
+
schemaSnapshot,
|
|
65
|
+
projectPatternAnalysis,
|
|
66
|
+
resourceStorageInsight,
|
|
67
|
+
schemaAwareSummary: schemaAwareContext.summaryLines
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=buildTaskExecutionContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildTaskExecutionContext.js","sourceRoot":"","sources":["../../src/core/buildTaskExecutionContext.ts"],"names":[],"mappings":";;AASA,8CAUC;AAED,kEAYC;AAED,sDA2DC;AA9FD,yDAAqD;AACrD,iEAA8D;AAC9D,2DAAuD;AACvD,mFAAgF;AAChF,yEAAmE;AACnE,iFAA2E;AAC3E,yEAAmE;AACnE,6EAAuE;AAEvE,SAAgB,iBAAiB,CAAC,IAAY,EAAE,QAAkB,EAAE;IAClE,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,GAAG,CACL,IAAI;SACD,WAAW,EAAE;SACb,KAAK,CAAC,cAAc,CAAC;SACrB,MAAM,CAAC,OAAO,CAAC;SACf,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CACjC,CACF,CAAC;AACJ,CAAC;AAED,SAAgB,2BAA2B,CACzC,KAA+C,EAC/C,QAAkB;IAElB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5B,IAAA,2CAAoB,EAAC;QACnB,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ;QACR,SAAS,EAAE,CAAC;KACb,CAAC,CACH,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,KAM3C;IACC,MAAM,MAAM,GAAG,IAAA,kCAAe,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE;QAC7C,MAAM,CAAC,cAAc,IAAI,EAAE;QAC3B,MAAM,CAAC,cAAc,IAAI,EAAE;QAC3B,GAAG,MAAM,CAAC,UAAU;KACrB,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,2BAA2B,CAAC,KAAK,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAElF,MAAM,sBAAsB,GAAG,IAAA,6DAA6B,EAC1D,MAAM,EACN,KAAK,CAAC,cAAc,CACrB,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY;QAClC,CAAC,CAAC,IAAA,oCAAgB,EAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC;QAC9C,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAExC,MAAM,cAAc,GAAG,MAAM,IAAA,0CAAkB,EAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEnE,MAAM,sBAAsB,GAAG,IAAA,kDAAsB,EAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAE5E,MAAM,sBAAsB,GAAG,MAAM,CAAC,cAAc;QAClD,CAAC,CAAC,IAAA,gDAAqB,EAAC;YACpB,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,KAAK,EAAE,KAAK,CAAC,cAAc;YAC3B,MAAM,EAAE,cAAc;SACvB,CAAC;QACJ,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,kBAAkB,GAAG,IAAA,oDAAuB,EAAC;QACjD,MAAM;QACN,MAAM,EAAE,cAAc;QACtB,eAAe,EAAE,sBAAsB;QACvC,cAAc,EAAE,sBAAsB;KACvC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QACN,QAAQ;QACR,aAAa;QACb,oBAAoB,EAAE,sBAAsB,CAAC,QAAQ;QACrD,iBAAiB,EAAE,SAAS,CAAC,QAAQ;QACrC,UAAU,EAAE,SAAS,CAAC,UAAU;QAEhC,cAAc;QACd,sBAAsB;QACtB,sBAAsB;QACtB,kBAAkB,EAAE,kBAAkB,CAAC,YAAY;KACpD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.evaluateFeatureAgentForCi = evaluateFeatureAgentForCi;
|
|
4
|
+
exports.printCiAnnotations = printCiAnnotations;
|
|
5
|
+
function formatIssue(issue) {
|
|
6
|
+
const filePart = issue.file ? ` [${issue.file}]` : "";
|
|
7
|
+
return `[${issue.severity}] ${issue.message}${filePart}`;
|
|
8
|
+
}
|
|
9
|
+
function collectTopAnnotations(result) {
|
|
10
|
+
const annotations = [];
|
|
11
|
+
for (const issue of result.patchValidationIssues.slice(0, 3)) {
|
|
12
|
+
annotations.push(formatIssue(issue));
|
|
13
|
+
}
|
|
14
|
+
for (const issue of result.schemaPatchWarnings.slice(0, 3)) {
|
|
15
|
+
annotations.push(formatIssue(issue));
|
|
16
|
+
}
|
|
17
|
+
for (const warning of result.patchRiskWarnings.slice(0, 2)) {
|
|
18
|
+
annotations.push(warning);
|
|
19
|
+
}
|
|
20
|
+
for (const warning of result.architectureWarnings.slice(0, 2)) {
|
|
21
|
+
annotations.push(warning);
|
|
22
|
+
}
|
|
23
|
+
const missingFiles = result.validatedSuggestedFiles
|
|
24
|
+
.filter((file) => file.status === "missing")
|
|
25
|
+
.slice(0, 2)
|
|
26
|
+
.map((file) => `Missing suggested file: ${file.originalPath}`);
|
|
27
|
+
annotations.push(...missingFiles);
|
|
28
|
+
return [...new Set(annotations)];
|
|
29
|
+
}
|
|
30
|
+
function buildSummary(result) {
|
|
31
|
+
return [
|
|
32
|
+
`decision=${result.decision.mode}`,
|
|
33
|
+
`confidence=${result.confidence.finalScore}`,
|
|
34
|
+
`patches=${result.patchPlan.patches.length}`,
|
|
35
|
+
`warnings=${collectTopAnnotations(result).length}`,
|
|
36
|
+
`relevant=${result.relevantFiles.length}`,
|
|
37
|
+
`suggested=${result.validatedSuggestedFiles.length}`
|
|
38
|
+
].join(" | ");
|
|
39
|
+
}
|
|
40
|
+
function evaluateFeatureAgentForCi(result) {
|
|
41
|
+
const annotations = collectTopAnnotations(result);
|
|
42
|
+
const summary = buildSummary(result);
|
|
43
|
+
if (result.decision.mode === "blocked") {
|
|
44
|
+
return {
|
|
45
|
+
outcome: "fail",
|
|
46
|
+
exitCode: 1,
|
|
47
|
+
shouldFail: true,
|
|
48
|
+
title: "Feature agent blocked",
|
|
49
|
+
summary,
|
|
50
|
+
annotations
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
if (result.decision.mode === "preview_only") {
|
|
54
|
+
return {
|
|
55
|
+
outcome: "warn",
|
|
56
|
+
exitCode: 0,
|
|
57
|
+
shouldFail: false,
|
|
58
|
+
title: "Feature agent requires review",
|
|
59
|
+
summary,
|
|
60
|
+
annotations
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
outcome: "pass",
|
|
65
|
+
exitCode: 0,
|
|
66
|
+
shouldFail: false,
|
|
67
|
+
title: "Feature agent approved",
|
|
68
|
+
summary,
|
|
69
|
+
annotations
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function printCiAnnotations(evaluation) {
|
|
73
|
+
const prefix = evaluation.outcome === "fail"
|
|
74
|
+
? "::error::"
|
|
75
|
+
: evaluation.outcome === "warn"
|
|
76
|
+
? "::warning::"
|
|
77
|
+
: "::notice::";
|
|
78
|
+
console.log(`${prefix}${evaluation.title} | ${evaluation.summary}`);
|
|
79
|
+
for (const annotation of evaluation.annotations) {
|
|
80
|
+
console.log(`${prefix}${annotation}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=ciEvaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ciEvaluator.js","sourceRoot":"","sources":["../../src/core/ciEvaluator.ts"],"names":[],"mappings":";;AAmDA,8DAoCC;AAED,gDAaC;AAhGD,SAAS,WAAW,CAAC,KAAsB;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,GAAG,QAAQ,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,qBAAqB,CAAC,MAA0B;IACvD,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7D,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC3D,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC3D,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC9D,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,uBAAuB;SAChD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;SAC3C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,2BAA2B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAEjE,WAAW,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IAElC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,MAA0B;IAC9C,OAAO;QACL,YAAY,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;QAClC,cAAc,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE;QAC5C,WAAW,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE;QAC5C,YAAY,qBAAqB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;QAClD,YAAY,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE;QACzC,aAAa,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE;KACrD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChB,CAAC;AAED,SAAgB,yBAAyB,CACvC,MAA0B;IAE1B,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO;YACL,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,CAAC;YACX,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,uBAAuB;YAC9B,OAAO;YACP,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5C,OAAO;YACL,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,CAAC;YACX,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,+BAA+B;YACtC,OAAO;YACP,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,wBAAwB;QAC/B,OAAO;QACP,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAAC,UAA8B;IAC/D,MAAM,MAAM,GACV,UAAU,CAAC,OAAO,KAAK,MAAM;QAC3B,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,UAAU,CAAC,OAAO,KAAK,MAAM;YAC7B,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,YAAY,CAAC;IAErB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,UAAU,CAAC,KAAK,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAEpE,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,UAAU,EAAE,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.computeRiskScore = computeRiskScore;
|
|
4
|
+
const computeRiskScoreDetails_js_1 = require("./computeRiskScoreDetails.js");
|
|
5
|
+
function computeRiskScore(input) {
|
|
6
|
+
const task = typeof input === "string" ? input : input.task;
|
|
7
|
+
const role = typeof input === "string" ? undefined : input.role;
|
|
8
|
+
const details = (0, computeRiskScoreDetails_js_1.computeRiskScoreDetails)({ task });
|
|
9
|
+
// Role-aware schema penalty adjustment:
|
|
10
|
+
// test_engineer: writing tests is not a schema risk
|
|
11
|
+
// data_analyst: schema changes are expected, handled separately
|
|
12
|
+
const schemaScore = role === "test_engineer" || role === "data_analyst" || role === "developer"
|
|
13
|
+
? 0
|
|
14
|
+
: details.riskBreakdown.schema;
|
|
15
|
+
const signals = [];
|
|
16
|
+
if (details.riskBreakdown.destructive > 0)
|
|
17
|
+
signals.push("destructive");
|
|
18
|
+
if (schemaScore > 0)
|
|
19
|
+
signals.push("schema");
|
|
20
|
+
if (details.riskBreakdown.critical > 0)
|
|
21
|
+
signals.push("critical_domain");
|
|
22
|
+
if (details.riskBreakdown.lowRisk < 0)
|
|
23
|
+
signals.push("low_risk");
|
|
24
|
+
if (details.riskBreakdown.massScope > 0)
|
|
25
|
+
signals.push("mass_scope");
|
|
26
|
+
const adjustedScore = Math.max(0, Math.min(100, details.riskBreakdown.destructive +
|
|
27
|
+
schemaScore +
|
|
28
|
+
details.riskBreakdown.critical +
|
|
29
|
+
details.riskBreakdown.lowRisk +
|
|
30
|
+
details.riskBreakdown.massScope));
|
|
31
|
+
return {
|
|
32
|
+
score: adjustedScore,
|
|
33
|
+
signals,
|
|
34
|
+
breakdown: {
|
|
35
|
+
destructive: details.riskBreakdown.destructive,
|
|
36
|
+
schema: schemaScore,
|
|
37
|
+
critical: details.riskBreakdown.critical,
|
|
38
|
+
lowRisk: details.riskBreakdown.lowRisk,
|
|
39
|
+
massScope: details.riskBreakdown.massScope,
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=computeRiskScore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeRiskScore.js","sourceRoot":"","sources":["../../src/core/computeRiskScore.ts"],"names":[],"mappings":";;AA0BA,4CA+CC;AAzED,6EAAuE;AA0BvE,SAAgB,gBAAgB,CAC9B,KAAqC;IAErC,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5D,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAEhE,MAAM,OAAO,GAAG,IAAA,oDAAuB,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,wCAAwC;IACxC,oDAAoD;IACpD,gEAAgE;IAClE,MAAM,WAAW,GACf,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,WAAW;QACzE,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC;IAEjC,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,IAAI,OAAO,CAAC,aAAa,CAAC,WAAW,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACvE,IAAI,WAAW,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEpE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAC5B,CAAC,EACD,IAAI,CAAC,GAAG,CACN,GAAG,EACH,OAAO,CAAC,aAAa,CAAC,WAAW;QAC/B,WAAW;QACX,OAAO,CAAC,aAAa,CAAC,QAAQ;QAC9B,OAAO,CAAC,aAAa,CAAC,OAAO;QAC7B,OAAO,CAAC,aAAa,CAAC,SAAS,CAClC,CACF,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,aAAa;QACpB,OAAO;QACP,SAAS,EAAE;YACT,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,WAAW;YAC9C,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,QAAQ;YACxC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO;YACtC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,SAAS;SAC3C;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.computeRiskScoreDetails = computeRiskScoreDetails;
|
|
4
|
+
function clampScore(value) {
|
|
5
|
+
if (value < 0)
|
|
6
|
+
return 0;
|
|
7
|
+
if (value > 100)
|
|
8
|
+
return 100;
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
function includesAny(text, keywords) {
|
|
12
|
+
return keywords.some((keyword) => text.includes(keyword));
|
|
13
|
+
}
|
|
14
|
+
function computeRiskScoreDetails(input) {
|
|
15
|
+
const normalizedTask = input.task.trim().toLowerCase();
|
|
16
|
+
const hasDestructiveSignal = includesAny(normalizedTask, [
|
|
17
|
+
"delete",
|
|
18
|
+
"drop",
|
|
19
|
+
"remove",
|
|
20
|
+
"destroy",
|
|
21
|
+
"truncate"
|
|
22
|
+
]);
|
|
23
|
+
const hasSchemaSignal = includesAny(normalizedTask, [
|
|
24
|
+
"schema",
|
|
25
|
+
"migration",
|
|
26
|
+
"migrate",
|
|
27
|
+
"database",
|
|
28
|
+
"db",
|
|
29
|
+
"column",
|
|
30
|
+
"columns",
|
|
31
|
+
"table",
|
|
32
|
+
"tables",
|
|
33
|
+
"field",
|
|
34
|
+
"fields",
|
|
35
|
+
"model",
|
|
36
|
+
"models"
|
|
37
|
+
]);
|
|
38
|
+
const hasCriticalSignal = includesAny(normalizedTask, [
|
|
39
|
+
"auth",
|
|
40
|
+
"authentication",
|
|
41
|
+
"authorization",
|
|
42
|
+
"billing",
|
|
43
|
+
"payment",
|
|
44
|
+
"payments",
|
|
45
|
+
"permission",
|
|
46
|
+
"permissions",
|
|
47
|
+
"security",
|
|
48
|
+
"jwt",
|
|
49
|
+
"token",
|
|
50
|
+
"production"
|
|
51
|
+
]);
|
|
52
|
+
const hasLowRiskSignal = includesAny(normalizedTask, [
|
|
53
|
+
"copy",
|
|
54
|
+
"text",
|
|
55
|
+
"rename",
|
|
56
|
+
"comment",
|
|
57
|
+
"docs",
|
|
58
|
+
"readme"
|
|
59
|
+
]);
|
|
60
|
+
const hasMassScopeSignal = includesAny(normalizedTask, [
|
|
61
|
+
"delete all",
|
|
62
|
+
"drop all",
|
|
63
|
+
"remove all",
|
|
64
|
+
"truncate",
|
|
65
|
+
"wipe",
|
|
66
|
+
"purge",
|
|
67
|
+
"flush",
|
|
68
|
+
"delete everything",
|
|
69
|
+
"delete every"
|
|
70
|
+
]);
|
|
71
|
+
const riskBreakdown = {
|
|
72
|
+
destructive: hasDestructiveSignal ? 50 : 0,
|
|
73
|
+
schema: hasSchemaSignal ? 25 : 0,
|
|
74
|
+
critical: hasCriticalSignal ? 20 : 0,
|
|
75
|
+
lowRisk: hasLowRiskSignal ? -20 : 0,
|
|
76
|
+
massScope: hasMassScopeSignal ? 25 : 0
|
|
77
|
+
};
|
|
78
|
+
const rawScore = riskBreakdown.destructive +
|
|
79
|
+
riskBreakdown.schema +
|
|
80
|
+
riskBreakdown.critical +
|
|
81
|
+
riskBreakdown.lowRisk +
|
|
82
|
+
riskBreakdown.massScope;
|
|
83
|
+
const riskScore = clampScore(rawScore);
|
|
84
|
+
const detectedSignals = [];
|
|
85
|
+
if (hasDestructiveSignal) {
|
|
86
|
+
detectedSignals.push("destructive");
|
|
87
|
+
}
|
|
88
|
+
if (hasSchemaSignal) {
|
|
89
|
+
detectedSignals.push("schema_change");
|
|
90
|
+
}
|
|
91
|
+
if (hasCriticalSignal) {
|
|
92
|
+
detectedSignals.push("critical_domain");
|
|
93
|
+
}
|
|
94
|
+
if (hasLowRiskSignal) {
|
|
95
|
+
detectedSignals.push("low_risk");
|
|
96
|
+
}
|
|
97
|
+
if (hasMassScopeSignal) {
|
|
98
|
+
detectedSignals.push("mass_scope");
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
riskScore,
|
|
102
|
+
riskBreakdown,
|
|
103
|
+
detectedSignals
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=computeRiskScoreDetails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeRiskScoreDetails.js","sourceRoot":"","sources":["../../src/core/computeRiskScoreDetails.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkConfidenceGate = checkConfidenceGate;
|
|
4
|
+
exports.renderConfidenceGateBlock = renderConfidenceGateBlock;
|
|
5
|
+
const THRESHOLDS = {
|
|
6
|
+
developer: 60,
|
|
7
|
+
test_engineer: 50,
|
|
8
|
+
data_analyst: 70,
|
|
9
|
+
default: 60,
|
|
10
|
+
};
|
|
11
|
+
const ROLE_RISK_DESCRIPTIONS = {
|
|
12
|
+
developer: [
|
|
13
|
+
"Low confidence may indicate unclear task scope",
|
|
14
|
+
"Existing code patterns may not be well understood",
|
|
15
|
+
"Generated code may not follow project conventions",
|
|
16
|
+
],
|
|
17
|
+
test_engineer: [
|
|
18
|
+
"Test framework may not be fully detected",
|
|
19
|
+
"Page object method names may be inaccurate",
|
|
20
|
+
"Test file paths may not match project structure",
|
|
21
|
+
],
|
|
22
|
+
data_analyst: [
|
|
23
|
+
"Schema changes are irreversible without a backup",
|
|
24
|
+
"Column types may not match existing data",
|
|
25
|
+
"Foreign key constraints may be violated",
|
|
26
|
+
],
|
|
27
|
+
};
|
|
28
|
+
function getThreshold(role) {
|
|
29
|
+
if (!role)
|
|
30
|
+
return THRESHOLDS.default;
|
|
31
|
+
return THRESHOLDS[role] ?? THRESHOLDS.default;
|
|
32
|
+
}
|
|
33
|
+
function getRisks(role, warnings) {
|
|
34
|
+
const roleRisks = ROLE_RISK_DESCRIPTIONS[role ?? "developer"] ??
|
|
35
|
+
ROLE_RISK_DESCRIPTIONS["developer"];
|
|
36
|
+
const warningRisks = (warnings ?? [])
|
|
37
|
+
.filter(Boolean)
|
|
38
|
+
.map(w => `Warning: ${w}`);
|
|
39
|
+
return [...roleRisks, ...warningRisks];
|
|
40
|
+
}
|
|
41
|
+
function getRecommendation(confidenceScore, threshold, role) {
|
|
42
|
+
const gap = threshold - confidenceScore;
|
|
43
|
+
if (gap > 30) {
|
|
44
|
+
return "Confidence is too low to proceed safely. " +
|
|
45
|
+
"Provide more context in your task description, " +
|
|
46
|
+
"or manually specify the target files.";
|
|
47
|
+
}
|
|
48
|
+
if (role === "test_engineer") {
|
|
49
|
+
return "Review the detected framework and page objects before applying. " +
|
|
50
|
+
"Consider running with --verbose to see what was detected.";
|
|
51
|
+
}
|
|
52
|
+
if (role === "data_analyst") {
|
|
53
|
+
return "Review the generated SQL carefully before applying. " +
|
|
54
|
+
"Ensure a database backup exists before running migrations.";
|
|
55
|
+
}
|
|
56
|
+
return "Review the patch preview carefully before applying. " +
|
|
57
|
+
"Consider using --format detailed to see full output.";
|
|
58
|
+
}
|
|
59
|
+
function checkConfidenceGate(input) {
|
|
60
|
+
const threshold = getThreshold(input.role);
|
|
61
|
+
if (input.confidenceScore >= threshold) {
|
|
62
|
+
return { pass: true };
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
pass: false,
|
|
66
|
+
reason: `Confidence score ${input.confidenceScore} is below the ${input.role ?? "default"} threshold of ${threshold}.`,
|
|
67
|
+
risks: getRisks(input.role, input.warnings),
|
|
68
|
+
recommendation: getRecommendation(input.confidenceScore, threshold, input.role),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function renderConfidenceGateBlock(result) {
|
|
72
|
+
const lines = [];
|
|
73
|
+
lines.push("=== CONFIDENCE GATE ===");
|
|
74
|
+
lines.push(`Status: BLOCKED`);
|
|
75
|
+
lines.push(`Reason: ${result.reason}`);
|
|
76
|
+
lines.push("");
|
|
77
|
+
lines.push("Risks:");
|
|
78
|
+
result.risks.forEach(r => lines.push(`- ${r}`));
|
|
79
|
+
lines.push("");
|
|
80
|
+
lines.push(`Recommendation: ${result.recommendation}`);
|
|
81
|
+
return lines.join("\n");
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=confidenceGate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidenceGate.js","sourceRoot":"","sources":["../../src/core/confidenceGate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildDecisionExplanation = buildDecisionExplanation;
|
|
4
|
+
const buildReasonSummaryLine_js_1 = require("./buildReasonSummaryLine.js");
|
|
5
|
+
function countReasonsBySeverity(reasons) {
|
|
6
|
+
return reasons.reduce((acc, reason) => {
|
|
7
|
+
if (reason.severity === "critical")
|
|
8
|
+
acc.critical += 1;
|
|
9
|
+
else if (reason.severity === "warning")
|
|
10
|
+
acc.warning += 1;
|
|
11
|
+
else
|
|
12
|
+
acc.info += 1;
|
|
13
|
+
return acc;
|
|
14
|
+
}, { critical: 0, warning: 0, info: 0 });
|
|
15
|
+
}
|
|
16
|
+
function countSeriousRisks(topRisks) {
|
|
17
|
+
if (!topRisks || topRisks.length === 0) {
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
return topRisks.filter((risk) => risk.severity === "high" || risk.severity === "medium").length;
|
|
21
|
+
}
|
|
22
|
+
function buildModeLead(result) {
|
|
23
|
+
switch (result.mode) {
|
|
24
|
+
case "blocked":
|
|
25
|
+
return "Decision was set to BLOCKED because blocking validation signals were detected.";
|
|
26
|
+
case "preview_only":
|
|
27
|
+
return "Decision was set to PREVIEW ONLY because manual review is still required.";
|
|
28
|
+
case "safe_to_apply":
|
|
29
|
+
return "Decision was set to SAFE TO APPLY because no blocking execution risks were detected.";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function buildReasonSummary(result) {
|
|
33
|
+
const counts = countReasonsBySeverity(result.reasons);
|
|
34
|
+
const lines = [];
|
|
35
|
+
if (counts.critical > 0) {
|
|
36
|
+
lines.push(`- ${counts.critical} critical reason(s) affected the decision`);
|
|
37
|
+
}
|
|
38
|
+
if (counts.warning > 0) {
|
|
39
|
+
lines.push(`- ${counts.warning} warning-level reason(s) affected the decision`);
|
|
40
|
+
}
|
|
41
|
+
if (counts.info > 0 && result.mode === "safe_to_apply") {
|
|
42
|
+
lines.push(`- ${counts.info} informational confirmation reason(s) were recorded`);
|
|
43
|
+
}
|
|
44
|
+
const seriousRiskCount = countSeriousRisks(result.topRisks);
|
|
45
|
+
if (seriousRiskCount > 0) {
|
|
46
|
+
lines.push(`- ${seriousRiskCount} medium/high top risk(s) remain visible in the result`);
|
|
47
|
+
}
|
|
48
|
+
return lines;
|
|
49
|
+
}
|
|
50
|
+
function buildClosingLine(result) {
|
|
51
|
+
switch (result.mode) {
|
|
52
|
+
case "blocked":
|
|
53
|
+
return "Automatic apply is not recommended until blocking issues are resolved.";
|
|
54
|
+
case "preview_only":
|
|
55
|
+
return "Automatic apply is not recommended until review is completed.";
|
|
56
|
+
case "safe_to_apply":
|
|
57
|
+
return "Automatic apply can proceed under the current safeguards.";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function assertReasonCodeParity(reasons, reasonCodes) {
|
|
61
|
+
if (!reasonCodes || reasonCodes.length === 0) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const reasonSequence = reasons.map((reason) => String(reason.code));
|
|
65
|
+
let searchStartIndex = 0;
|
|
66
|
+
for (const code of reasonCodes) {
|
|
67
|
+
const matchedIndex = reasonSequence.indexOf(String(code), searchStartIndex);
|
|
68
|
+
if (matchedIndex === -1) {
|
|
69
|
+
throw new Error("DECISION_EXPLANATION_REASON_MISMATCH");
|
|
70
|
+
}
|
|
71
|
+
searchStartIndex = matchedIndex + 1;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function buildDecisionExplanation(result, options = {}) {
|
|
75
|
+
assertReasonCodeParity(result.reasons, options.reasonCodes);
|
|
76
|
+
const lines = [];
|
|
77
|
+
lines.push(buildModeLead(result));
|
|
78
|
+
if (options.reasonCodes && options.reasonCodes.length > 0) {
|
|
79
|
+
lines.push("");
|
|
80
|
+
lines.push((0, buildReasonSummaryLine_js_1.buildReasonSummaryLine)(options.reasonCodes));
|
|
81
|
+
}
|
|
82
|
+
const summaryLines = buildReasonSummary(result);
|
|
83
|
+
if (summaryLines.length > 0) {
|
|
84
|
+
lines.push("");
|
|
85
|
+
lines.push(...summaryLines);
|
|
86
|
+
}
|
|
87
|
+
lines.push("");
|
|
88
|
+
lines.push(buildClosingLine(result));
|
|
89
|
+
return lines.join("\n");
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=buildDecisionExplanation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildDecisionExplanation.js","sourceRoot":"","sources":["../../../src/core/decision/buildDecisionExplanation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildDecisionReasonCodes = buildDecisionReasonCodes;
|
|
4
|
+
const REASON_CODE_PRIORITY = [
|
|
5
|
+
"BLOCKED_DESTRUCTIVE_OPERATION",
|
|
6
|
+
"BLOCKED_SCHEMA_RISK",
|
|
7
|
+
"BLOCKED_CRITICAL_RISK",
|
|
8
|
+
"BLOCKED_HIGH_RISK_SCORE",
|
|
9
|
+
"PREVIEW_DESTRUCTIVE_SIGNAL",
|
|
10
|
+
"PREVIEW_SCHEMA_UNCERTAINTY",
|
|
11
|
+
"PREVIEW_CRITICAL_SIGNAL",
|
|
12
|
+
"PREVIEW_MASS_SCOPE_CHANGE",
|
|
13
|
+
"PREVIEW_LOW_CONFIDENCE",
|
|
14
|
+
"SAFE_LOW_RISK_LOCALIZED",
|
|
15
|
+
"SAFE_HIGH_CONFIDENCE"
|
|
16
|
+
];
|
|
17
|
+
function getReasonCodePriority(code) {
|
|
18
|
+
const index = REASON_CODE_PRIORITY.indexOf(code);
|
|
19
|
+
return index === -1 ? Number.MAX_SAFE_INTEGER : index;
|
|
20
|
+
}
|
|
21
|
+
function buildDecisionReasonCodes(input) {
|
|
22
|
+
const codes = new Set();
|
|
23
|
+
const signalTypes = new Set(input.normalizedSignals.map((signal) => signal.type));
|
|
24
|
+
if (input.mode === "blocked") {
|
|
25
|
+
if (signalTypes.has("destructive")) {
|
|
26
|
+
codes.add("BLOCKED_DESTRUCTIVE_OPERATION");
|
|
27
|
+
}
|
|
28
|
+
if (signalTypes.has("schema")) {
|
|
29
|
+
codes.add("BLOCKED_SCHEMA_RISK");
|
|
30
|
+
}
|
|
31
|
+
if (signalTypes.has("critical")) {
|
|
32
|
+
codes.add("BLOCKED_CRITICAL_RISK");
|
|
33
|
+
}
|
|
34
|
+
if (input.riskScore >= 70) {
|
|
35
|
+
codes.add("BLOCKED_HIGH_RISK_SCORE");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (input.mode === "preview_only") {
|
|
39
|
+
if (signalTypes.has("destructive")) {
|
|
40
|
+
codes.add("PREVIEW_DESTRUCTIVE_SIGNAL");
|
|
41
|
+
}
|
|
42
|
+
if (signalTypes.has("schema")) {
|
|
43
|
+
codes.add("PREVIEW_SCHEMA_UNCERTAINTY");
|
|
44
|
+
}
|
|
45
|
+
if (signalTypes.has("critical")) {
|
|
46
|
+
codes.add("PREVIEW_CRITICAL_SIGNAL");
|
|
47
|
+
}
|
|
48
|
+
if (signalTypes.has("massScope")) {
|
|
49
|
+
codes.add("PREVIEW_MASS_SCOPE_CHANGE");
|
|
50
|
+
}
|
|
51
|
+
if (input.confidenceScore < 70) {
|
|
52
|
+
codes.add("PREVIEW_LOW_CONFIDENCE");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (input.mode === "safe_to_apply") {
|
|
56
|
+
if (signalTypes.has("lowRisk")) {
|
|
57
|
+
codes.add("SAFE_LOW_RISK_LOCALIZED");
|
|
58
|
+
}
|
|
59
|
+
if (input.confidenceScore >= 80) {
|
|
60
|
+
codes.add("SAFE_HIGH_CONFIDENCE");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return [...codes].sort((left, right) => getReasonCodePriority(left) - getReasonCodePriority(right));
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=buildDecisionReasonCodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildDecisionReasonCodes.js","sourceRoot":"","sources":["../../../src/core/decision/buildDecisionReasonCodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildReasonSummaryLine = buildReasonSummaryLine;
|
|
4
|
+
const decisionReasonCodeMeta_js_1 = require("./decisionReasonCodeMeta.js");
|
|
5
|
+
function buildReasonSummaryLine(reasonCodes) {
|
|
6
|
+
const uniqueCodes = [...new Set(reasonCodes)];
|
|
7
|
+
if (uniqueCodes.length === 0) {
|
|
8
|
+
return "Why: no explicit decision reasons.";
|
|
9
|
+
}
|
|
10
|
+
const details = (0, decisionReasonCodeMeta_js_1.buildDecisionReasonDetails)([...uniqueCodes]).filter((detail) => Boolean(detail));
|
|
11
|
+
if (details.length === 0) {
|
|
12
|
+
return "Why: no explicit decision reasons.";
|
|
13
|
+
}
|
|
14
|
+
const summaries = details.map((detail) => normalizeSummary(detail.summary));
|
|
15
|
+
return `Why: ${summaries.join("; ")}.`;
|
|
16
|
+
}
|
|
17
|
+
function normalizeSummary(summary) {
|
|
18
|
+
const trimmed = summary.trim();
|
|
19
|
+
if (trimmed.length === 0) {
|
|
20
|
+
return "unspecified reason";
|
|
21
|
+
}
|
|
22
|
+
return trimmed.endsWith(".") ? trimmed.slice(0, -1) : trimmed;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=buildReasonSummaryLine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildReasonSummaryLine.js","sourceRoot":"","sources":["../../../src/core/decision/buildReasonSummaryLine.ts"],"names":[],"mappings":";;AAKA,wDAmBC;AAxBD,2EAGqC;AAErC,SAAgB,sBAAsB,CACpC,WAA0C;IAE1C,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IAE9C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,oCAAoC,CAAC;IAC9C,CAAC;IAEF,MAAM,OAAO,GAAG,IAAA,sDAA0B,EAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAClE,CAAC,MAAM,EAAiD,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAC3E,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,oCAAoC,CAAC;IAC9C,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,OAAO,QAAQ,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACzC,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAChE,CAAC"}
|