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.
Files changed (301) hide show
  1. package/.gittignore +4 -0
  2. package/README.md +36 -0
  3. package/dist/api/server.js +136 -0
  4. package/dist/api/server.js.map +1 -0
  5. package/dist/apply/applyPatchPlan.js +17 -0
  6. package/dist/apply/applyPatchPlan.js.map +1 -0
  7. package/dist/apply/canApplyDecision.js +26 -0
  8. package/dist/apply/canApplyDecision.js.map +1 -0
  9. package/dist/apply/patchPlan.js +3 -0
  10. package/dist/apply/patchPlan.js.map +1 -0
  11. package/dist/apply/renderApplyResult.js +18 -0
  12. package/dist/apply/renderApplyResult.js.map +1 -0
  13. package/dist/apply/runApplyFlow.js +40 -0
  14. package/dist/apply/runApplyFlow.js.map +1 -0
  15. package/dist/apply/types.js +3 -0
  16. package/dist/apply/types.js.map +1 -0
  17. package/dist/audit/auditDiffIntelligence.js +3 -0
  18. package/dist/audit/auditDiffIntelligence.js.map +1 -0
  19. package/dist/audit/auditSnapshot.js +87 -0
  20. package/dist/audit/auditSnapshot.js.map +1 -0
  21. package/dist/audit/renderAuditDiff.js +64 -0
  22. package/dist/audit/renderAuditDiff.js.map +1 -0
  23. package/dist/audit/snapshotDiff.js +53 -0
  24. package/dist/audit/snapshotDiff.js.map +1 -0
  25. package/dist/audit/snapshotReader.js +31 -0
  26. package/dist/audit/snapshotReader.js.map +1 -0
  27. package/dist/audit/snapshotWriter.js +59 -0
  28. package/dist/audit/snapshotWriter.js.map +1 -0
  29. package/dist/ci/evaluateCiResult.js +142 -0
  30. package/dist/ci/evaluateCiResult.js.map +1 -0
  31. package/dist/cli/buildGeneratedPatchPlanPreview.js +65 -0
  32. package/dist/cli/buildGeneratedPatchPlanPreview.js.map +1 -0
  33. package/dist/cli/colors.js +28 -0
  34. package/dist/cli/colors.js.map +1 -0
  35. package/dist/cli/diffOutput.js +37 -0
  36. package/dist/cli/diffOutput.js.map +1 -0
  37. package/dist/cli/index.js +850 -0
  38. package/dist/cli/index.js.map +1 -0
  39. package/dist/cli/loadPatchPlan.js +52 -0
  40. package/dist/cli/loadPatchPlan.js.map +1 -0
  41. package/dist/cli/output.js +34 -0
  42. package/dist/cli/output.js.map +1 -0
  43. package/dist/cli/parseCliArgs.js +3 -0
  44. package/dist/cli/parseCliArgs.js.map +1 -0
  45. package/dist/cli/runGeneratedPatchPlanFlow.js +23 -0
  46. package/dist/cli/runGeneratedPatchPlanFlow.js.map +1 -0
  47. package/dist/components/LoginForm.js +64 -0
  48. package/dist/components/LoginForm.js.map +1 -0
  49. package/dist/core/analyzeCodePatterns.js +3 -0
  50. package/dist/core/analyzeCodePatterns.js.map +1 -0
  51. package/dist/core/applyLlmPatches.js +43 -0
  52. package/dist/core/applyLlmPatches.js.map +1 -0
  53. package/dist/core/buildConfidenceBreakdownFromSignals.js +33 -0
  54. package/dist/core/buildConfidenceBreakdownFromSignals.js.map +1 -0
  55. package/dist/core/buildDecisionAuditSnapshot.js +18 -0
  56. package/dist/core/buildDecisionAuditSnapshot.js.map +1 -0
  57. package/dist/core/buildDecisionTrace.js +113 -0
  58. package/dist/core/buildDecisionTrace.js.map +1 -0
  59. package/dist/core/buildFallbackPatchPlan.js +23 -0
  60. package/dist/core/buildFallbackPatchPlan.js.map +1 -0
  61. package/dist/core/buildFallbackPlan.js +25 -0
  62. package/dist/core/buildFallbackPlan.js.map +1 -0
  63. package/dist/core/buildSchemaAwareContext.js +49 -0
  64. package/dist/core/buildSchemaAwareContext.js.map +1 -0
  65. package/dist/core/buildTaskExecutionContext.js +70 -0
  66. package/dist/core/buildTaskExecutionContext.js.map +1 -0
  67. package/dist/core/ciEvaluator.js +83 -0
  68. package/dist/core/ciEvaluator.js.map +1 -0
  69. package/dist/core/computeRiskScore.js +43 -0
  70. package/dist/core/computeRiskScore.js.map +1 -0
  71. package/dist/core/computeRiskScoreDetails.js +106 -0
  72. package/dist/core/computeRiskScoreDetails.js.map +1 -0
  73. package/dist/core/confidenceGate.js +83 -0
  74. package/dist/core/confidenceGate.js.map +1 -0
  75. package/dist/core/decision/buildDecisionExplanation.js +91 -0
  76. package/dist/core/decision/buildDecisionExplanation.js.map +1 -0
  77. package/dist/core/decision/buildDecisionReasonCodes.js +65 -0
  78. package/dist/core/decision/buildDecisionReasonCodes.js.map +1 -0
  79. package/dist/core/decision/buildReasonSummaryLine.js +24 -0
  80. package/dist/core/decision/buildReasonSummaryLine.js.map +1 -0
  81. package/dist/core/decision/buildRecommendation.js +43 -0
  82. package/dist/core/decision/buildRecommendation.js.map +1 -0
  83. package/dist/core/decision/decideExecutionMode.js +125 -0
  84. package/dist/core/decision/decideExecutionMode.js.map +1 -0
  85. package/dist/core/decision/decisionReasonCodeMeta.js +91 -0
  86. package/dist/core/decision/decisionReasonCodeMeta.js.map +1 -0
  87. package/dist/core/decision/renderDecisionSummary.js +115 -0
  88. package/dist/core/decision/renderDecisionSummary.js.map +1 -0
  89. package/dist/core/detectResourceStorage.js +78 -0
  90. package/dist/core/detectResourceStorage.js.map +1 -0
  91. package/dist/core/formatOutput.js +53 -0
  92. package/dist/core/formatOutput.js.map +1 -0
  93. package/dist/core/intentAwareScore.js +35 -0
  94. package/dist/core/intentAwareScore.js.map +1 -0
  95. package/dist/core/loadSavedAgentResult.js +18 -0
  96. package/dist/core/loadSavedAgentResult.js.map +1 -0
  97. package/dist/core/normalizeIssues.js +50 -0
  98. package/dist/core/normalizeIssues.js.map +1 -0
  99. package/dist/core/normalizeSignals.js +40 -0
  100. package/dist/core/normalizeSignals.js.map +1 -0
  101. package/dist/core/output/zoneStageTypes.js +3 -0
  102. package/dist/core/output/zoneStageTypes.js.map +1 -0
  103. package/dist/core/patchRiskAnalyzer.js +50 -0
  104. package/dist/core/patchRiskAnalyzer.js.map +1 -0
  105. package/dist/core/renderRunAgentResult.js +77 -0
  106. package/dist/core/renderRunAgentResult.js.map +1 -0
  107. package/dist/core/result/buildApplyStageResult.js +61 -0
  108. package/dist/core/result/buildApplyStageResult.js.map +1 -0
  109. package/dist/core/result/buildCliViewModel.js +79 -0
  110. package/dist/core/result/buildCliViewModel.js.map +1 -0
  111. package/dist/core/result/buildConversionStageResult.js +62 -0
  112. package/dist/core/result/buildConversionStageResult.js.map +1 -0
  113. package/dist/core/result/buildDecisionStageResult.js +61 -0
  114. package/dist/core/result/buildDecisionStageResult.js.map +1 -0
  115. package/dist/core/result/buildExecutionResult.js +148 -0
  116. package/dist/core/result/buildExecutionResult.js.map +1 -0
  117. package/dist/core/result/buildPreviewStageResult.js +47 -0
  118. package/dist/core/result/buildPreviewStageResult.js.map +1 -0
  119. package/dist/core/result/buildSavedDecisionExplanation.js +52 -0
  120. package/dist/core/result/buildSavedDecisionExplanation.js.map +1 -0
  121. package/dist/core/result/buildSavedRecommendation.js +39 -0
  122. package/dist/core/result/buildSavedRecommendation.js.map +1 -0
  123. package/dist/core/result/buildStageResultV2.js +52 -0
  124. package/dist/core/result/buildStageResultV2.js.map +1 -0
  125. package/dist/core/result/renderBundledResult.js +47 -0
  126. package/dist/core/result/renderBundledResult.js.map +1 -0
  127. package/dist/core/result/renderCliResult.js +93 -0
  128. package/dist/core/result/renderCliResult.js.map +1 -0
  129. package/dist/core/result/scoreTopRisks.js +205 -0
  130. package/dist/core/result/scoreTopRisks.js.map +1 -0
  131. package/dist/core/runAgent.js +210 -0
  132. package/dist/core/runAgent.js.map +1 -0
  133. package/dist/core/runFeatureAgent.js +684 -0
  134. package/dist/core/runFeatureAgent.js.map +1 -0
  135. package/dist/core/runLlmPatchFlow.js +522 -0
  136. package/dist/core/runLlmPatchFlow.js.map +1 -0
  137. package/dist/core/saveAgentResult.js +234 -0
  138. package/dist/core/saveAgentResult.js.map +1 -0
  139. package/dist/core/scoring/computeConfidenceBreakdown.js +130 -0
  140. package/dist/core/scoring/computeConfidenceBreakdown.js.map +1 -0
  141. package/dist/core/scoring/computeConfidenceScore.js +37 -0
  142. package/dist/core/scoring/computeConfidenceScore.js.map +1 -0
  143. package/dist/core/scoring/confidenceRules.js +58 -0
  144. package/dist/core/scoring/confidenceRules.js.map +1 -0
  145. package/dist/core/scoring/confidenceScore.js +8 -0
  146. package/dist/core/scoring/confidenceScore.js.map +1 -0
  147. package/dist/core/selectRelevantBlocks.js +58 -0
  148. package/dist/core/selectRelevantBlocks.js.map +1 -0
  149. package/dist/core/selfHealingLoop.js +209 -0
  150. package/dist/core/selfHealingLoop.js.map +1 -0
  151. package/dist/core/taskIntentParser.js +165 -0
  152. package/dist/core/taskIntentParser.js.map +1 -0
  153. package/dist/core/types/agentResult.js +3 -0
  154. package/dist/core/types/agentResult.js.map +1 -0
  155. package/dist/core/types/risk.js +3 -0
  156. package/dist/core/types/risk.js.map +1 -0
  157. package/dist/core/validatePatchAgainstSchema.js +100 -0
  158. package/dist/core/validatePatchAgainstSchema.js.map +1 -0
  159. package/dist/core/validateSuggestedArchitecture.js +24 -0
  160. package/dist/core/validateSuggestedArchitecture.js.map +1 -0
  161. package/dist/engine/buildDecisionExplanation.js +114 -0
  162. package/dist/engine/buildDecisionExplanation.js.map +1 -0
  163. package/dist/engine/contradictionDetector.js +40 -0
  164. package/dist/engine/contradictionDetector.js.map +1 -0
  165. package/dist/engine/decisionEngine.js +19 -0
  166. package/dist/engine/decisionEngine.js.map +1 -0
  167. package/dist/llm/openaiClient.js +19 -0
  168. package/dist/llm/openaiClient.js.map +1 -0
  169. package/dist/llm/planFeature.js +57 -0
  170. package/dist/llm/planFeature.js.map +1 -0
  171. package/dist/llm/planFix.js +3 -0
  172. package/dist/llm/planFix.js.map +1 -0
  173. package/dist/llm/planFullPatch.js +62 -0
  174. package/dist/llm/planFullPatch.js.map +1 -0
  175. package/dist/llm/planPatchPreview.js +60 -0
  176. package/dist/llm/planPatchPreview.js.map +1 -0
  177. package/dist/llm/prompts.js +131 -0
  178. package/dist/llm/prompts.js.map +1 -0
  179. package/dist/llm/schemas.js +28 -0
  180. package/dist/llm/schemas.js.map +1 -0
  181. package/dist/patch/apply/formatApplyFlowResult.js +23 -0
  182. package/dist/patch/apply/formatApplyFlowResult.js.map +1 -0
  183. package/dist/patch/apply/renderApplyFlowResult.js +15 -0
  184. package/dist/patch/apply/renderApplyFlowResult.js.map +1 -0
  185. package/dist/patch/apply/runApplyFlow.js +88 -0
  186. package/dist/patch/apply/runApplyFlow.js.map +1 -0
  187. package/dist/patch/applyFlowTypes.js +3 -0
  188. package/dist/patch/applyFlowTypes.js.map +1 -0
  189. package/dist/patch/applyPatchPlan.js +117 -0
  190. package/dist/patch/applyPatchPlan.js.map +1 -0
  191. package/dist/patch/backupFile.js +23 -0
  192. package/dist/patch/backupFile.js.map +1 -0
  193. package/dist/patch/conversion/canConvertGeneratedPlanToPatchPlan.js +57 -0
  194. package/dist/patch/conversion/canConvertGeneratedPlanToPatchPlan.js.map +1 -0
  195. package/dist/patch/conversion/convertGeneratedPlanToPatchPlan.js +38 -0
  196. package/dist/patch/conversion/convertGeneratedPlanToPatchPlan.js.map +1 -0
  197. package/dist/patch/conversion/formatGeneratedPlanConversionFailure.js +17 -0
  198. package/dist/patch/conversion/formatGeneratedPlanConversionFailure.js.map +1 -0
  199. package/dist/patch/conversion/generatedPlanConversionFailureMeta.js +40 -0
  200. package/dist/patch/conversion/generatedPlanConversionFailureMeta.js.map +1 -0
  201. package/dist/patch/conversion/generatedPlanConversionTypes.js +3 -0
  202. package/dist/patch/conversion/generatedPlanConversionTypes.js.map +1 -0
  203. package/dist/patch/conversion/renderGeneratedPlanConversionFailure.js +16 -0
  204. package/dist/patch/conversion/renderGeneratedPlanConversionFailure.js.map +1 -0
  205. package/dist/patch/generatedPlanConversion.js +96 -0
  206. package/dist/patch/generatedPlanConversion.js.map +1 -0
  207. package/dist/patch/patchAnchors.js +3 -0
  208. package/dist/patch/patchAnchors.js.map +1 -0
  209. package/dist/patch/patchValidationRules.js +116 -0
  210. package/dist/patch/patchValidationRules.js.map +1 -0
  211. package/dist/patch/patchValidationTypes.js +3 -0
  212. package/dist/patch/patchValidationTypes.js.map +1 -0
  213. package/dist/patch/renderApplyFlowResult.js +26 -0
  214. package/dist/patch/renderApplyFlowResult.js.map +1 -0
  215. package/dist/patch/validatePatchPlan.js +148 -0
  216. package/dist/patch/validatePatchPlan.js.map +1 -0
  217. package/dist/patch-generation/buildGeneratedPatchPlan.js +94 -0
  218. package/dist/patch-generation/buildGeneratedPatchPlan.js.map +1 -0
  219. package/dist/patch-generation/buildPatchOperations.js +41 -0
  220. package/dist/patch-generation/buildPatchOperations.js.map +1 -0
  221. package/dist/patch-generation/classifyPatchIntent.js +62 -0
  222. package/dist/patch-generation/classifyPatchIntent.js.map +1 -0
  223. package/dist/patch-generation/formatGeneratedPatchPlanPreview.js +25 -0
  224. package/dist/patch-generation/formatGeneratedPatchPlanPreview.js.map +1 -0
  225. package/dist/patch-generation/generatePatchPlan.js +74 -0
  226. package/dist/patch-generation/generatePatchPlan.js.map +1 -0
  227. package/dist/patch-generation/generatedPatchPlanTypes.js +3 -0
  228. package/dist/patch-generation/generatedPatchPlanTypes.js.map +1 -0
  229. package/dist/patch-generation/isIntentAllowed.js +15 -0
  230. package/dist/patch-generation/isIntentAllowed.js.map +1 -0
  231. package/dist/patch-generation/renderGeneratedPatchPlan.js +62 -0
  232. package/dist/patch-generation/renderGeneratedPatchPlan.js.map +1 -0
  233. package/dist/prompts/developerPrompt.js +213 -0
  234. package/dist/prompts/developerPrompt.js.map +1 -0
  235. package/dist/prompts/fullPatchPrompt.js +82 -0
  236. package/dist/prompts/fullPatchPrompt.js.map +1 -0
  237. package/dist/prompts/patchPreviewPrompt.js +83 -0
  238. package/dist/prompts/patchPreviewPrompt.js.map +1 -0
  239. package/dist/prompts/planFeaturePrompt.js +73 -0
  240. package/dist/prompts/planFeaturePrompt.js.map +1 -0
  241. package/dist/prompts/testEngineerContext.js +184 -0
  242. package/dist/prompts/testEngineerContext.js.map +1 -0
  243. package/dist/prompts/testEngineerPrompt.js +135 -0
  244. package/dist/prompts/testEngineerPrompt.js.map +1 -0
  245. package/dist/repo/analyzeProjectPatterns.js +46 -0
  246. package/dist/repo/analyzeProjectPatterns.js.map +1 -0
  247. package/dist/repo/detectProjectStructure.js +45 -0
  248. package/dist/repo/detectProjectStructure.js.map +1 -0
  249. package/dist/repo/getGitChangedFiles.js +96 -0
  250. package/dist/repo/getGitChangedFiles.js.map +1 -0
  251. package/dist/repo/loadSchemaSnapshot.js +29 -0
  252. package/dist/repo/loadSchemaSnapshot.js.map +1 -0
  253. package/dist/repo/rankRelevantFiles.js +306 -0
  254. package/dist/repo/rankRelevantFiles.js.map +1 -0
  255. package/dist/repo/readProjectFiles.js +27 -0
  256. package/dist/repo/readProjectFiles.js.map +1 -0
  257. package/dist/repo/scanRepo.js +93 -0
  258. package/dist/repo/scanRepo.js.map +1 -0
  259. package/dist/repo/validateSuggestedFiles.js +66 -0
  260. package/dist/repo/validateSuggestedFiles.js.map +1 -0
  261. package/dist/roles/dataAnalystContext.js +155 -0
  262. package/dist/roles/dataAnalystContext.js.map +1 -0
  263. package/dist/roles/detectDataSchema.js +152 -0
  264. package/dist/roles/detectDataSchema.js.map +1 -0
  265. package/dist/roles/detectTestComplexity.js +74 -0
  266. package/dist/roles/detectTestComplexity.js.map +1 -0
  267. package/dist/roles/detectTestFramework.js +166 -0
  268. package/dist/roles/detectTestFramework.js.map +1 -0
  269. package/dist/roles/runDataAnalystFlow.js +221 -0
  270. package/dist/roles/runDataAnalystFlow.js.map +1 -0
  271. package/dist/roles/runTestEngineerFlow.js +266 -0
  272. package/dist/roles/runTestEngineerFlow.js.map +1 -0
  273. package/dist/roles/testEngineerContext.js +282 -0
  274. package/dist/roles/testEngineerContext.js.map +1 -0
  275. package/dist/roles/testOutputValidator.js +474 -0
  276. package/dist/roles/testOutputValidator.js.map +1 -0
  277. package/dist/types/agent.js +3 -0
  278. package/dist/types/agent.js.map +1 -0
  279. package/dist/types/analysis.js +3 -0
  280. package/dist/types/analysis.js.map +1 -0
  281. package/dist/types/patch.js +3 -0
  282. package/dist/types/patch.js.map +1 -0
  283. package/dist/types/project.js +3 -0
  284. package/dist/types/project.js.map +1 -0
  285. package/dist/types/schema.js +3 -0
  286. package/dist/types/schema.js.map +1 -0
  287. package/dist/utils/executionTracker.js +33 -0
  288. package/dist/utils/executionTracker.js.map +1 -0
  289. package/dist/utils/files.js +35 -0
  290. package/dist/utils/files.js.map +1 -0
  291. package/dist/utils/logger.js +179 -0
  292. package/dist/utils/logger.js.map +1 -0
  293. package/dist/utils/paths.js +14 -0
  294. package/dist/utils/paths.js.map +1 -0
  295. package/dist/utils/trace.js +10 -0
  296. package/dist/utils/trace.js.map +1 -0
  297. package/dist/utils/validation.js +24 -0
  298. package/dist/utils/validation.js.map +1 -0
  299. package/package.json +53 -0
  300. package/tsconfig.json +17 -0
  301. 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":"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"}
@@ -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"}