@nxuss/lemma 0.9.1 → 0.9.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/README.md +17 -5
- package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/cjs/cli/lemma-proxy.js +52 -1
- package/dist/cjs/cli/lemma-proxy.js.map +1 -1
- package/dist/cjs/mcp/tools.d.ts.map +1 -1
- package/dist/cjs/mcp/tools.js +259 -0
- package/dist/cjs/mcp/tools.js.map +1 -1
- package/dist/cjs/pr-review/PRReviewEngine.d.ts +4 -0
- package/dist/cjs/pr-review/PRReviewEngine.d.ts.map +1 -0
- package/dist/cjs/pr-review/PRReviewEngine.js +203 -0
- package/dist/cjs/pr-review/PRReviewEngine.js.map +1 -0
- package/dist/cjs/pr-review/ReviewStore.d.ts +9 -0
- package/dist/cjs/pr-review/ReviewStore.d.ts.map +1 -0
- package/dist/cjs/pr-review/ReviewStore.js +29 -0
- package/dist/cjs/pr-review/ReviewStore.js.map +1 -0
- package/dist/cjs/pr-review/adapters/AzureDevOpsAdapter.d.ts +18 -0
- package/dist/cjs/pr-review/adapters/AzureDevOpsAdapter.d.ts.map +1 -0
- package/dist/cjs/pr-review/adapters/AzureDevOpsAdapter.js +156 -0
- package/dist/cjs/pr-review/adapters/AzureDevOpsAdapter.js.map +1 -0
- package/dist/cjs/pr-review/adapters/GitHubAdapter.d.ts +18 -0
- package/dist/cjs/pr-review/adapters/GitHubAdapter.d.ts.map +1 -0
- package/dist/cjs/pr-review/adapters/GitHubAdapter.js +106 -0
- package/dist/cjs/pr-review/adapters/GitHubAdapter.js.map +1 -0
- package/dist/cjs/pr-review/adapters/GitLabAdapter.d.ts +19 -0
- package/dist/cjs/pr-review/adapters/GitLabAdapter.d.ts.map +1 -0
- package/dist/cjs/pr-review/adapters/GitLabAdapter.js +137 -0
- package/dist/cjs/pr-review/adapters/GitLabAdapter.js.map +1 -0
- package/dist/cjs/pr-review/adapters/GitPlatformAdapter.d.ts +14 -0
- package/dist/cjs/pr-review/adapters/GitPlatformAdapter.d.ts.map +1 -0
- package/dist/cjs/pr-review/adapters/GitPlatformAdapter.js +3 -0
- package/dist/cjs/pr-review/adapters/GitPlatformAdapter.js.map +1 -0
- package/dist/cjs/pr-review/adapters/index.d.ts +5 -0
- package/dist/cjs/pr-review/adapters/index.d.ts.map +1 -0
- package/dist/cjs/pr-review/adapters/index.js +10 -0
- package/dist/cjs/pr-review/adapters/index.js.map +1 -0
- package/dist/cjs/pr-review/analyzers/QualityGrader.d.ts +7 -0
- package/dist/cjs/pr-review/analyzers/QualityGrader.d.ts.map +1 -0
- package/dist/cjs/pr-review/analyzers/QualityGrader.js +154 -0
- package/dist/cjs/pr-review/analyzers/QualityGrader.js.map +1 -0
- package/dist/cjs/pr-review/analyzers/RegressionDetector.d.ts +7 -0
- package/dist/cjs/pr-review/analyzers/RegressionDetector.d.ts.map +1 -0
- package/dist/cjs/pr-review/analyzers/RegressionDetector.js +151 -0
- package/dist/cjs/pr-review/analyzers/RegressionDetector.js.map +1 -0
- package/dist/cjs/pr-review/analyzers/SecurityScanner.d.ts +7 -0
- package/dist/cjs/pr-review/analyzers/SecurityScanner.d.ts.map +1 -0
- package/dist/cjs/pr-review/analyzers/SecurityScanner.js +110 -0
- package/dist/cjs/pr-review/analyzers/SecurityScanner.js.map +1 -0
- package/dist/cjs/pr-review/analyzers/StaticAnalyzer.d.ts +7 -0
- package/dist/cjs/pr-review/analyzers/StaticAnalyzer.d.ts.map +1 -0
- package/dist/cjs/pr-review/analyzers/StaticAnalyzer.js +237 -0
- package/dist/cjs/pr-review/analyzers/StaticAnalyzer.js.map +1 -0
- package/dist/cjs/pr-review/analyzers/index.d.ts +9 -0
- package/dist/cjs/pr-review/analyzers/index.d.ts.map +1 -0
- package/dist/cjs/pr-review/analyzers/index.js +12 -0
- package/dist/cjs/pr-review/analyzers/index.js.map +1 -0
- package/dist/cjs/pr-review/bridge/BrainBridge.d.ts +23 -0
- package/dist/cjs/pr-review/bridge/BrainBridge.d.ts.map +1 -0
- package/dist/cjs/pr-review/bridge/BrainBridge.js +100 -0
- package/dist/cjs/pr-review/bridge/BrainBridge.js.map +1 -0
- package/dist/cjs/pr-review/bridge/index.d.ts +2 -0
- package/dist/cjs/pr-review/bridge/index.d.ts.map +1 -0
- package/dist/cjs/pr-review/bridge/index.js +6 -0
- package/dist/cjs/pr-review/bridge/index.js.map +1 -0
- package/dist/cjs/pr-review/index.d.ts +5 -0
- package/dist/cjs/pr-review/index.d.ts.map +1 -0
- package/dist/cjs/pr-review/index.js +12 -0
- package/dist/cjs/pr-review/index.js.map +1 -0
- package/dist/cjs/pr-review/reviewRunner.d.ts +25 -0
- package/dist/cjs/pr-review/reviewRunner.d.ts.map +1 -0
- package/dist/cjs/pr-review/reviewRunner.js +97 -0
- package/dist/cjs/pr-review/reviewRunner.js.map +1 -0
- package/dist/cjs/pr-review/types.d.ts +80 -0
- package/dist/cjs/pr-review/types.d.ts.map +1 -0
- package/dist/cjs/pr-review/types.js +3 -0
- package/dist/cjs/pr-review/types.js.map +1 -0
- package/dist/cjs/pr-review/webhook/WebhookServer.d.ts +3 -0
- package/dist/cjs/pr-review/webhook/WebhookServer.d.ts.map +1 -0
- package/dist/cjs/pr-review/webhook/WebhookServer.js +114 -0
- package/dist/cjs/pr-review/webhook/WebhookServer.js.map +1 -0
- package/dist/cjs/pr-review/webhook/index.d.ts +2 -0
- package/dist/cjs/pr-review/webhook/index.d.ts.map +1 -0
- package/dist/cjs/pr-review/webhook/index.js +6 -0
- package/dist/cjs/pr-review/webhook/index.js.map +1 -0
- package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/esm/cli/lemma-proxy.js +52 -1
- package/dist/esm/cli/lemma-proxy.js.map +1 -1
- package/dist/esm/mcp/tools.d.ts.map +1 -1
- package/dist/esm/mcp/tools.js +259 -0
- package/dist/esm/mcp/tools.js.map +1 -1
- package/dist/esm/pr-review/PRReviewEngine.d.ts +4 -0
- package/dist/esm/pr-review/PRReviewEngine.d.ts.map +1 -0
- package/dist/esm/pr-review/PRReviewEngine.js +199 -0
- package/dist/esm/pr-review/PRReviewEngine.js.map +1 -0
- package/dist/esm/pr-review/ReviewStore.d.ts +9 -0
- package/dist/esm/pr-review/ReviewStore.d.ts.map +1 -0
- package/dist/esm/pr-review/ReviewStore.js +26 -0
- package/dist/esm/pr-review/ReviewStore.js.map +1 -0
- package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.d.ts +18 -0
- package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.d.ts.map +1 -0
- package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.js +149 -0
- package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.js.map +1 -0
- package/dist/esm/pr-review/adapters/GitHubAdapter.d.ts +18 -0
- package/dist/esm/pr-review/adapters/GitHubAdapter.d.ts.map +1 -0
- package/dist/esm/pr-review/adapters/GitHubAdapter.js +99 -0
- package/dist/esm/pr-review/adapters/GitHubAdapter.js.map +1 -0
- package/dist/esm/pr-review/adapters/GitLabAdapter.d.ts +19 -0
- package/dist/esm/pr-review/adapters/GitLabAdapter.d.ts.map +1 -0
- package/dist/esm/pr-review/adapters/GitLabAdapter.js +130 -0
- package/dist/esm/pr-review/adapters/GitLabAdapter.js.map +1 -0
- package/dist/esm/pr-review/adapters/GitPlatformAdapter.d.ts +14 -0
- package/dist/esm/pr-review/adapters/GitPlatformAdapter.d.ts.map +1 -0
- package/dist/esm/pr-review/adapters/GitPlatformAdapter.js +2 -0
- package/dist/esm/pr-review/adapters/GitPlatformAdapter.js.map +1 -0
- package/dist/esm/pr-review/adapters/index.d.ts +5 -0
- package/dist/esm/pr-review/adapters/index.d.ts.map +1 -0
- package/dist/esm/pr-review/adapters/index.js +4 -0
- package/dist/esm/pr-review/adapters/index.js.map +1 -0
- package/dist/esm/pr-review/analyzers/QualityGrader.d.ts +7 -0
- package/dist/esm/pr-review/analyzers/QualityGrader.d.ts.map +1 -0
- package/dist/esm/pr-review/analyzers/QualityGrader.js +151 -0
- package/dist/esm/pr-review/analyzers/QualityGrader.js.map +1 -0
- package/dist/esm/pr-review/analyzers/RegressionDetector.d.ts +7 -0
- package/dist/esm/pr-review/analyzers/RegressionDetector.d.ts.map +1 -0
- package/dist/esm/pr-review/analyzers/RegressionDetector.js +145 -0
- package/dist/esm/pr-review/analyzers/RegressionDetector.js.map +1 -0
- package/dist/esm/pr-review/analyzers/SecurityScanner.d.ts +7 -0
- package/dist/esm/pr-review/analyzers/SecurityScanner.d.ts.map +1 -0
- package/dist/esm/pr-review/analyzers/SecurityScanner.js +107 -0
- package/dist/esm/pr-review/analyzers/SecurityScanner.js.map +1 -0
- package/dist/esm/pr-review/analyzers/StaticAnalyzer.d.ts +7 -0
- package/dist/esm/pr-review/analyzers/StaticAnalyzer.d.ts.map +1 -0
- package/dist/esm/pr-review/analyzers/StaticAnalyzer.js +201 -0
- package/dist/esm/pr-review/analyzers/StaticAnalyzer.js.map +1 -0
- package/dist/esm/pr-review/analyzers/index.d.ts +9 -0
- package/dist/esm/pr-review/analyzers/index.d.ts.map +1 -0
- package/dist/esm/pr-review/analyzers/index.js +5 -0
- package/dist/esm/pr-review/analyzers/index.js.map +1 -0
- package/dist/esm/pr-review/bridge/BrainBridge.d.ts +23 -0
- package/dist/esm/pr-review/bridge/BrainBridge.d.ts.map +1 -0
- package/dist/esm/pr-review/bridge/BrainBridge.js +93 -0
- package/dist/esm/pr-review/bridge/BrainBridge.js.map +1 -0
- package/dist/esm/pr-review/bridge/index.d.ts +2 -0
- package/dist/esm/pr-review/bridge/index.d.ts.map +1 -0
- package/dist/esm/pr-review/bridge/index.js +2 -0
- package/dist/esm/pr-review/bridge/index.js.map +1 -0
- package/dist/esm/pr-review/index.d.ts +5 -0
- package/dist/esm/pr-review/index.d.ts.map +1 -0
- package/dist/esm/pr-review/index.js +3 -0
- package/dist/esm/pr-review/index.js.map +1 -0
- package/dist/esm/pr-review/reviewRunner.d.ts +25 -0
- package/dist/esm/pr-review/reviewRunner.d.ts.map +1 -0
- package/dist/esm/pr-review/reviewRunner.js +92 -0
- package/dist/esm/pr-review/reviewRunner.js.map +1 -0
- package/dist/esm/pr-review/types.d.ts +80 -0
- package/dist/esm/pr-review/types.d.ts.map +1 -0
- package/dist/esm/pr-review/types.js +2 -0
- package/dist/esm/pr-review/types.js.map +1 -0
- package/dist/esm/pr-review/webhook/WebhookServer.d.ts +3 -0
- package/dist/esm/pr-review/webhook/WebhookServer.d.ts.map +1 -0
- package/dist/esm/pr-review/webhook/WebhookServer.js +108 -0
- package/dist/esm/pr-review/webhook/WebhookServer.js.map +1 -0
- package/dist/esm/pr-review/webhook/index.d.ts +2 -0
- package/dist/esm/pr-review/webhook/index.d.ts.map +1 -0
- package/dist/esm/pr-review/webhook/index.js +2 -0
- package/dist/esm/pr-review/webhook/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { runAnalysis } from "./PRReviewEngine";
|
|
2
|
+
import { ReviewStore } from "./ReviewStore";
|
|
3
|
+
import { BrainBridge } from "./bridge/BrainBridge";
|
|
4
|
+
import { GitHubAdapter } from "./adapters/GitHubAdapter";
|
|
5
|
+
import { AzureDevOpsAdapter } from "./adapters/AzureDevOpsAdapter";
|
|
6
|
+
import { GitLabAdapter } from "./adapters/GitLabAdapter";
|
|
7
|
+
const brainBridge = new BrainBridge();
|
|
8
|
+
export function getAdapter(platform, token) {
|
|
9
|
+
switch (platform) {
|
|
10
|
+
case "github": return new GitHubAdapter(token);
|
|
11
|
+
case "azure": return new AzureDevOpsAdapter(token);
|
|
12
|
+
case "gitlab": return new GitLabAdapter(token);
|
|
13
|
+
default: throw new Error(`Unsupported platform: ${platform}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function getTokenForPlatform(platform) {
|
|
17
|
+
const token = process.env[platform === "github" ? "GITHUB_TOKEN"
|
|
18
|
+
: platform === "azure" ? "AZURE_DEVOPS_TOKEN"
|
|
19
|
+
: "GITLAB_TOKEN"] || "";
|
|
20
|
+
if (!token) {
|
|
21
|
+
throw new Error(`No ${platform} token found. Set ${platform === "github" ? "GITHUB_TOKEN"
|
|
22
|
+
: platform === "azure" ? "AZURE_DEVOPS_TOKEN"
|
|
23
|
+
: "GITLAB_TOKEN"} environment variable.`);
|
|
24
|
+
}
|
|
25
|
+
return token;
|
|
26
|
+
}
|
|
27
|
+
export async function runPRReview(platform, repo, prNumber, options = {}) {
|
|
28
|
+
const autoApprove = options.autoApprove !== false;
|
|
29
|
+
const threshold = options.threshold || 90;
|
|
30
|
+
const token = getTokenForPlatform(platform);
|
|
31
|
+
const adapter = getAdapter(platform, token);
|
|
32
|
+
const [owner, ...repoParts] = repo.split("/");
|
|
33
|
+
const repoName = repoParts.join("/");
|
|
34
|
+
const [diffFiles, metadata, baseBranch] = await Promise.all([
|
|
35
|
+
adapter.getPRDiff(owner, repoName, prNumber),
|
|
36
|
+
adapter.getPRMetadata(owner, repoName, prNumber),
|
|
37
|
+
adapter.getBaseBranch(owner, repoName, prNumber),
|
|
38
|
+
]);
|
|
39
|
+
const filePaths = diffFiles.map(df => df.path);
|
|
40
|
+
const priorBugs = await brainBridge.findPriorBugs(filePaths);
|
|
41
|
+
let extras = "";
|
|
42
|
+
if (priorBugs.size > 0) {
|
|
43
|
+
extras += `\n\n🧠 **Prior bug context from The Brain:**\n`;
|
|
44
|
+
for (const [file, memories] of priorBugs) {
|
|
45
|
+
extras += `- ${file}: ${memories.length} related memories\n`;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const result = runAnalysis(diffFiles, { threshold, autoApprove }, process.cwd(), baseBranch);
|
|
49
|
+
const review = ReviewStore.create({
|
|
50
|
+
score: result.score,
|
|
51
|
+
verdict: result.verdict,
|
|
52
|
+
findings: result.findings,
|
|
53
|
+
summary: result.summary,
|
|
54
|
+
approved: false,
|
|
55
|
+
metadata,
|
|
56
|
+
});
|
|
57
|
+
const commentBody = [
|
|
58
|
+
`# 🔍 Lemma PR Review — #${prNumber} ${metadata.title}`,
|
|
59
|
+
``,
|
|
60
|
+
`**Score:** ${result.score}/100 | **Verdict:** ${result.verdict}`,
|
|
61
|
+
`**Files:** ${diffFiles.length} | **Findings:** ${result.findings.length}`,
|
|
62
|
+
extras,
|
|
63
|
+
``,
|
|
64
|
+
result.summary,
|
|
65
|
+
``,
|
|
66
|
+
`---`,
|
|
67
|
+
`*Review ID: ${review.reviewId}*`,
|
|
68
|
+
].join("\n");
|
|
69
|
+
await adapter.postComment(owner, repoName, prNumber, commentBody);
|
|
70
|
+
let approved = false;
|
|
71
|
+
if (result.verdict === "APPROVED" && autoApprove) {
|
|
72
|
+
await adapter.submitReview(owner, repoName, prNumber, "APPROVE", `✅ Auto-approved by Lemma PR Review (score: ${result.score}/100, threshold: ${threshold})`);
|
|
73
|
+
approved = true;
|
|
74
|
+
}
|
|
75
|
+
else if (result.verdict === "CHANGES_REQUESTED") {
|
|
76
|
+
await adapter.submitReview(owner, repoName, prNumber, "REQUEST_CHANGES", `❌ Changes requested by Lemma PR Review (score: ${result.score}/100, threshold: ${threshold})`);
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
await adapter.setStatus(owner, repoName, metadata.headSha, result.score >= threshold ? "success" : "failure", `Lemma PR Review: ${result.score}/100 — ${result.verdict}`);
|
|
80
|
+
}
|
|
81
|
+
catch { }
|
|
82
|
+
await brainBridge.storeReview(review.reviewId, repo, prNumber, result.score, result.verdict, result.findings, filePaths);
|
|
83
|
+
return {
|
|
84
|
+
reviewId: review.reviewId,
|
|
85
|
+
score: result.score,
|
|
86
|
+
verdict: result.verdict,
|
|
87
|
+
findingsCount: result.findings.length,
|
|
88
|
+
approved,
|
|
89
|
+
summary: result.summary,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=reviewRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewRunner.js","sourceRoot":"","sources":["../../../src/pr-review/reviewRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export type Severity = "CRITICAL" | "HIGH" | "MEDIUM" | "LOW";
|
|
2
|
+
export type Verdict = "APPROVED" | "NEUTRAL" | "CHANGES_REQUESTED";
|
|
3
|
+
export type Platform = "github" | "azure" | "gitlab";
|
|
4
|
+
export type ReviewEvent = "APPROVE" | "REQUEST_CHANGES" | "COMMENT";
|
|
5
|
+
export type StatusState = "pending" | "success" | "failure" | "error";
|
|
6
|
+
export interface Finding {
|
|
7
|
+
ruleId: string;
|
|
8
|
+
severity: Severity;
|
|
9
|
+
category: "security" | "regression" | "static" | "quality";
|
|
10
|
+
filePath: string;
|
|
11
|
+
line?: number;
|
|
12
|
+
message: string;
|
|
13
|
+
detail?: string;
|
|
14
|
+
suggestion?: string;
|
|
15
|
+
score: number;
|
|
16
|
+
}
|
|
17
|
+
export interface DiffFile {
|
|
18
|
+
path: string;
|
|
19
|
+
status: "added" | "modified" | "deleted" | "renamed";
|
|
20
|
+
additions: number;
|
|
21
|
+
deletions: number;
|
|
22
|
+
content?: string;
|
|
23
|
+
patch?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface PRMetadata {
|
|
26
|
+
owner: string;
|
|
27
|
+
repo: string;
|
|
28
|
+
prNumber: number;
|
|
29
|
+
title: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
baseBranch: string;
|
|
32
|
+
headBranch: string;
|
|
33
|
+
headSha: string;
|
|
34
|
+
author: string;
|
|
35
|
+
createdAt: string;
|
|
36
|
+
updatedAt: string;
|
|
37
|
+
}
|
|
38
|
+
export interface AnalyzeResult {
|
|
39
|
+
score: number;
|
|
40
|
+
verdict: Verdict;
|
|
41
|
+
findings: Finding[];
|
|
42
|
+
summary: string;
|
|
43
|
+
}
|
|
44
|
+
export interface PRReviewResult {
|
|
45
|
+
reviewId: string;
|
|
46
|
+
score: number;
|
|
47
|
+
verdict: Verdict;
|
|
48
|
+
findings: Finding[];
|
|
49
|
+
summary: string;
|
|
50
|
+
approved: boolean;
|
|
51
|
+
timestamp: string;
|
|
52
|
+
metadata?: PRMetadata;
|
|
53
|
+
}
|
|
54
|
+
export interface AnalyzerConfig {
|
|
55
|
+
threshold: number;
|
|
56
|
+
autoApprove: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface DiffAnalysisRequest {
|
|
59
|
+
diff: string;
|
|
60
|
+
baseBranch?: string;
|
|
61
|
+
workspaceRoot?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface PRReviewRequest {
|
|
64
|
+
platform: Platform;
|
|
65
|
+
repo: string;
|
|
66
|
+
prNumber: number;
|
|
67
|
+
autoApprove?: boolean;
|
|
68
|
+
threshold?: number;
|
|
69
|
+
context?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface WorkflowConfig {
|
|
72
|
+
platform: Platform;
|
|
73
|
+
autoApprove: boolean;
|
|
74
|
+
threshold: number;
|
|
75
|
+
}
|
|
76
|
+
export interface AdapterConfig {
|
|
77
|
+
token?: string;
|
|
78
|
+
baseUrl?: string;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/pr-review/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/pr-review/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebhookServer.d.ts","sourceRoot":"","sources":["../../../../src/pr-review/webhook/WebhookServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAUpD,wBAAgB,mBAAmB,IAAI,MAAM,CA+G5C"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import crypto from "crypto";
|
|
3
|
+
import { runPRReview } from "../reviewRunner";
|
|
4
|
+
function verifyGitHubSignature(payload, signature, secret) {
|
|
5
|
+
const sig = `sha256=${crypto.createHmac("sha256", secret).update(payload).digest("hex")}`;
|
|
6
|
+
if (signature.length !== sig.length)
|
|
7
|
+
return false;
|
|
8
|
+
return crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(signature));
|
|
9
|
+
}
|
|
10
|
+
export function createWebhookRouter() {
|
|
11
|
+
const router = Router();
|
|
12
|
+
router.post("/github", async (req, res) => {
|
|
13
|
+
const signature = req.headers["x-hub-signature-256"];
|
|
14
|
+
const event = req.headers["x-github-event"];
|
|
15
|
+
const webhookSecret = process.env.GITHUB_WEBHOOK_SECRET || "";
|
|
16
|
+
if (webhookSecret && signature) {
|
|
17
|
+
const rawBody = JSON.stringify(req.body);
|
|
18
|
+
if (!verifyGitHubSignature(rawBody, signature, webhookSecret)) {
|
|
19
|
+
res.status(401).json({ error: "Invalid signature" });
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (event !== "pull_request") {
|
|
24
|
+
res.status(200).json({ status: "ignored", event });
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const action = req.body.action;
|
|
28
|
+
if (action !== "opened" && action !== "synchronize") {
|
|
29
|
+
res.status(200).json({ status: "ignored", action });
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const pr = req.body.pull_request;
|
|
33
|
+
const repo = req.body.repository;
|
|
34
|
+
const owner = repo.owner.login;
|
|
35
|
+
const repoName = repo.name;
|
|
36
|
+
const prNumber = pr.number;
|
|
37
|
+
const fullRepo = `${owner}/${repoName}`;
|
|
38
|
+
if (!process.env.GITHUB_TOKEN) {
|
|
39
|
+
res.status(500).json({ error: "GITHUB_TOKEN not set" });
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const result = await runPRReview("github", fullRepo, prNumber, {
|
|
44
|
+
threshold: parseInt(process.env.LEMMA_THRESHOLD || "90", 10),
|
|
45
|
+
autoApprove: process.env.LEMMA_AUTO_APPROVE !== "false",
|
|
46
|
+
});
|
|
47
|
+
res.json({ status: "ok", ...result });
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
console.error("[Webhook] GitHub review failed:", err.message);
|
|
51
|
+
res.status(500).json({ error: err.message });
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
router.post("/azure", async (req, res) => {
|
|
55
|
+
const eventType = req.body.eventType;
|
|
56
|
+
if (eventType !== "git.pullrequest.created" && eventType !== "git.pullrequest.updated") {
|
|
57
|
+
res.status(200).json({ status: "ignored", eventType });
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const resource = req.body.resource;
|
|
61
|
+
const prNumber = resource?.pullRequestId;
|
|
62
|
+
const repoName = resource?.repository?.name;
|
|
63
|
+
const projectName = resource?.repository?.project?.name;
|
|
64
|
+
if (!prNumber || !repoName || !projectName || !process.env.AZURE_DEVOPS_TOKEN) {
|
|
65
|
+
res.status(500).json({ error: "Missing required Azure DevOps webhook fields or AZURE_DEVOPS_TOKEN" });
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const fullRepo = `${projectName}/${repoName}`;
|
|
69
|
+
try {
|
|
70
|
+
const result = await runPRReview("azure", fullRepo, prNumber, {
|
|
71
|
+
threshold: parseInt(process.env.LEMMA_THRESHOLD || "90", 10),
|
|
72
|
+
autoApprove: process.env.LEMMA_AUTO_APPROVE !== "false",
|
|
73
|
+
});
|
|
74
|
+
res.json({ status: "ok", ...result });
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
console.error("[Webhook] Azure review failed:", err.message);
|
|
78
|
+
res.status(500).json({ error: err.message });
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
router.post("/gitlab", async (req, res) => {
|
|
82
|
+
const objectKind = req.body.object_kind;
|
|
83
|
+
if (objectKind !== "merge_request") {
|
|
84
|
+
res.status(200).json({ status: "ignored", object_kind: objectKind });
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const mr = req.body.object_attributes;
|
|
88
|
+
const prNumber = mr?.iid;
|
|
89
|
+
const projectPath = req.body.project?.path_with_namespace;
|
|
90
|
+
if (!prNumber || !projectPath || !process.env.GITLAB_TOKEN) {
|
|
91
|
+
res.status(500).json({ error: "Missing required GitLab webhook fields or GITLAB_TOKEN" });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
const result = await runPRReview("gitlab", projectPath, prNumber, {
|
|
96
|
+
threshold: parseInt(process.env.LEMMA_THRESHOLD || "90", 10),
|
|
97
|
+
autoApprove: process.env.LEMMA_AUTO_APPROVE !== "false",
|
|
98
|
+
});
|
|
99
|
+
res.json({ status: "ok", ...result });
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
console.error("[Webhook] GitLab review failed:", err.message);
|
|
103
|
+
res.status(500).json({ error: err.message });
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
return router;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=WebhookServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebhookServer.js","sourceRoot":"","sources":["../../../../src/pr-review/webhook/WebhookServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pr-review/webhook/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pr-review/webhook/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nxuss/lemma",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.2",
|
|
4
4
|
"description": "Intelligent AI Gateway for IDEs & Agents — Semantic cache, Privacy Firewall, and Autonomous Cost-Optimization.",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|