@nxuss/lemma 0.9.0 → 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.
Files changed (166) hide show
  1. package/README.md +40 -6
  2. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
  3. package/dist/cjs/cli/lemma-proxy.js +52 -1
  4. package/dist/cjs/cli/lemma-proxy.js.map +1 -1
  5. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  6. package/dist/cjs/mcp/tools.js +302 -0
  7. package/dist/cjs/mcp/tools.js.map +1 -1
  8. package/dist/cjs/pr-review/PRReviewEngine.d.ts +4 -0
  9. package/dist/cjs/pr-review/PRReviewEngine.d.ts.map +1 -0
  10. package/dist/cjs/pr-review/PRReviewEngine.js +203 -0
  11. package/dist/cjs/pr-review/PRReviewEngine.js.map +1 -0
  12. package/dist/cjs/pr-review/ReviewStore.d.ts +9 -0
  13. package/dist/cjs/pr-review/ReviewStore.d.ts.map +1 -0
  14. package/dist/cjs/pr-review/ReviewStore.js +29 -0
  15. package/dist/cjs/pr-review/ReviewStore.js.map +1 -0
  16. package/dist/cjs/pr-review/adapters/AzureDevOpsAdapter.d.ts +18 -0
  17. package/dist/cjs/pr-review/adapters/AzureDevOpsAdapter.d.ts.map +1 -0
  18. package/dist/cjs/pr-review/adapters/AzureDevOpsAdapter.js +156 -0
  19. package/dist/cjs/pr-review/adapters/AzureDevOpsAdapter.js.map +1 -0
  20. package/dist/cjs/pr-review/adapters/GitHubAdapter.d.ts +18 -0
  21. package/dist/cjs/pr-review/adapters/GitHubAdapter.d.ts.map +1 -0
  22. package/dist/cjs/pr-review/adapters/GitHubAdapter.js +106 -0
  23. package/dist/cjs/pr-review/adapters/GitHubAdapter.js.map +1 -0
  24. package/dist/cjs/pr-review/adapters/GitLabAdapter.d.ts +19 -0
  25. package/dist/cjs/pr-review/adapters/GitLabAdapter.d.ts.map +1 -0
  26. package/dist/cjs/pr-review/adapters/GitLabAdapter.js +137 -0
  27. package/dist/cjs/pr-review/adapters/GitLabAdapter.js.map +1 -0
  28. package/dist/cjs/pr-review/adapters/GitPlatformAdapter.d.ts +14 -0
  29. package/dist/cjs/pr-review/adapters/GitPlatformAdapter.d.ts.map +1 -0
  30. package/dist/cjs/pr-review/adapters/GitPlatformAdapter.js +3 -0
  31. package/dist/cjs/pr-review/adapters/GitPlatformAdapter.js.map +1 -0
  32. package/dist/cjs/pr-review/adapters/index.d.ts +5 -0
  33. package/dist/cjs/pr-review/adapters/index.d.ts.map +1 -0
  34. package/dist/cjs/pr-review/adapters/index.js +10 -0
  35. package/dist/cjs/pr-review/adapters/index.js.map +1 -0
  36. package/dist/cjs/pr-review/analyzers/QualityGrader.d.ts +7 -0
  37. package/dist/cjs/pr-review/analyzers/QualityGrader.d.ts.map +1 -0
  38. package/dist/cjs/pr-review/analyzers/QualityGrader.js +154 -0
  39. package/dist/cjs/pr-review/analyzers/QualityGrader.js.map +1 -0
  40. package/dist/cjs/pr-review/analyzers/RegressionDetector.d.ts +7 -0
  41. package/dist/cjs/pr-review/analyzers/RegressionDetector.d.ts.map +1 -0
  42. package/dist/cjs/pr-review/analyzers/RegressionDetector.js +151 -0
  43. package/dist/cjs/pr-review/analyzers/RegressionDetector.js.map +1 -0
  44. package/dist/cjs/pr-review/analyzers/SecurityScanner.d.ts +7 -0
  45. package/dist/cjs/pr-review/analyzers/SecurityScanner.d.ts.map +1 -0
  46. package/dist/cjs/pr-review/analyzers/SecurityScanner.js +110 -0
  47. package/dist/cjs/pr-review/analyzers/SecurityScanner.js.map +1 -0
  48. package/dist/cjs/pr-review/analyzers/StaticAnalyzer.d.ts +7 -0
  49. package/dist/cjs/pr-review/analyzers/StaticAnalyzer.d.ts.map +1 -0
  50. package/dist/cjs/pr-review/analyzers/StaticAnalyzer.js +237 -0
  51. package/dist/cjs/pr-review/analyzers/StaticAnalyzer.js.map +1 -0
  52. package/dist/cjs/pr-review/analyzers/index.d.ts +9 -0
  53. package/dist/cjs/pr-review/analyzers/index.d.ts.map +1 -0
  54. package/dist/cjs/pr-review/analyzers/index.js +12 -0
  55. package/dist/cjs/pr-review/analyzers/index.js.map +1 -0
  56. package/dist/cjs/pr-review/bridge/BrainBridge.d.ts +23 -0
  57. package/dist/cjs/pr-review/bridge/BrainBridge.d.ts.map +1 -0
  58. package/dist/cjs/pr-review/bridge/BrainBridge.js +100 -0
  59. package/dist/cjs/pr-review/bridge/BrainBridge.js.map +1 -0
  60. package/dist/cjs/pr-review/bridge/index.d.ts +2 -0
  61. package/dist/cjs/pr-review/bridge/index.d.ts.map +1 -0
  62. package/dist/cjs/pr-review/bridge/index.js +6 -0
  63. package/dist/cjs/pr-review/bridge/index.js.map +1 -0
  64. package/dist/cjs/pr-review/index.d.ts +5 -0
  65. package/dist/cjs/pr-review/index.d.ts.map +1 -0
  66. package/dist/cjs/pr-review/index.js +12 -0
  67. package/dist/cjs/pr-review/index.js.map +1 -0
  68. package/dist/cjs/pr-review/reviewRunner.d.ts +25 -0
  69. package/dist/cjs/pr-review/reviewRunner.d.ts.map +1 -0
  70. package/dist/cjs/pr-review/reviewRunner.js +97 -0
  71. package/dist/cjs/pr-review/reviewRunner.js.map +1 -0
  72. package/dist/cjs/pr-review/types.d.ts +80 -0
  73. package/dist/cjs/pr-review/types.d.ts.map +1 -0
  74. package/dist/cjs/pr-review/types.js +3 -0
  75. package/dist/cjs/pr-review/types.js.map +1 -0
  76. package/dist/cjs/pr-review/webhook/WebhookServer.d.ts +3 -0
  77. package/dist/cjs/pr-review/webhook/WebhookServer.d.ts.map +1 -0
  78. package/dist/cjs/pr-review/webhook/WebhookServer.js +114 -0
  79. package/dist/cjs/pr-review/webhook/WebhookServer.js.map +1 -0
  80. package/dist/cjs/pr-review/webhook/index.d.ts +2 -0
  81. package/dist/cjs/pr-review/webhook/index.d.ts.map +1 -0
  82. package/dist/cjs/pr-review/webhook/index.js +6 -0
  83. package/dist/cjs/pr-review/webhook/index.js.map +1 -0
  84. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  85. package/dist/esm/cli/lemma-proxy.js +52 -1
  86. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  87. package/dist/esm/mcp/tools.d.ts.map +1 -1
  88. package/dist/esm/mcp/tools.js +302 -0
  89. package/dist/esm/mcp/tools.js.map +1 -1
  90. package/dist/esm/pr-review/PRReviewEngine.d.ts +4 -0
  91. package/dist/esm/pr-review/PRReviewEngine.d.ts.map +1 -0
  92. package/dist/esm/pr-review/PRReviewEngine.js +199 -0
  93. package/dist/esm/pr-review/PRReviewEngine.js.map +1 -0
  94. package/dist/esm/pr-review/ReviewStore.d.ts +9 -0
  95. package/dist/esm/pr-review/ReviewStore.d.ts.map +1 -0
  96. package/dist/esm/pr-review/ReviewStore.js +26 -0
  97. package/dist/esm/pr-review/ReviewStore.js.map +1 -0
  98. package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.d.ts +18 -0
  99. package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.d.ts.map +1 -0
  100. package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.js +149 -0
  101. package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.js.map +1 -0
  102. package/dist/esm/pr-review/adapters/GitHubAdapter.d.ts +18 -0
  103. package/dist/esm/pr-review/adapters/GitHubAdapter.d.ts.map +1 -0
  104. package/dist/esm/pr-review/adapters/GitHubAdapter.js +99 -0
  105. package/dist/esm/pr-review/adapters/GitHubAdapter.js.map +1 -0
  106. package/dist/esm/pr-review/adapters/GitLabAdapter.d.ts +19 -0
  107. package/dist/esm/pr-review/adapters/GitLabAdapter.d.ts.map +1 -0
  108. package/dist/esm/pr-review/adapters/GitLabAdapter.js +130 -0
  109. package/dist/esm/pr-review/adapters/GitLabAdapter.js.map +1 -0
  110. package/dist/esm/pr-review/adapters/GitPlatformAdapter.d.ts +14 -0
  111. package/dist/esm/pr-review/adapters/GitPlatformAdapter.d.ts.map +1 -0
  112. package/dist/esm/pr-review/adapters/GitPlatformAdapter.js +2 -0
  113. package/dist/esm/pr-review/adapters/GitPlatformAdapter.js.map +1 -0
  114. package/dist/esm/pr-review/adapters/index.d.ts +5 -0
  115. package/dist/esm/pr-review/adapters/index.d.ts.map +1 -0
  116. package/dist/esm/pr-review/adapters/index.js +4 -0
  117. package/dist/esm/pr-review/adapters/index.js.map +1 -0
  118. package/dist/esm/pr-review/analyzers/QualityGrader.d.ts +7 -0
  119. package/dist/esm/pr-review/analyzers/QualityGrader.d.ts.map +1 -0
  120. package/dist/esm/pr-review/analyzers/QualityGrader.js +151 -0
  121. package/dist/esm/pr-review/analyzers/QualityGrader.js.map +1 -0
  122. package/dist/esm/pr-review/analyzers/RegressionDetector.d.ts +7 -0
  123. package/dist/esm/pr-review/analyzers/RegressionDetector.d.ts.map +1 -0
  124. package/dist/esm/pr-review/analyzers/RegressionDetector.js +145 -0
  125. package/dist/esm/pr-review/analyzers/RegressionDetector.js.map +1 -0
  126. package/dist/esm/pr-review/analyzers/SecurityScanner.d.ts +7 -0
  127. package/dist/esm/pr-review/analyzers/SecurityScanner.d.ts.map +1 -0
  128. package/dist/esm/pr-review/analyzers/SecurityScanner.js +107 -0
  129. package/dist/esm/pr-review/analyzers/SecurityScanner.js.map +1 -0
  130. package/dist/esm/pr-review/analyzers/StaticAnalyzer.d.ts +7 -0
  131. package/dist/esm/pr-review/analyzers/StaticAnalyzer.d.ts.map +1 -0
  132. package/dist/esm/pr-review/analyzers/StaticAnalyzer.js +201 -0
  133. package/dist/esm/pr-review/analyzers/StaticAnalyzer.js.map +1 -0
  134. package/dist/esm/pr-review/analyzers/index.d.ts +9 -0
  135. package/dist/esm/pr-review/analyzers/index.d.ts.map +1 -0
  136. package/dist/esm/pr-review/analyzers/index.js +5 -0
  137. package/dist/esm/pr-review/analyzers/index.js.map +1 -0
  138. package/dist/esm/pr-review/bridge/BrainBridge.d.ts +23 -0
  139. package/dist/esm/pr-review/bridge/BrainBridge.d.ts.map +1 -0
  140. package/dist/esm/pr-review/bridge/BrainBridge.js +93 -0
  141. package/dist/esm/pr-review/bridge/BrainBridge.js.map +1 -0
  142. package/dist/esm/pr-review/bridge/index.d.ts +2 -0
  143. package/dist/esm/pr-review/bridge/index.d.ts.map +1 -0
  144. package/dist/esm/pr-review/bridge/index.js +2 -0
  145. package/dist/esm/pr-review/bridge/index.js.map +1 -0
  146. package/dist/esm/pr-review/index.d.ts +5 -0
  147. package/dist/esm/pr-review/index.d.ts.map +1 -0
  148. package/dist/esm/pr-review/index.js +3 -0
  149. package/dist/esm/pr-review/index.js.map +1 -0
  150. package/dist/esm/pr-review/reviewRunner.d.ts +25 -0
  151. package/dist/esm/pr-review/reviewRunner.d.ts.map +1 -0
  152. package/dist/esm/pr-review/reviewRunner.js +92 -0
  153. package/dist/esm/pr-review/reviewRunner.js.map +1 -0
  154. package/dist/esm/pr-review/types.d.ts +80 -0
  155. package/dist/esm/pr-review/types.d.ts.map +1 -0
  156. package/dist/esm/pr-review/types.js +2 -0
  157. package/dist/esm/pr-review/types.js.map +1 -0
  158. package/dist/esm/pr-review/webhook/WebhookServer.d.ts +3 -0
  159. package/dist/esm/pr-review/webhook/WebhookServer.d.ts.map +1 -0
  160. package/dist/esm/pr-review/webhook/WebhookServer.js +108 -0
  161. package/dist/esm/pr-review/webhook/WebhookServer.js.map +1 -0
  162. package/dist/esm/pr-review/webhook/index.d.ts +2 -0
  163. package/dist/esm/pr-review/webhook/index.d.ts.map +1 -0
  164. package/dist/esm/pr-review/webhook/index.js +2 -0
  165. package/dist/esm/pr-review/webhook/index.js.map +1 -0
  166. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/pr-review/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { Router } from "express";
2
+ export declare function createWebhookRouter(): Router;
3
+ //# sourceMappingURL=WebhookServer.d.ts.map
@@ -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,2 @@
1
+ export { createWebhookRouter } from "./WebhookServer";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export { createWebhookRouter } from "./WebhookServer";
2
+ //# sourceMappingURL=index.js.map
@@ -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.0",
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",