@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.
- package/README.md +40 -6
- 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 +302 -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 +302 -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
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# 🧠 Lemma v0.9.
|
|
1
|
+
# 🧠 Lemma v0.9.2
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@nxuss/lemma)
|
|
4
4
|
[](https://github.com/Nxusbets/lemma/blob/main/LICENSE)
|
|
5
|
-
[](https://github.com/Nxusbets/lemma)
|
|
6
6
|
[](https://github.com/Nxusbets/lemma)
|
|
7
7
|
[](https://github.com/Nxusbets/lemma)
|
|
8
8
|
|
|
@@ -16,11 +16,33 @@
|
|
|
16
16
|
|
|
17
17
|
> **The Intelligent local-first AI Gateway — Privacy, Performance, and Static Code Intelligence for the Agentic Era.**
|
|
18
18
|
|
|
19
|
-
Lemma is a high-performance orchestration layer that sits between your development environment and LLM providers. It transforms the way you build with AI by providing **Shared Semantic Memory**, **Autonomous Cost Optimization**, **Privacy Guardrails**, and a suite of **
|
|
19
|
+
Lemma is a high-performance orchestration layer that sits between your development environment and LLM providers. It transforms the way you build with AI by providing **Shared Semantic Memory**, **Autonomous Cost Optimization**, **Privacy Guardrails**, and a suite of **36 MCP tools** — including zero-token static code intelligence that runs entirely on your machine with no LLM calls required.
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
-
##
|
|
23
|
+
## 💎 Free vs Pro
|
|
24
|
+
|
|
25
|
+
| Feature | 🆓 Free | 💎 Pro |
|
|
26
|
+
| :--- | :---: | :---: |
|
|
27
|
+
| **AI Proxy (OpenAI/Anthropic/Gemini)** | ✅ | ✅ |
|
|
28
|
+
| **Exact-match cache** | ✅ | ✅ |
|
|
29
|
+
| **Context Squeezer (auto-compression)** | ✅ | ✅ |
|
|
30
|
+
| **Privacy Firewall (proxy layer)** | ✅ | ✅ |
|
|
31
|
+
| **Complexity Router** | ✅ | ✅ |
|
|
32
|
+
| **Dashboard** | Basic stats | ✅ Full time-travel |
|
|
33
|
+
| **Proxy requests/month** | 300 | ✅ Unlimited |
|
|
34
|
+
| **MCP Server (all 32 tools)** | ❌ | ✅ |
|
|
35
|
+
| **The Brain — Semantic Memory** | ❌ | ✅ |
|
|
36
|
+
| **Zero-Token Static Analysis** | ❌ | ✅ |
|
|
37
|
+
| **Cross-Project Telepathy** | ❌ | ✅ |
|
|
38
|
+
| **AutoPilot & Auto-Heal** | ❌ | ✅ |
|
|
39
|
+
|
|
40
|
+
> **The MCP is Pro.** All 32 tools — The Brain, PreCrime predictor, AST Hologram, Entropy Score, Coupling Radar, workspace control, and every optimization tool — require a Pro license. Activate with `lemma activate <key>` → [Get Pro](https://lemma.nxus.studio/upgrade)
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## ⚡ What's in the Pro MCP
|
|
45
|
+
|
|
24
46
|
|
|
25
47
|
### 🧠 Shared Semantic Memory — The Brain
|
|
26
48
|
Lemma maintains a persistent vector database (ChromaDB) that accumulates knowledge across all your projects. Every solution, bug fix, and architecture decision you work through gets stored and semantically indexed. Future sessions can retrieve this knowledge in milliseconds — no cloud, no tokens, no re-explaining.
|
|
@@ -73,7 +95,7 @@ lemma start
|
|
|
73
95
|
|
|
74
96
|
| Command | Action |
|
|
75
97
|
| :--- | :--- |
|
|
76
|
-
| `lemma init` | Bootstraps config and auto-configures MCP for Claude Desktop, Cursor, Windsurf, Kiro, VS Code. |
|
|
98
|
+
| `lemma init` | Bootstraps config and auto-configures MCP for OpenCode, Claude Desktop, Cursor, Windsurf, Kiro, VS Code. |
|
|
77
99
|
| `lemma start` | Launches proxy, cache engine, and dashboard at `http://localhost:8081`. |
|
|
78
100
|
| `lemma stop` | Gracefully shuts down the background proxy. |
|
|
79
101
|
| `lemma status` | Health of all modules and active connections. |
|
|
@@ -101,6 +123,9 @@ lemma start
|
|
|
101
123
|
|
|
102
124
|
Add Lemma to any MCP-compatible IDE in seconds:
|
|
103
125
|
|
|
126
|
+
### OpenCode (Terminal AI)
|
|
127
|
+
Just run `lemma init`. Lemma automatically registers its MCP server in your `~/.opencode.json` and injects its autonomous rules so OpenCode works with zero configuration.
|
|
128
|
+
|
|
104
129
|
### Cursor / Windsurf / Kiro / Antigravity
|
|
105
130
|
1. Go to **Settings → MCP**
|
|
106
131
|
2. Add new server: **Command** = `lemma mcp`
|
|
@@ -121,7 +146,7 @@ Once connected, your IDE gains access to all **32 MCP tools** and Lemma auto-inj
|
|
|
121
146
|
|
|
122
147
|
---
|
|
123
148
|
|
|
124
|
-
## 🛠️ MCP Tools Reference (v0.9.
|
|
149
|
+
## 🛠️ MCP Tools Reference (v0.9.2 — 36 Tools)
|
|
125
150
|
|
|
126
151
|
### 🗂️ Workspace Tools
|
|
127
152
|
|
|
@@ -182,6 +207,15 @@ Once connected, your IDE gains access to all **32 MCP tools** and Lemma auto-inj
|
|
|
182
207
|
| `semantic_dedup_guard` | **Brain dedup firewall.** Before calling `store_memory`, pass content through here. If similarity ≥ 92% → rejects as duplicate. If 75–91% → warns and shows the similar entry. Keeps The Brain lean and dense. |
|
|
183
208
|
| `dead_export_necromancer` | **Dead code auditor.** Maps every `export` in the workspace against every `import`. Symbols exported but never imported anywhere = zombie code inflating your context. Reports dead exports by file with estimated token waste. |
|
|
184
209
|
|
|
210
|
+
### 🔍 PR Review Agent Tools (NEW in v0.9.2)
|
|
211
|
+
|
|
212
|
+
| Tool | Description |
|
|
213
|
+
| :--- | :--- |
|
|
214
|
+
| `review_diff` | Analyze a raw diff for bugs, security issues, and best practices before committing. |
|
|
215
|
+
| `review_pr` | Full PR review against a Git platform (GitHub, Azure DevOps, GitLab). Runs all 4 analyzers (Static, Security, Regression, Quality) and stores results in The Brain. |
|
|
216
|
+
| `pr_status` | Query the last review status and report for a given PR number and platform. |
|
|
217
|
+
| `generate_pr_workflow` | Generate a CI/CD workflow YAML (GitHub Actions or Azure Pipelines) that runs `lemma pr-review` as a step. |
|
|
218
|
+
|
|
185
219
|
### ⚡ TurboMode Auto-Injection
|
|
186
220
|
|
|
187
221
|
When connected via `lemma mcp`, Lemma auto-injects 7 rules into the agent's system prompt on handshake:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lemma-proxy.d.ts","sourceRoot":"","sources":["../../../src/cli/lemma-proxy.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"lemma-proxy.d.ts","sourceRoot":"","sources":["../../../src/cli/lemma-proxy.ts"],"names":[],"mappings":";AA2cA,wBAAgB,+BAA+B,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA4DvF;AAugED,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6KhL"}
|
|
@@ -43,6 +43,7 @@ function ask(query) {
|
|
|
43
43
|
const ComplexityRouter_1 = __importDefault(require("../proxy/ComplexityRouter"));
|
|
44
44
|
const SemanticScrubber_1 = __importDefault(require("../security/SemanticScrubber"));
|
|
45
45
|
const CloudSyncClient_1 = __importDefault(require("../cloud/CloudSyncClient"));
|
|
46
|
+
const reviewRunner_1 = require("../pr-review/reviewRunner");
|
|
46
47
|
const ContextSqueezer_1 = require("../utils/ContextSqueezer");
|
|
47
48
|
const AgentMultiplexer_1 = require("../proxy/AgentMultiplexer");
|
|
48
49
|
const SseRelay_1 = require("../proxy/SseRelay");
|
|
@@ -373,6 +374,26 @@ enabled = true
|
|
|
373
374
|
}
|
|
374
375
|
}
|
|
375
376
|
catch { }
|
|
377
|
+
// Register lemma MCP server in OpenCode user config (~/.opencode.json)
|
|
378
|
+
const openCodeMcpFile = path_1.default.join(os_1.default.homedir(), '.opencode.json');
|
|
379
|
+
try {
|
|
380
|
+
let openCodeConfig = {};
|
|
381
|
+
if (fs_1.default.existsSync(openCodeMcpFile)) {
|
|
382
|
+
openCodeConfig = JSON.parse(fs_1.default.readFileSync(openCodeMcpFile, 'utf8'));
|
|
383
|
+
}
|
|
384
|
+
if (!openCodeConfig.mcp)
|
|
385
|
+
openCodeConfig.mcp = {};
|
|
386
|
+
if (!openCodeConfig.mcp.lemma) {
|
|
387
|
+
openCodeConfig.mcp.lemma = {
|
|
388
|
+
command: "npx",
|
|
389
|
+
args: ["-y", "@nxuss/lemma", "mcp"],
|
|
390
|
+
enabled: true
|
|
391
|
+
};
|
|
392
|
+
fs_1.default.writeFileSync(openCodeMcpFile, JSON.stringify(openCodeConfig, null, 2));
|
|
393
|
+
console.log('✅ [OpenCode] Registered lemma MCP server in ~/.opencode.json');
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
catch { }
|
|
376
397
|
console.log(`✅ Auto-configured Lemma for [${project}]`);
|
|
377
398
|
}
|
|
378
399
|
const EVENT_LOG = [];
|
|
@@ -423,6 +444,7 @@ function injectIdeRules(projectName) {
|
|
|
423
444
|
{ name: 'Cursor (v2)', path: path_1.default.join(process.cwd(), '.cursor/rules/lemma.mdc') },
|
|
424
445
|
{ name: 'Windsurf', path: path_1.default.join(process.cwd(), '.windsurfrules') },
|
|
425
446
|
{ name: 'Cline', path: path_1.default.join(process.cwd(), '.clinerules') },
|
|
447
|
+
{ name: 'OpenCode', path: path_1.default.join(process.cwd(), '.opencode.md') },
|
|
426
448
|
];
|
|
427
449
|
for (const target of rulesTargets) {
|
|
428
450
|
try {
|
|
@@ -1514,6 +1536,9 @@ class LemmaServer {
|
|
|
1514
1536
|
});
|
|
1515
1537
|
this.app.get('/dashboard/*', (req, res) => res.sendFile(path_1.default.join(this.dashboardPath, 'index.html')));
|
|
1516
1538
|
}
|
|
1539
|
+
// Mount PR Review webhook endpoints
|
|
1540
|
+
const { createWebhookRouter } = require('../pr-review/webhook/WebhookServer');
|
|
1541
|
+
this.app.use('/api/webhook', createWebhookRouter());
|
|
1517
1542
|
}
|
|
1518
1543
|
startWorkspaceTimeWatcher() {
|
|
1519
1544
|
const cwd = process.cwd();
|
|
@@ -2338,7 +2363,7 @@ commander_1.program.command('init')
|
|
|
2338
2363
|
console.log('\n🧠 \x1b[35mAuto-configuring MCP for AI IDEs...\x1b[0m');
|
|
2339
2364
|
}
|
|
2340
2365
|
else {
|
|
2341
|
-
const ans = await ask('\n🧠 Configure MCP servers for your IDEs (Claude, Cursor, Windsurf, VS Code, Kiro, Codex)? (Y/n): ');
|
|
2366
|
+
const ans = await ask('\n🧠 Configure MCP servers for your IDEs (Claude, Cursor, Windsurf, VS Code, OpenCode, Kiro, Codex)? (Y/n): ');
|
|
2342
2367
|
if (ans.toLowerCase() === 'n' || ans.toLowerCase() === 'no') {
|
|
2343
2368
|
opts.configure = false;
|
|
2344
2369
|
console.log('⏭️ Skipping IDE auto-configuration');
|
|
@@ -2614,6 +2639,32 @@ commander_1.program.command('clipboard')
|
|
|
2614
2639
|
process.exit(1);
|
|
2615
2640
|
}
|
|
2616
2641
|
});
|
|
2642
|
+
commander_1.program.command('pr-review')
|
|
2643
|
+
.description('Run PR review via CLI (reads env vars for CI/CD: LEMMA_PLATFORM, LEMMA_REPO, LEMMA_PR_NUMBER)')
|
|
2644
|
+
.option('-p, --platform <platform>', 'Git platform (github, azure, gitlab)')
|
|
2645
|
+
.option('-r, --repo <repo>', 'Repository (owner/repo)')
|
|
2646
|
+
.option('-n, --pr-number <number>', 'PR number')
|
|
2647
|
+
.option('-t, --threshold <number>', 'Score threshold for auto-approve', '90')
|
|
2648
|
+
.option('--no-auto-approve', 'Skip auto-approve even if score meets threshold')
|
|
2649
|
+
.action(async (opts) => {
|
|
2650
|
+
const platform = opts.platform || process.env.LEMMA_PLATFORM || '';
|
|
2651
|
+
const repo = opts.repo || process.env.LEMMA_REPO || '';
|
|
2652
|
+
const prNumber = opts.prNumber || process.env.LEMMA_PR_NUMBER || '';
|
|
2653
|
+
const threshold = parseInt(opts.threshold, 10);
|
|
2654
|
+
const autoApprove = opts.autoApprove !== false;
|
|
2655
|
+
if (!platform || !repo || !prNumber) {
|
|
2656
|
+
console.error('Error: platform, repo, and pr-number are required.\nSet via args or LEMMA_PLATFORM, LEMMA_REPO, LEMMA_PR_NUMBER env vars.');
|
|
2657
|
+
process.exit(1);
|
|
2658
|
+
}
|
|
2659
|
+
try {
|
|
2660
|
+
const result = await (0, reviewRunner_1.runPRReview)(platform, repo, parseInt(prNumber, 10), { threshold, autoApprove });
|
|
2661
|
+
console.log(JSON.stringify(result, null, 2));
|
|
2662
|
+
}
|
|
2663
|
+
catch (err) {
|
|
2664
|
+
console.error(`PR review failed: ${err.message}`);
|
|
2665
|
+
process.exit(1);
|
|
2666
|
+
}
|
|
2667
|
+
});
|
|
2617
2668
|
if (process.argv[1] && (process.argv[1].includes('lemma') || process.argv[1].endsWith('.cjs') || process.argv[1].endsWith('.js'))) {
|
|
2618
2669
|
// Bare `lemma` with no args → show welcome screen
|
|
2619
2670
|
if (process.argv.length <= 2) {
|