@nxuss/lemma 0.4.6 → 0.4.8

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 (76) hide show
  1. package/README.md +21 -12
  2. package/dist/cjs/autopilot/AutopilotWatcher.d.ts +11 -0
  3. package/dist/cjs/autopilot/AutopilotWatcher.d.ts.map +1 -0
  4. package/dist/cjs/autopilot/AutopilotWatcher.js +119 -0
  5. package/dist/cjs/autopilot/AutopilotWatcher.js.map +1 -0
  6. package/dist/cjs/cli/lemma-proxy.d.ts +10 -0
  7. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -0
  8. package/dist/cjs/cli/lemma-proxy.js +1268 -0
  9. package/dist/cjs/cli/lemma-proxy.js.map +1 -0
  10. package/dist/cjs/cloud/CloudSyncClient.d.ts +10 -0
  11. package/dist/cjs/cloud/CloudSyncClient.d.ts.map +1 -0
  12. package/dist/cjs/cloud/CloudSyncClient.js +42 -0
  13. package/dist/cjs/cloud/CloudSyncClient.js.map +1 -0
  14. package/dist/cjs/mcp/index.d.ts +2 -0
  15. package/dist/cjs/mcp/index.d.ts.map +1 -0
  16. package/dist/cjs/mcp/index.js +260 -0
  17. package/dist/cjs/mcp/index.js.map +1 -0
  18. package/dist/cjs/observability/IdeContextSync.d.ts.map +1 -1
  19. package/dist/cjs/observability/IdeContextSync.js +7 -2
  20. package/dist/cjs/observability/IdeContextSync.js.map +1 -1
  21. package/dist/cjs/proxy/AgentMultiplexer.d.ts +9 -0
  22. package/dist/cjs/proxy/AgentMultiplexer.d.ts.map +1 -0
  23. package/dist/cjs/proxy/AgentMultiplexer.js +69 -0
  24. package/dist/cjs/proxy/AgentMultiplexer.js.map +1 -0
  25. package/dist/cjs/proxy/ComplexityRouter.d.ts +19 -0
  26. package/dist/cjs/proxy/ComplexityRouter.d.ts.map +1 -0
  27. package/dist/cjs/proxy/ComplexityRouter.js +79 -0
  28. package/dist/cjs/proxy/ComplexityRouter.js.map +1 -0
  29. package/dist/cjs/security/SemanticScrubber.d.ts +25 -0
  30. package/dist/cjs/security/SemanticScrubber.d.ts.map +1 -0
  31. package/dist/cjs/security/SemanticScrubber.js +99 -0
  32. package/dist/cjs/security/SemanticScrubber.js.map +1 -0
  33. package/dist/cjs/utils/ContextSqueezer.d.ts +44 -0
  34. package/dist/cjs/utils/ContextSqueezer.d.ts.map +1 -0
  35. package/dist/cjs/utils/ContextSqueezer.js +201 -0
  36. package/dist/cjs/utils/ContextSqueezer.js.map +1 -0
  37. package/dist/esm/autopilot/AutopilotWatcher.d.ts +11 -0
  38. package/dist/esm/autopilot/AutopilotWatcher.d.ts.map +1 -0
  39. package/dist/esm/autopilot/AutopilotWatcher.js +112 -0
  40. package/dist/esm/autopilot/AutopilotWatcher.js.map +1 -0
  41. package/dist/esm/cli/lemma-proxy.d.ts +10 -0
  42. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -0
  43. package/dist/esm/cli/lemma-proxy.js +1262 -0
  44. package/dist/esm/cli/lemma-proxy.js.map +1 -0
  45. package/dist/esm/cloud/CloudSyncClient.d.ts +10 -0
  46. package/dist/esm/cloud/CloudSyncClient.d.ts.map +1 -0
  47. package/dist/esm/cloud/CloudSyncClient.js +35 -0
  48. package/dist/esm/cloud/CloudSyncClient.js.map +1 -0
  49. package/dist/esm/mcp/index.d.ts +2 -0
  50. package/dist/esm/mcp/index.d.ts.map +1 -0
  51. package/dist/esm/mcp/index.js +255 -0
  52. package/dist/esm/mcp/index.js.map +1 -0
  53. package/dist/esm/observability/IdeContextSync.d.ts.map +1 -1
  54. package/dist/esm/observability/IdeContextSync.js +7 -2
  55. package/dist/esm/observability/IdeContextSync.js.map +1 -1
  56. package/dist/esm/proxy/AgentMultiplexer.d.ts +9 -0
  57. package/dist/esm/proxy/AgentMultiplexer.d.ts.map +1 -0
  58. package/dist/esm/proxy/AgentMultiplexer.js +62 -0
  59. package/dist/esm/proxy/AgentMultiplexer.js.map +1 -0
  60. package/dist/esm/proxy/ComplexityRouter.d.ts +19 -0
  61. package/dist/esm/proxy/ComplexityRouter.d.ts.map +1 -0
  62. package/dist/esm/proxy/ComplexityRouter.js +75 -0
  63. package/dist/esm/proxy/ComplexityRouter.js.map +1 -0
  64. package/dist/esm/security/SemanticScrubber.d.ts +25 -0
  65. package/dist/esm/security/SemanticScrubber.d.ts.map +1 -0
  66. package/dist/esm/security/SemanticScrubber.js +92 -0
  67. package/dist/esm/security/SemanticScrubber.js.map +1 -0
  68. package/dist/esm/utils/ContextSqueezer.d.ts +44 -0
  69. package/dist/esm/utils/ContextSqueezer.d.ts.map +1 -0
  70. package/dist/esm/utils/ContextSqueezer.js +193 -0
  71. package/dist/esm/utils/ContextSqueezer.js.map +1 -0
  72. package/lemma-proxy.cjs +32 -732
  73. package/package.json +3 -2
  74. package/src/cloud/CloudSyncClient.js +0 -35
  75. package/src/proxy/ComplexityRouter.js +0 -37
  76. package/src/security/SemanticScrubber.js +0 -54
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nxuss/lemma",
3
- "version": "0.4.6",
4
- "description": "Intelligent AI Gateway — Semantic cache, Privacy Firewall, and Autonomous Cost-Optimization for AI Agents.",
3
+ "version": "0.4.8",
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",
7
7
  "types": "./dist/esm/index.d.ts",
@@ -161,6 +161,7 @@
161
161
  "homepage": "https://github.com/Nxusbets/lemma#readme",
162
162
  "dependencies": {
163
163
  "@chroma-core/default-embed": "^0.1.9",
164
+ "@modelcontextprotocol/sdk": "^1.29.0",
164
165
  "@nxuss/lemma": "^0.4.5",
165
166
  "@types/cors": "^2.8.19",
166
167
  "axios": "^1.6.0",
@@ -1,35 +0,0 @@
1
- // Hive Mind - Cloud Sync Client for Team Caching
2
- const axios = require('axios');
3
-
4
- class CloudSyncClient {
5
- constructor(tenantId, cloudUrl) {
6
- this.tenantId = tenantId || process.env.LEMMA_TENANT_ID;
7
- this.cloudUrl = cloudUrl || 'https://lemma.nxus.studio/api/v1/tenant-cache';
8
- this.enabled = !!this.tenantId;
9
- }
10
-
11
- async get(prompt) {
12
- if (!this.enabled) return null;
13
- try {
14
- const res = await axios.post(`${this.cloudUrl}/query`, { prompt, tenantId: this.tenantId }, { timeout: 1500 });
15
- if (res.data && res.data.hit) {
16
- console.log(`[HiveMind] Cloud cache HIT for tenant ${this.tenantId}`);
17
- return res.data;
18
- }
19
- } catch (e) {
20
- // Fail silently for cache misses or network errors
21
- }
22
- return null;
23
- }
24
-
25
- async set(prompt, data) {
26
- if (!this.enabled) return;
27
- try {
28
- console.log(`[HiveMind] Pushing new knowledge to cloud cache for tenant ${this.tenantId}`);
29
- // Fire and forget
30
- axios.post(`${this.cloudUrl}/store`, { prompt, data, tenantId: this.tenantId }).catch(() => {});
31
- } catch (e) {}
32
- }
33
- }
34
-
35
- module.exports = CloudSyncClient;
@@ -1,37 +0,0 @@
1
- // Complexity Router - Evaluates prompt complexity to optimize LLM cost
2
- class ComplexityRouter {
3
- constructor() {
4
- this.cheapModel = 'gpt-4o-mini';
5
- this.complexKeywords = ['architecture', 'design', 'debug', 'trace', 'system', 'microservices', 'explain', 'why', 'refactor', 'optimize'];
6
- }
7
-
8
- evaluate(prompt, originalModel) {
9
- if (!prompt || prompt.length < 10) return { model: this.cheapModel, complexity: 'low' };
10
-
11
- const lower = prompt.toLowerCase();
12
- let isComplex = false;
13
-
14
- // Heuristic 1: Prompt Length
15
- if (prompt.length > 500) {
16
- isComplex = true;
17
- }
18
-
19
- // Heuristic 2: Keywords that imply deep reasoning
20
- for (const kw of this.complexKeywords) {
21
- if (lower.includes(kw)) {
22
- isComplex = true;
23
- break;
24
- }
25
- }
26
-
27
- if (isComplex) {
28
- console.log(`[ComplexityRouter] High complexity detected. Routing to ${originalModel}`);
29
- return { model: originalModel || 'gpt-4o', complexity: 'high' };
30
- } else {
31
- console.log(`[ComplexityRouter] Low complexity detected. Routing to ${this.cheapModel}`);
32
- return { model: this.cheapModel, complexity: 'low' };
33
- }
34
- }
35
- }
36
-
37
- module.exports = ComplexityRouter;
@@ -1,54 +0,0 @@
1
- // Privacy Firewall - Semantic Scrubber for PII and Secrets
2
- class SemanticScrubber {
3
- constructor() {
4
- this.patterns = [
5
- { name: 'API_KEY', regex: /(sk-[a-zA-Z0-9\-]{20,})/g },
6
- { name: 'EMAIL', regex: /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/g },
7
- { name: 'TOKEN', regex: /(Bearer\s+[a-zA-Z0-9\-._~+/]+=*)/gi }
8
- ];
9
- }
10
-
11
- mask(prompt) {
12
- let maskedPrompt = prompt;
13
- const tokenMap = {};
14
- let counter = 1;
15
-
16
- for (const pattern of this.patterns) {
17
- maskedPrompt = maskedPrompt.replace(pattern.regex, (match) => {
18
- const token = `[${pattern.name}_${counter++}]`;
19
- tokenMap[token] = match;
20
- return token;
21
- });
22
- }
23
-
24
- if (Object.keys(tokenMap).length > 0) {
25
- console.log(`[PrivacyFirewall] Masked ${Object.keys(tokenMap).length} secrets.`);
26
- }
27
-
28
- return { maskedPrompt, tokenMap };
29
- }
30
-
31
- unmask(responseObj, tokenMap) {
32
- if (!responseObj || Object.keys(tokenMap).length === 0) return responseObj;
33
-
34
- let str = typeof responseObj === 'string' ? responseObj : JSON.stringify(responseObj);
35
-
36
- for (const [token, value] of Object.entries(tokenMap)) {
37
- str = str.split(token).join(value);
38
- }
39
-
40
- return typeof responseObj === 'string' ? str : JSON.parse(str);
41
- }
42
-
43
- // Unmask a single stream chunk string
44
- unmaskString(str, tokenMap) {
45
- if (!str || Object.keys(tokenMap).length === 0) return str;
46
- let unmasked = str;
47
- for (const [token, value] of Object.entries(tokenMap)) {
48
- unmasked = unmasked.split(token).join(value);
49
- }
50
- return unmasked;
51
- }
52
- }
53
-
54
- module.exports = SemanticScrubber;