@nxuss/lemma 0.9.1 ā 0.9.3
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 +74 -10
- 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 +878 -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 +878 -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.3
|
|
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,7 +16,7 @@
|
|
|
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 **38 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
|
|
|
@@ -31,19 +31,20 @@ Lemma is a high-performance orchestration layer that sits between your developme
|
|
|
31
31
|
| **Complexity Router** | ā
| ā
|
|
|
32
32
|
| **Dashboard** | Basic stats | ā
Full time-travel |
|
|
33
33
|
| **Proxy requests/month** | 300 | ā
Unlimited |
|
|
34
|
-
| **MCP Server (all
|
|
34
|
+
| **MCP Server (all 38 tools)** | ā | ā
|
|
|
35
35
|
| **The Brain ā Semantic Memory** | ā | ā
|
|
|
36
36
|
| **Zero-Token Static Analysis** | ā | ā
|
|
|
37
37
|
| **Cross-Project Telepathy** | ā | ā
|
|
|
38
38
|
| **AutoPilot & Auto-Heal** | ā | ā
|
|
|
39
|
+
| **`depgraph` ā Dependency Graph** | ā | ā
|
|
|
40
|
+
| **`refactor` ā Codemod Engine** | ā | ā
|
|
|
39
41
|
|
|
40
|
-
> **The MCP is Pro.** All
|
|
42
|
+
> **The MCP is Pro.** All 38 tools ā The Brain, PreCrime predictor, AST Hologram, Entropy Score, Coupling Radar, `depgraph`, `refactor`, and every optimization tool ā require a Pro license. Activate with `lemma activate <key>` ā [Get Pro](https://lemma.nxus.studio/upgrade)
|
|
41
43
|
|
|
42
44
|
---
|
|
43
45
|
|
|
44
46
|
## ā” What's in the Pro MCP
|
|
45
47
|
|
|
46
|
-
|
|
47
48
|
### š§ Shared Semantic Memory ā The Brain
|
|
48
49
|
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.
|
|
49
50
|
|
|
@@ -62,6 +63,48 @@ Mathematical chaos score (0-100) per file using the TS Compiler API. Measures cy
|
|
|
62
63
|
### šŗļø AST Hologram ā Zero Tokens
|
|
63
64
|
Scans the entire workspace and returns a dense JSON index of all exported symbols (classes, functions, interfaces, types, consts) with file paths and line numbers. Use this instead of reading individual files ā saves up to 90% tokens when navigating large codebases.
|
|
64
65
|
|
|
66
|
+
### š” `depgraph` ā Real-Time Dependency Graph *(NEW in v0.9.3)*
|
|
67
|
+
**Architecture-aware blast radius analysis.** Builds a real-time, bidirectional dependency graph for any file in the workspace using the TypeScript Compiler API ā zero LLM calls, zero tokens. Shows exactly what a file imports, what imports it (reverse dependencies), and what symbols it exports.
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
š¦ src/services/pantry.ts
|
|
71
|
+
āāā importa:
|
|
72
|
+
ā āāā src/lib/utils/ingredient-parser.ts ā parseIngredientString, normalizeUnit
|
|
73
|
+
ā āāā src/db/prisma.ts ā PrismaClient
|
|
74
|
+
āāā es importado por:
|
|
75
|
+
ā āāā src/app/actions/generate-recipe.ts
|
|
76
|
+
ā āāā src/components/PantryWidget.tsx
|
|
77
|
+
āāā exporta:
|
|
78
|
+
āāā applyRecipeDeductions
|
|
79
|
+
āāā getPantryBalance
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Supports `--depth` (1-5), `--format text|mermaid|json`, `--reverse`, `--circular` (cycle detection), and `--external` (include node_modules).
|
|
83
|
+
|
|
84
|
+
### š§ `refactor` ā Declarative Codemod Engine *(NEW in v0.9.3)*
|
|
85
|
+
**Multi-file refactoring with surgical precision.** Rename any symbol across the entire workspace or move files updating all importers ā using the TypeScript Compiler API for accurate AST-based reference detection. Zero LLM calls.
|
|
86
|
+
|
|
87
|
+
**`rename`** ā Finds every reference to a symbol (via AST, not text search) and renames it everywhere:
|
|
88
|
+
```bash
|
|
89
|
+
# Preview first
|
|
90
|
+
lemma refactor --operation rename --from "applyRecipeDeductions" --to "deductPantryIngredients" \
|
|
91
|
+
--file src/services/pantry.ts --dryRun
|
|
92
|
+
|
|
93
|
+
# Apply with TypeScript verification
|
|
94
|
+
lemma refactor --operation rename --from "applyRecipeDeductions" --to "deductPantryIngredients" \
|
|
95
|
+
--file src/services/pantry.ts --tscCheck
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**`move`** ā Moves a file physically and rewires every import path in the workspace:
|
|
99
|
+
```bash
|
|
100
|
+
lemma refactor --operation move \
|
|
101
|
+
--from src/lib/validation/recipe.schema.ts \
|
|
102
|
+
--to src/lib/schemas/recipe.ts \
|
|
103
|
+
--tscCheck
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Supports `--dryRun` (unified diff preview), `--tscCheck` (post-refactor type verification), and `--backup` (`.bak` files).
|
|
107
|
+
|
|
65
108
|
### š¦ Complexity Router
|
|
66
109
|
Intelligently evaluates each prompt and routes it to the most cost-effective model. Reserves premium models for complex reasoning, uses smaller models for simple tasks. Slashes your AI bill without sacrificing quality.
|
|
67
110
|
|
|
@@ -95,7 +138,7 @@ lemma start
|
|
|
95
138
|
|
|
96
139
|
| Command | Action |
|
|
97
140
|
| :--- | :--- |
|
|
98
|
-
| `lemma init` | Bootstraps config and auto-configures MCP for Claude Desktop, Cursor, Windsurf, Kiro, VS Code. |
|
|
141
|
+
| `lemma init` | Bootstraps config and auto-configures MCP for OpenCode, Claude Desktop, Cursor, Windsurf, Kiro, VS Code. |
|
|
99
142
|
| `lemma start` | Launches proxy, cache engine, and dashboard at `http://localhost:8081`. |
|
|
100
143
|
| `lemma stop` | Gracefully shuts down the background proxy. |
|
|
101
144
|
| `lemma status` | Health of all modules and active connections. |
|
|
@@ -123,6 +166,9 @@ lemma start
|
|
|
123
166
|
|
|
124
167
|
Add Lemma to any MCP-compatible IDE in seconds:
|
|
125
168
|
|
|
169
|
+
### OpenCode (Terminal AI)
|
|
170
|
+
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.
|
|
171
|
+
|
|
126
172
|
### Cursor / Windsurf / Kiro / Antigravity
|
|
127
173
|
1. Go to **Settings ā MCP**
|
|
128
174
|
2. Add new server: **Command** = `lemma mcp`
|
|
@@ -139,11 +185,11 @@ Add Lemma to any MCP-compatible IDE in seconds:
|
|
|
139
185
|
}
|
|
140
186
|
```
|
|
141
187
|
|
|
142
|
-
Once connected, your IDE gains access to all **
|
|
188
|
+
Once connected, your IDE gains access to all **38 MCP tools** and Lemma auto-injects the TurboMode system prompt on handshake.
|
|
143
189
|
|
|
144
190
|
---
|
|
145
191
|
|
|
146
|
-
## š ļø MCP Tools Reference (v0.9.
|
|
192
|
+
## š ļø MCP Tools Reference (v0.9.3 ā 38 Tools)
|
|
147
193
|
|
|
148
194
|
### šļø Workspace Tools
|
|
149
195
|
|
|
@@ -190,7 +236,7 @@ Once connected, your IDE gains access to all **32 MCP tools** and Lemma auto-inj
|
|
|
190
236
|
| `auto_heal` | Diagnose and auto-heal the latest crash from Lemma's live context logs. |
|
|
191
237
|
| `batch_tool_calls` | Execute multiple tool calls in parallel via `Promise.all`. High-throughput operations in a single MCP round-trip. |
|
|
192
238
|
|
|
193
|
-
### š® Zero-Token Static Intelligence Tools
|
|
239
|
+
### š® Zero-Token Static Intelligence Tools
|
|
194
240
|
|
|
195
241
|
> All tools in this section use **zero LLM tokens, zero Ollama, zero cloud**. Pure local computation via TypeScript Compiler API, git, and math.
|
|
196
242
|
|
|
@@ -204,6 +250,24 @@ Once connected, your IDE gains access to all **32 MCP tools** and Lemma auto-inj
|
|
|
204
250
|
| `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. |
|
|
205
251
|
| `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. |
|
|
206
252
|
|
|
253
|
+
### šļø Architecture & Refactoring Tools *(NEW in v0.9.3)*
|
|
254
|
+
|
|
255
|
+
> Architecture-aware tools that combine dependency analysis with surgical code transformation. **Zero LLM calls.**
|
|
256
|
+
|
|
257
|
+
| Tool | Description |
|
|
258
|
+
| :--- | :--- |
|
|
259
|
+
| `depgraph` | **Real-time dependency graph.** Builds a bidirectional import/export map for any file. Shows what a file imports, what imports it (reverse deps with `--reverse`), and what symbols it exports. Supports `--depth` 1-5, `--format text\|mermaid\|json`, `--circular` (cycle detection), and `--external` (include node_modules). Use before any refactor to measure blast radius. |
|
|
260
|
+
| `refactor` | **Declarative codemod engine.** `rename` renames a symbol across all files using AST-based reference detection (no false positives from string search). `move` relocates a file and rewires every import path in the workspace. Both support `--dryRun` (unified diff preview), `--tscCheck` (post-apply type verification), and `--backup` (`.bak` files). |
|
|
261
|
+
|
|
262
|
+
### š PR Review Agent Tools
|
|
263
|
+
|
|
264
|
+
| Tool | Description |
|
|
265
|
+
| :--- | :--- |
|
|
266
|
+
| `review_diff` | Analyze a raw diff for bugs, security issues, and best practices before committing. |
|
|
267
|
+
| `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. |
|
|
268
|
+
| `pr_status` | Query the last review status and report for a given PR number and platform. |
|
|
269
|
+
| `generate_pr_workflow` | Generate a CI/CD workflow YAML (GitHub Actions or Azure Pipelines) that runs `lemma pr-review` as a step. |
|
|
270
|
+
|
|
207
271
|
### ā” TurboMode Auto-Injection
|
|
208
272
|
|
|
209
273
|
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) {
|