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
package/.gittignore
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Zone ⚡
|
|
2
|
+
> AI Code Agent — deterministic, explainable, safe
|
|
3
|
+
|
|
4
|
+
## Install
|
|
5
|
+
```bash
|
|
6
|
+
npm install -g zone
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
```bash
|
|
11
|
+
# Test Engineer — write tests for any framework
|
|
12
|
+
zone --task "write a cucumber scenario for flight search" --role test_engineer --repo /path/to/repo --apply --confirm-apply
|
|
13
|
+
|
|
14
|
+
# Data Analyst — generate SQL migrations
|
|
15
|
+
zone --task "create a users table with email and created_at" --role data_analyst --repo /path/to/repo --apply --confirm-apply
|
|
16
|
+
|
|
17
|
+
# Developer — modify existing code
|
|
18
|
+
zone --task "add input validation to login form" --repo /path/to/repo
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Supported Frameworks
|
|
22
|
+
- Test Engineer: Playwright (TS/JS), Cypress, Cucumber+Java, Selenium, TestNG, pytest
|
|
23
|
+
- Data Analyst: PostgreSQL, MySQL, SQLite — Flyway, raw SQL, Alembic
|
|
24
|
+
|
|
25
|
+
## Web UI
|
|
26
|
+
```bash
|
|
27
|
+
npx tsx src/api/server.ts
|
|
28
|
+
# Open http://localhost:3000
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Start Web UI
|
|
32
|
+
```bash
|
|
33
|
+
zone serve
|
|
34
|
+
zone serve --port 8080
|
|
35
|
+
zone serve --open
|
|
36
|
+
```
|
|
@@ -0,0 +1,136 @@
|
|
|
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.app = void 0;
|
|
7
|
+
exports.startServer = startServer;
|
|
8
|
+
require("dotenv/config");
|
|
9
|
+
const express_1 = __importDefault(require("express"));
|
|
10
|
+
const cors_1 = __importDefault(require("cors"));
|
|
11
|
+
const body_parser_1 = __importDefault(require("body-parser"));
|
|
12
|
+
const runAgent_js_1 = require("../core/runAgent.js");
|
|
13
|
+
const runLlmPatchFlow_js_1 = require("../core/runLlmPatchFlow.js");
|
|
14
|
+
const applyLlmPatches_js_1 = require("../core/applyLlmPatches.js");
|
|
15
|
+
const runTestEngineerFlow_js_1 = require("../roles/runTestEngineerFlow.js");
|
|
16
|
+
const runDataAnalystFlow_js_1 = require("../roles/runDataAnalystFlow.js");
|
|
17
|
+
const colors_js_1 = require("../cli/colors.js");
|
|
18
|
+
exports.app = (0, express_1.default)();
|
|
19
|
+
const PORT = process.env.PORT || 3000;
|
|
20
|
+
const progressStreams = new Map();
|
|
21
|
+
exports.app.use((0, cors_1.default)());
|
|
22
|
+
exports.app.use(body_parser_1.default.json());
|
|
23
|
+
exports.app.use(body_parser_1.default.urlencoded({ extended: true }));
|
|
24
|
+
function emitProgress(runId, stage) {
|
|
25
|
+
if (!runId)
|
|
26
|
+
return;
|
|
27
|
+
const listeners = progressStreams.get(runId);
|
|
28
|
+
if (!listeners)
|
|
29
|
+
return;
|
|
30
|
+
const payload = `data: ${JSON.stringify({ stage })}\n\n`;
|
|
31
|
+
for (const res of listeners) {
|
|
32
|
+
res.write(payload);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.app.get("/api/progress", (req, res) => {
|
|
36
|
+
const runId = typeof req.query.runId === "string" ? req.query.runId : "";
|
|
37
|
+
if (!runId) {
|
|
38
|
+
res.status(400).end();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
res.setHeader("Content-Type", "text/event-stream");
|
|
42
|
+
res.setHeader("Cache-Control", "no-cache, no-transform");
|
|
43
|
+
res.setHeader("Connection", "keep-alive");
|
|
44
|
+
res.flushHeaders?.();
|
|
45
|
+
res.write(`data: ${JSON.stringify({ stage: "Connected" })}\n\n`);
|
|
46
|
+
const listeners = progressStreams.get(runId) ?? new Set();
|
|
47
|
+
listeners.add(res);
|
|
48
|
+
progressStreams.set(runId, listeners);
|
|
49
|
+
req.on("close", () => {
|
|
50
|
+
const current = progressStreams.get(runId);
|
|
51
|
+
if (!current)
|
|
52
|
+
return;
|
|
53
|
+
current.delete(res);
|
|
54
|
+
if (current.size === 0) {
|
|
55
|
+
progressStreams.delete(runId);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
exports.app.post("/api/analyze", async (req, res) => {
|
|
60
|
+
const { task, repoPath } = req.body;
|
|
61
|
+
const result = await (0, runAgent_js_1.runAgent)({ task, role: "developer" });
|
|
62
|
+
res.json({
|
|
63
|
+
decision: result.decision,
|
|
64
|
+
risk: result.risk,
|
|
65
|
+
confidence: result.confidence,
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
exports.app.post("/api/patch", async (req, res) => {
|
|
69
|
+
const { task, repoPath } = req.body;
|
|
70
|
+
const result = await (0, runLlmPatchFlow_js_1.runLlmPatchFlow)({ task, repoPath });
|
|
71
|
+
res.json(result);
|
|
72
|
+
});
|
|
73
|
+
exports.app.post("/api/apply", async (req, res) => {
|
|
74
|
+
const { patches, repoPath } = req.body;
|
|
75
|
+
const result = await (0, applyLlmPatches_js_1.applyLlmPatches)(patches, repoPath);
|
|
76
|
+
res.json(result);
|
|
77
|
+
});
|
|
78
|
+
exports.app.post("/api/test-engineer", async (req, res) => {
|
|
79
|
+
const { task, repoPath, runId } = req.body;
|
|
80
|
+
if (!task || !repoPath) {
|
|
81
|
+
res.status(400).json({ ok: false, reason: "task and repoPath are required" });
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const result = await (0, runTestEngineerFlow_js_1.runTestEngineerFlow)({
|
|
86
|
+
task,
|
|
87
|
+
repoPath,
|
|
88
|
+
onProgress: (stage) => emitProgress(runId, stage),
|
|
89
|
+
});
|
|
90
|
+
res.json(result);
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
emitProgress(runId, "Ready");
|
|
94
|
+
res.status(500).json({
|
|
95
|
+
ok: false,
|
|
96
|
+
reason: err instanceof Error ? err.message : "Unknown error",
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
exports.app.post("/api/data-analyst", async (req, res) => {
|
|
101
|
+
const { task, repoPath, runId } = req.body;
|
|
102
|
+
if (!task || !repoPath) {
|
|
103
|
+
res.status(400).json({ ok: false, reason: "task and repoPath are required" });
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
const result = await (0, runDataAnalystFlow_js_1.runDataAnalystFlow)({
|
|
108
|
+
task,
|
|
109
|
+
repoPath,
|
|
110
|
+
onProgress: (stage) => emitProgress(runId, stage),
|
|
111
|
+
});
|
|
112
|
+
res.json(result);
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
emitProgress(runId, "Ready");
|
|
116
|
+
res.status(500).json({
|
|
117
|
+
ok: false,
|
|
118
|
+
reason: err instanceof Error ? err.message : "Unknown error",
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
exports.app.use(express_1.default.static("src/ui"));
|
|
123
|
+
async function startServer(port = 3000) {
|
|
124
|
+
await new Promise((resolve) => {
|
|
125
|
+
exports.app.listen(port, () => {
|
|
126
|
+
console.log((0, colors_js_1.colorize)(`Zone UI running on http://localhost:${port}`, colors_js_1.c.green, colors_js_1.c.bold));
|
|
127
|
+
console.log((0, colors_js_1.colorize)("Press Ctrl+C to stop", colors_js_1.c.dim, colors_js_1.c.gray));
|
|
128
|
+
resolve();
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
if (process.env.VITEST !== "true" &&
|
|
133
|
+
process.env.ZONE_SERVER_MANUAL_START !== "1") {
|
|
134
|
+
void startServer(Number(PORT));
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyPatchPlan = applyPatchPlan;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
async function applyPatchPlan(plan) {
|
|
6
|
+
const filesChanged = [];
|
|
7
|
+
for (const patch of plan.patches) {
|
|
8
|
+
await node_fs_1.promises.writeFile(patch.filePath, patch.nextContent, "utf8");
|
|
9
|
+
filesChanged.push(patch.filePath);
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
applied: true,
|
|
13
|
+
filesChanged,
|
|
14
|
+
summary: `Applied ${filesChanged.length} file change(s).`
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=applyPatchPlan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyPatchPlan.js","sourceRoot":"","sources":["../../src/apply/applyPatchPlan.ts"],"names":[],"mappings":";;AAIA,wCAaC;AAjBD,qCAAyC;AAIlC,KAAK,UAAU,cAAc,CAAC,IAAe;IAClD,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,kBAAE,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC9D,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,YAAY;QACZ,OAAO,EAAE,WAAW,YAAY,CAAC,MAAM,kBAAkB;KAC1D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.canApplyDecision = canApplyDecision;
|
|
4
|
+
function canApplyDecision(result) {
|
|
5
|
+
const mode = result.decision.mode;
|
|
6
|
+
if (mode === "blocked") {
|
|
7
|
+
return {
|
|
8
|
+
allowed: false,
|
|
9
|
+
reason: "blocked_mode",
|
|
10
|
+
message: "Blocked decisions cannot be applied."
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
if (mode === "preview_only") {
|
|
14
|
+
return {
|
|
15
|
+
allowed: true,
|
|
16
|
+
strategy: "confirmed_apply",
|
|
17
|
+
message: "Preview-only decisions may be applied only with explicit confirmation."
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
allowed: true,
|
|
22
|
+
strategy: "confirmed_apply",
|
|
23
|
+
message: "Safe-to-apply decisions may be applied with explicit confirmation."
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=canApplyDecision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canApplyDecision.js","sourceRoot":"","sources":["../../src/apply/canApplyDecision.ts"],"names":[],"mappings":";;AAGA,4CA0BC;AA1BD,SAAgB,gBAAgB,CAAC,MAAsB;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAElC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,sCAAsC;SAChD,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,iBAAiB;YAC3B,OAAO,EACL,wEAAwE;SAC3E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EACL,oEAAoE;KACvE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patchPlan.js","sourceRoot":"","sources":["../../src/apply/patchPlan.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderApplyResult = renderApplyResult;
|
|
4
|
+
function renderApplyResult(result) {
|
|
5
|
+
const lines = [
|
|
6
|
+
"=== APPLY RESULT ===",
|
|
7
|
+
`Applied: ${result.applied ? "yes" : "no"}`,
|
|
8
|
+
`Summary: ${result.summary}`
|
|
9
|
+
];
|
|
10
|
+
if (result.filesChanged.length > 0) {
|
|
11
|
+
lines.push("Changed files:");
|
|
12
|
+
for (const filePath of result.filesChanged) {
|
|
13
|
+
lines.push(`- ${filePath}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return lines.join("\n");
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=renderApplyResult.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderApplyResult.js","sourceRoot":"","sources":["../../src/apply/renderApplyResult.ts"],"names":[],"mappings":";;AAEA,8CAgBC;AAhBD,SAAgB,iBAAiB,CAAC,MAAmB;IACnD,MAAM,KAAK,GAAa;QACtB,sBAAsB;QACtB,YAAY,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QAC3C,YAAY,MAAM,CAAC,OAAO,EAAE;KAC7B,CAAC;IAEF,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE7B,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runApplyFlow = runApplyFlow;
|
|
4
|
+
const canApplyDecision_js_1 = require("./canApplyDecision.js");
|
|
5
|
+
const applyPatchPlan_js_1 = require("./applyPatchPlan.js");
|
|
6
|
+
function validateBasicPatchPlan(plan) {
|
|
7
|
+
if (!Array.isArray(plan.patches) || plan.patches.length === 0) {
|
|
8
|
+
throw new Error("Patch plan must include at least one patch.");
|
|
9
|
+
}
|
|
10
|
+
const seen = new Set();
|
|
11
|
+
for (const patch of plan.patches) {
|
|
12
|
+
if (!patch.filePath || patch.filePath.trim().length === 0) {
|
|
13
|
+
throw new Error("Patch filePath is required.");
|
|
14
|
+
}
|
|
15
|
+
if (seen.has(patch.filePath)) {
|
|
16
|
+
throw new Error(`Duplicate patch filePath detected: ${patch.filePath}`);
|
|
17
|
+
}
|
|
18
|
+
seen.add(patch.filePath);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function runApplyFlow({ result, plan, request }) {
|
|
22
|
+
const eligibility = (0, canApplyDecision_js_1.canApplyDecision)(result);
|
|
23
|
+
if (!eligibility.allowed) {
|
|
24
|
+
return {
|
|
25
|
+
applied: false,
|
|
26
|
+
filesChanged: [],
|
|
27
|
+
summary: eligibility.message
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if (!request.confirm) {
|
|
31
|
+
return {
|
|
32
|
+
applied: false,
|
|
33
|
+
filesChanged: [],
|
|
34
|
+
summary: "Apply confirmation is required."
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
validateBasicPatchPlan(plan);
|
|
38
|
+
return (0, applyPatchPlan_js_1.applyPatchPlan)(plan);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=runApplyFlow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runApplyFlow.js","sourceRoot":"","sources":["../../src/apply/runApplyFlow.ts"],"names":[],"mappings":";;AAgCA,oCA0BC;AAzDD,+DAAyD;AACzD,2DAAqD;AAUrD,SAAS,sBAAsB,CAAC,IAAe;IAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,sCAAsC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,EACjC,MAAM,EACN,IAAI,EACJ,OAAO,EACW;IAClB,MAAM,WAAW,GAAG,IAAA,sCAAgB,EAAC,MAAM,CAAC,CAAC;IAE7C,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,EAAE;YAChB,OAAO,EAAE,WAAW,CAAC,OAAO;SAC7B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,EAAE;YAChB,OAAO,EAAE,iCAAiC;SAC3C,CAAC;IACJ,CAAC;IAED,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAE7B,OAAO,IAAA,kCAAc,EAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/apply/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auditDiffIntelligence.js","sourceRoot":"","sources":["../../src/audit/auditDiffIntelligence.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildAuditSnapshot = buildAuditSnapshot;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Internal helpers
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
/**
|
|
9
|
+
* Asserts that the provided reason codes are semantically consistent with the
|
|
10
|
+
* execution mode. Mirrors the intent of assertReasonCodeParity in the decision
|
|
11
|
+
* explanation module: throws an Error on parity violation, returns void on success.
|
|
12
|
+
*
|
|
13
|
+
* Parity rule: when reasonCodes is non-empty, at least one code must carry the
|
|
14
|
+
* prefix that corresponds to the mode:
|
|
15
|
+
* blocked → "BLOCKED_"
|
|
16
|
+
* preview_only → "PREVIEW_"
|
|
17
|
+
* safe_to_apply → "SAFE_"
|
|
18
|
+
*/
|
|
19
|
+
function assertReasonCodeParity(mode, reasonCodes) {
|
|
20
|
+
if (reasonCodes.length === 0) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const modePrefixMap = {
|
|
24
|
+
blocked: "BLOCKED_",
|
|
25
|
+
preview_only: "PREVIEW_",
|
|
26
|
+
safe_to_apply: "SAFE_",
|
|
27
|
+
};
|
|
28
|
+
const expectedPrefix = modePrefixMap[mode];
|
|
29
|
+
const hasMatchingCode = reasonCodes.some((code) => code.startsWith(expectedPrefix));
|
|
30
|
+
if (!hasMatchingCode) {
|
|
31
|
+
throw new Error(`Reason code parity violation: mode "${mode}" expects at least one code ` +
|
|
32
|
+
`prefixed with "${expectedPrefix}". Received: [${reasonCodes.join(", ")}]`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Derives a deterministic, non-empty snapshotId from the serialized input and
|
|
37
|
+
* the ISO timestamp. Uses base64 encoding and strips non-alphanumeric characters
|
|
38
|
+
* to produce a compact, URL-safe identifier.
|
|
39
|
+
*/
|
|
40
|
+
function computeSnapshotId(input, timestamp) {
|
|
41
|
+
const raw = JSON.stringify({
|
|
42
|
+
timestamp,
|
|
43
|
+
input,
|
|
44
|
+
});
|
|
45
|
+
return (0, node_crypto_1.createHash)("sha256").update(raw).digest("hex");
|
|
46
|
+
}
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Public API
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
/**
|
|
51
|
+
* Builds a frozen, serializable AuditSnapshot that captures the full decision
|
|
52
|
+
* moment in a single immutable object.
|
|
53
|
+
*
|
|
54
|
+
* The function is pure: identical inputs (including timestamp) always produce
|
|
55
|
+
* structurally identical snapshots. Only the timestamp varies between calls
|
|
56
|
+
* when not overridden.
|
|
57
|
+
*
|
|
58
|
+
* @param input - The original engine input (riskScore, confidenceScore, mode).
|
|
59
|
+
* @param result - The full DecisionEngineResult including contradictionFlags.
|
|
60
|
+
* @param options - Optional reason codes, trace mapping, and timestamp override.
|
|
61
|
+
* @returns A frozen AuditSnapshot.
|
|
62
|
+
*/
|
|
63
|
+
function buildAuditSnapshot(input, result, options = {}) {
|
|
64
|
+
const timestamp = options.timestamp ?? new Date().toISOString();
|
|
65
|
+
const reasonCodes = options.reasonCodes ?? [];
|
|
66
|
+
const traceReasonMapping = options.traceReasonMapping ?? [];
|
|
67
|
+
let parityValid;
|
|
68
|
+
try {
|
|
69
|
+
assertReasonCodeParity(result.mode, reasonCodes);
|
|
70
|
+
parityValid = true;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
parityValid = false;
|
|
74
|
+
}
|
|
75
|
+
const snapshot = {
|
|
76
|
+
snapshotId: computeSnapshotId(input, timestamp),
|
|
77
|
+
timestamp,
|
|
78
|
+
input,
|
|
79
|
+
result,
|
|
80
|
+
contradictionFlags: result.contradictionFlags,
|
|
81
|
+
reasonCodes,
|
|
82
|
+
traceReasonMapping,
|
|
83
|
+
parityValid,
|
|
84
|
+
};
|
|
85
|
+
return Object.freeze(snapshot);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=auditSnapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auditSnapshot.js","sourceRoot":"","sources":["../../src/audit/auditSnapshot.ts"],"names":[],"mappings":";;AAgIA,gDA6BC;AArJD,6CAAyC;AA4CzC,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,SAAS,sBAAsB,CAC7B,IAAmB,EACnB,WAAqB;IAErB,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAkC;QACnD,OAAO,EAAE,UAAU;QACnB,YAAY,EAAE,UAAU;QACxB,aAAa,EAAE,OAAO;KACvB,CAAC;IAEF,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAChD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAChC,CAAC;IAEF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,uCAAuC,IAAI,8BAA8B;YACvE,kBAAkB,cAAc,iBAAiB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC7E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CACxB,KAA0B,EAC1B,SAAiB;IAEjB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QACzB,SAAS;QACT,KAAK;KACN,CAAC,CAAC;IAEH,OAAO,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AACH,SAAgB,kBAAkB,CAChC,KAA0B,EAC1B,MAA4B,EAC5B,UAAqC,EAAE;IAEvC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IAC9C,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC;IAE5D,IAAI,WAAoB,CAAC;IACzB,IAAI,CAAC;QACH,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACjD,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,WAAW,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,MAAM,QAAQ,GAAkB;QAC9B,UAAU,EAAE,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC;QAC/C,SAAS;QACT,KAAK;QACL,MAAM;QACN,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;QAC7C,WAAW;QACX,kBAAkB;QAClB,WAAW;KACZ,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderAuditDiff = renderAuditDiff;
|
|
4
|
+
function renderAuditDiff(diff) {
|
|
5
|
+
const lines = ["=== AUDIT DIFF ===", ""];
|
|
6
|
+
if (diff.modeChanged) {
|
|
7
|
+
lines.push(`Mode: ${diff.previous.mode} -> ${diff.current.mode}`);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
lines.push(`Mode: unchanged (${diff.current.mode})`);
|
|
11
|
+
}
|
|
12
|
+
if (diff.confidenceChanged) {
|
|
13
|
+
lines.push(`Confidence: ${diff.previous.confidenceScore} -> ${diff.current.confidenceScore}`);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
lines.push(`Confidence: unchanged (${diff.current.confidenceScore})`);
|
|
17
|
+
}
|
|
18
|
+
if (diff.riskChanged) {
|
|
19
|
+
lines.push(`Risk: ${diff.previous.riskScore} -> ${diff.current.riskScore}`);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
lines.push(`Risk: unchanged (${diff.current.riskScore})`);
|
|
23
|
+
}
|
|
24
|
+
if (diff.parityChanged) {
|
|
25
|
+
lines.push(`Parity: ${diff.previous.parityValid} -> ${diff.current.parityValid}`);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
lines.push(`Parity: unchanged (${diff.current.parityValid})`);
|
|
29
|
+
}
|
|
30
|
+
lines.push("");
|
|
31
|
+
if (diff.reasonCodesAdded.length === 0 &&
|
|
32
|
+
diff.reasonCodesRemoved.length === 0) {
|
|
33
|
+
lines.push("Reason Codes: no changes");
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
lines.push("Reason Codes:");
|
|
37
|
+
for (const code of diff.reasonCodesAdded) {
|
|
38
|
+
lines.push(`+ ${code}`);
|
|
39
|
+
}
|
|
40
|
+
for (const code of diff.reasonCodesRemoved) {
|
|
41
|
+
lines.push(`- ${code}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
lines.push("");
|
|
45
|
+
if (diff.contradictionFlagsAdded.length === 0 &&
|
|
46
|
+
diff.contradictionFlagsRemoved.length === 0) {
|
|
47
|
+
lines.push("Contradiction Flags: no changes");
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
lines.push("Contradiction Flags:");
|
|
51
|
+
for (const flag of diff.contradictionFlagsAdded) {
|
|
52
|
+
lines.push(`+ ${flag}`);
|
|
53
|
+
}
|
|
54
|
+
for (const flag of diff.contradictionFlagsRemoved) {
|
|
55
|
+
lines.push(`- ${flag}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
lines.push("");
|
|
59
|
+
lines.push(diff.traceReasonMappingChanged
|
|
60
|
+
? "Trace Reason Mapping: changed"
|
|
61
|
+
: "Trace Reason Mapping: unchanged");
|
|
62
|
+
return lines.join("\n");
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=renderAuditDiff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderAuditDiff.js","sourceRoot":"","sources":["../../src/audit/renderAuditDiff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.diffAuditSnapshots = diffAuditSnapshots;
|
|
4
|
+
function sortStrings(values) {
|
|
5
|
+
return [...values].sort();
|
|
6
|
+
}
|
|
7
|
+
function getAddedItems(previous, current) {
|
|
8
|
+
const previousSet = new Set(previous);
|
|
9
|
+
return sortStrings(current.filter((item) => !previousSet.has(item)));
|
|
10
|
+
}
|
|
11
|
+
function getRemovedItems(previous, current) {
|
|
12
|
+
const currentSet = new Set(current);
|
|
13
|
+
return sortStrings(previous.filter((item) => !currentSet.has(item)));
|
|
14
|
+
}
|
|
15
|
+
function serializeTraceReasonMapping(entries) {
|
|
16
|
+
return sortStrings(entries.map((entry) => `${entry.code}|${entry.severity}|${entry.category}|${entry.message}`));
|
|
17
|
+
}
|
|
18
|
+
function diffAuditSnapshots(previous, current) {
|
|
19
|
+
const previousReasonCodes = previous.reasonCodes ?? [];
|
|
20
|
+
const currentReasonCodes = current.reasonCodes ?? [];
|
|
21
|
+
const previousFlags = (previous.contradictionFlags ?? []).map(String);
|
|
22
|
+
const currentFlags = (current.contradictionFlags ?? []).map(String);
|
|
23
|
+
const previousTrace = serializeTraceReasonMapping(previous.traceReasonMapping);
|
|
24
|
+
const currentTrace = serializeTraceReasonMapping(current.traceReasonMapping);
|
|
25
|
+
const reasonCodesAdded = getAddedItems(previousReasonCodes, currentReasonCodes);
|
|
26
|
+
const reasonCodesRemoved = getRemovedItems(previousReasonCodes, currentReasonCodes);
|
|
27
|
+
const contradictionFlagsAdded = getAddedItems(previousFlags, currentFlags);
|
|
28
|
+
const contradictionFlagsRemoved = getRemovedItems(previousFlags, currentFlags);
|
|
29
|
+
return {
|
|
30
|
+
modeChanged: previous.result.mode !== current.result.mode,
|
|
31
|
+
confidenceChanged: previous.input.confidenceScore !== current.input.confidenceScore,
|
|
32
|
+
riskChanged: previous.input.riskScore !== current.input.riskScore,
|
|
33
|
+
parityChanged: previous.parityValid !== current.parityValid,
|
|
34
|
+
contradictionFlagsAdded,
|
|
35
|
+
contradictionFlagsRemoved,
|
|
36
|
+
reasonCodesAdded,
|
|
37
|
+
reasonCodesRemoved,
|
|
38
|
+
traceReasonMappingChanged: JSON.stringify(previousTrace) !== JSON.stringify(currentTrace),
|
|
39
|
+
previous: {
|
|
40
|
+
mode: previous.result.mode,
|
|
41
|
+
confidenceScore: previous.input.confidenceScore,
|
|
42
|
+
riskScore: previous.input.riskScore,
|
|
43
|
+
parityValid: previous.parityValid,
|
|
44
|
+
},
|
|
45
|
+
current: {
|
|
46
|
+
mode: current.result.mode,
|
|
47
|
+
confidenceScore: current.input.confidenceScore,
|
|
48
|
+
riskScore: current.input.riskScore,
|
|
49
|
+
parityValid: current.parityValid,
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=snapshotDiff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshotDiff.js","sourceRoot":"","sources":["../../src/audit/snapshotDiff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
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.readAuditSnapshot = readAuditSnapshot;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
/**
|
|
10
|
+
* Reads an audit snapshot JSON file from disk and parses it.
|
|
11
|
+
*
|
|
12
|
+
* Behavior:
|
|
13
|
+
* - Returns parsed AuditSnapshot on success
|
|
14
|
+
* - Returns null on any failure (file not found, invalid JSON, etc.)
|
|
15
|
+
* - Logs error to stderr
|
|
16
|
+
* - NEVER throws
|
|
17
|
+
*/
|
|
18
|
+
function readAuditSnapshot(filePath) {
|
|
19
|
+
try {
|
|
20
|
+
const absolutePath = node_path_1.default.resolve(filePath);
|
|
21
|
+
const raw = node_fs_1.default.readFileSync(absolutePath, "utf8");
|
|
22
|
+
const parsed = JSON.parse(raw);
|
|
23
|
+
return parsed;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
27
|
+
console.error(`[audit] Failed to read snapshot: ${message}`);
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=snapshotReader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshotReader.js","sourceRoot":"","sources":["../../src/audit/snapshotReader.ts"],"names":[],"mappings":";;;;;AAaA,8CAiBC;AA9BD,sDAAyB;AACzB,0DAA6B;AAG7B;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE5C,MAAM,GAAG,GAAG,iBAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;QAEhD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzD,OAAO,CAAC,KAAK,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC;QAE7D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|