@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.
Files changed (166) hide show
  1. package/README.md +74 -10
  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 +878 -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 +878 -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
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # 🧠 Lemma v0.9.1
1
+ # 🧠 Lemma v0.9.3
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/@nxuss/lemma.svg?color=orange&style=flat-square)](https://www.npmjs.com/package/@nxuss/lemma)
4
4
  [![License](https://img.shields.io/npm/l/@nxuss/lemma.svg?color=blue&style=flat-square)](https://github.com/Nxusbets/lemma/blob/main/LICENSE)
5
- [![MCP Tools](https://img.shields.io/badge/MCP%20tools-32-ff69b4?style=flat-square)](https://github.com/Nxusbets/lemma)
5
+ [![MCP Tools](https://img.shields.io/badge/MCP%20tools-38-ff69b4?style=flat-square)](https://github.com/Nxusbets/lemma)
6
6
  [![Security](https://img.shields.io/badge/privacy-firewall%20active-blueviolet?style=flat-square)](https://github.com/Nxusbets/lemma)
7
7
  [![Caching](https://img.shields.io/badge/semantic%20memory-enabled-success?style=flat-square)](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 **32 MCP tools** — including zero-token static code intelligence that runs entirely on your machine with no LLM calls required.
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 32 tools)** | āŒ | āœ… |
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 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)
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 **32 MCP tools** and Lemma auto-injects the TurboMode system prompt on handshake.
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.0 — 32 Tools)
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 (NEW in v0.9.0)
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":";AAsbA,wBAAgB,+BAA+B,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA4DvF;AAmgED,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"}
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) {