diffintel 0.2.0 → 0.2.2
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/dist/commands/explain.js
CHANGED
|
@@ -13,10 +13,7 @@ async function run(opts) {
|
|
|
13
13
|
const baseRef = opts.base || "origin/main";
|
|
14
14
|
const headRef = opts.head || "HEAD";
|
|
15
15
|
const outFile = opts.out || "explain-report.html";
|
|
16
|
-
|
|
17
|
-
console.error("Error: ANTHROPIC_API_KEY environment variable is required.");
|
|
18
|
-
return 1;
|
|
19
|
-
}
|
|
16
|
+
const hasApiKey = !!process.env.ANTHROPIC_API_KEY;
|
|
20
17
|
try {
|
|
21
18
|
console.error(`Analyzing diff: ${baseRef}...${headRef}`);
|
|
22
19
|
const { files: fileDiffs, rawDiff } = (0, git_diff_1.getDiff)(baseRef, headRef);
|
|
@@ -31,10 +28,24 @@ async function run(opts) {
|
|
|
31
28
|
return analysis;
|
|
32
29
|
});
|
|
33
30
|
const totalChanges = fileAnalyses.reduce((sum, f) => sum + f.structuralChanges.length, 0);
|
|
34
|
-
console.error(`Detected ${totalChanges} structural change(s). Calling LLM...`);
|
|
35
|
-
const explanation = await (0, llm_explain_1.explainChanges)(fileAnalyses, rawDiff);
|
|
36
31
|
const totalAdditions = fileDiffs.reduce((sum, f) => sum + f.additions, 0);
|
|
37
32
|
const totalDeletions = fileDiffs.reduce((sum, f) => sum + f.deletions, 0);
|
|
33
|
+
let explanation;
|
|
34
|
+
if (hasApiKey) {
|
|
35
|
+
console.error(`Detected ${totalChanges} structural change(s). Calling LLM...`);
|
|
36
|
+
explanation = await (0, llm_explain_1.explainChanges)(fileAnalyses, rawDiff);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
console.error(`Detected ${totalChanges} structural change(s). No API key — generating AST-only report.`);
|
|
40
|
+
explanation = {
|
|
41
|
+
title: buildAutoTitle(fileDiffs.length, totalAdditions, totalDeletions),
|
|
42
|
+
description: "",
|
|
43
|
+
fixes: [],
|
|
44
|
+
risks: [],
|
|
45
|
+
fileExplanations: [],
|
|
46
|
+
tokenUsage: { input: 0, output: 0 },
|
|
47
|
+
};
|
|
48
|
+
}
|
|
38
49
|
const report = {
|
|
39
50
|
generatedAt: new Date().toISOString(),
|
|
40
51
|
baseRef,
|
|
@@ -65,4 +76,17 @@ async function run(opts) {
|
|
|
65
76
|
return 1;
|
|
66
77
|
}
|
|
67
78
|
}
|
|
79
|
+
function buildAutoTitle(fileCount, additions, deletions) {
|
|
80
|
+
const parts = [];
|
|
81
|
+
if (additions > 0 && deletions > 0)
|
|
82
|
+
parts.push("Modified");
|
|
83
|
+
else if (additions > 0)
|
|
84
|
+
parts.push("Added");
|
|
85
|
+
else if (deletions > 0)
|
|
86
|
+
parts.push("Removed");
|
|
87
|
+
else
|
|
88
|
+
parts.push("Changed");
|
|
89
|
+
parts.push(`${fileCount} file${fileCount !== 1 ? "s" : ""}`);
|
|
90
|
+
return `${parts.join(" ")} (+${additions} -${deletions})`;
|
|
91
|
+
}
|
|
68
92
|
//# sourceMappingURL=explain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/commands/explain.ts"],"names":[],"mappings":";;;;;AAaA,
|
|
1
|
+
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/commands/explain.ts"],"names":[],"mappings":"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"}
|
|
@@ -134,8 +134,12 @@ function renderReport(report) {
|
|
|
134
134
|
.risk-high { background: #fef2f2; border-left: 3px solid #ef4444; color: #991b1b; }
|
|
135
135
|
.risk-high .risk-label { background: #ef4444; }
|
|
136
136
|
|
|
137
|
-
/*
|
|
138
|
-
.
|
|
137
|
+
/* AST-only notice */
|
|
138
|
+
.ast-only-notice {
|
|
139
|
+
padding: 12px 16px; margin-bottom: 32px;
|
|
140
|
+
background: #f8fafc; border: 1px dashed #cbd5e1; border-radius: 6px;
|
|
141
|
+
font-size: 14px; color: #64748b;
|
|
142
|
+
}
|
|
139
143
|
|
|
140
144
|
/* File cards */
|
|
141
145
|
.file-card {
|
|
@@ -226,19 +230,19 @@ function renderReport(report) {
|
|
|
226
230
|
<div class="stat deletions"><b>-${summary.deletions}</b> removed</div>
|
|
227
231
|
</div>
|
|
228
232
|
|
|
229
|
-
|
|
233
|
+
${explanation.description
|
|
234
|
+
? `<div class="description">${escapeHtml(explanation.description)}</div>`
|
|
235
|
+
: `<div class="ast-only-notice">Structural analysis only — set ANTHROPIC_API_KEY for AI-powered explanations.</div>`}
|
|
230
236
|
|
|
231
237
|
${fixesHtml ? `<h2>What was fixed</h2>\n${fixesHtml}` : ""}
|
|
232
238
|
|
|
233
|
-
${risksHtml
|
|
234
|
-
? `<h2>Things to watch</h2>\n${risksHtml}`
|
|
235
|
-
: `<h2>Things to watch</h2>\n<p class="none-msg">No concerns identified.</p>`}
|
|
239
|
+
${risksHtml ? `<h2>Things to watch</h2>\n${risksHtml}` : ""}
|
|
236
240
|
|
|
237
241
|
<h2>Changed files</h2>
|
|
238
242
|
${fileCards}
|
|
239
243
|
|
|
240
244
|
<div class="footer">
|
|
241
|
-
Generated by diffintel · ${explanation.tokenUsage.input + explanation.tokenUsage.output} tokens used
|
|
245
|
+
Generated by diffintel${explanation.tokenUsage.input + explanation.tokenUsage.output > 0 ? ` · ${explanation.tokenUsage.input + explanation.tokenUsage.output} tokens used` : ""}
|
|
242
246
|
</div>
|
|
243
247
|
</body>
|
|
244
248
|
</html>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-report.js","sourceRoot":"","sources":["../../src/explain/html-report.ts"],"names":[],"mappings":";;AAUA,
|
|
1
|
+
{"version":3,"file":"html-report.js","sourceRoot":"","sources":["../../src/explain/html-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,14 +12,23 @@ Context rules:
|
|
|
12
12
|
- Use history to understand INTENT: if a recent commit broke something and this diff fixes it, categorize it as a FIX.
|
|
13
13
|
- Clearly separate what was FIXED from what are genuine RISKS.
|
|
14
14
|
- Write the description in plain language that a non-developer can understand.
|
|
15
|
-
- For file explanations, describe what each file does and what changed in simple terms
|
|
15
|
+
- For file explanations, describe what each file does and what changed in simple terms.
|
|
16
|
+
|
|
17
|
+
Precision rules:
|
|
18
|
+
- When describing changes, state what BEHAVIOR changed, not just what code moved.
|
|
19
|
+
- Be specific: "product listings now require a valid token" not "authentication was added".
|
|
20
|
+
- Name the affected endpoints, functions, or data flows.
|
|
21
|
+
- If an assumption or invariant changed (e.g., "IDs were sequential, now they're computed"), say so.
|
|
22
|
+
- Stick to what the diff shows. Do not speculate about intent beyond what the code and history demonstrate.`;
|
|
16
23
|
const ACTION_ICON = {
|
|
17
24
|
added: "+",
|
|
18
25
|
removed: "-",
|
|
19
26
|
modified: "~",
|
|
20
27
|
};
|
|
21
28
|
async function explainChanges(files, rawDiff) {
|
|
22
|
-
|
|
29
|
+
// Sort files by path for stable, deterministic prompt ordering
|
|
30
|
+
const sortedFiles = [...files].sort((a, b) => a.path.localeCompare(b.path));
|
|
31
|
+
const historySummary = sortedFiles
|
|
23
32
|
.filter((f) => f.recentHistory.length > 0)
|
|
24
33
|
.map((f) => {
|
|
25
34
|
const entries = f.recentHistory
|
|
@@ -35,11 +44,11 @@ async function explainChanges(files, rawDiff) {
|
|
|
35
44
|
return `- ${f.path}:\n${entries}${diffSection}`;
|
|
36
45
|
})
|
|
37
46
|
.join("\n");
|
|
38
|
-
const baseSummary =
|
|
47
|
+
const baseSummary = sortedFiles
|
|
39
48
|
.filter((f) => f.baseDeclarations.length > 0)
|
|
40
49
|
.map((f) => `- ${f.path}: ${f.baseDeclarations.join(", ")}`)
|
|
41
50
|
.join("\n");
|
|
42
|
-
const structuralSummary =
|
|
51
|
+
const structuralSummary = sortedFiles
|
|
43
52
|
.filter((f) => f.structuralChanges.length > 0)
|
|
44
53
|
.map((f) => {
|
|
45
54
|
const changes = f.structuralChanges
|
|
@@ -48,7 +57,7 @@ async function explainChanges(files, rawDiff) {
|
|
|
48
57
|
return `- ${f.path} (${f.status}): ${changes}`;
|
|
49
58
|
})
|
|
50
59
|
.join("\n");
|
|
51
|
-
const fileList =
|
|
60
|
+
const fileList = sortedFiles.map((f) => `- ${f.path} (${f.status})`).join("\n");
|
|
52
61
|
const truncatedDiff = truncateDiff(rawDiff, 4000);
|
|
53
62
|
const prompt = `## Recent git history for changed files
|
|
54
63
|
${historySummary || "(no prior history)"}
|
|
@@ -82,6 +91,7 @@ Rules:
|
|
|
82
91
|
const message = await client.messages.create({
|
|
83
92
|
model: "claude-sonnet-4-5-20250929",
|
|
84
93
|
max_tokens: 1024,
|
|
94
|
+
temperature: 0,
|
|
85
95
|
system: SYSTEM_PROMPT,
|
|
86
96
|
messages: [{ role: "user", content: prompt }],
|
|
87
97
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-explain.js","sourceRoot":"","sources":["../../src/explain/llm-explain.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"llm-explain.js","sourceRoot":"","sources":["../../src/explain/llm-explain.ts"],"names":[],"mappings":"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"}
|