@nxuss/lemma 1.6.0 → 1.7.1
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 +114 -5
- package/bin/checkpoint.js +49 -0
- package/bin/init.js +21 -2
- package/dist/cjs/mcp/prompts.d.ts +1 -2
- package/dist/cjs/mcp/prompts.d.ts.map +1 -1
- package/dist/cjs/mcp/prompts.js +29 -126
- package/dist/cjs/mcp/prompts.js.map +1 -1
- package/dist/cjs/mcp/resources.d.ts.map +1 -1
- package/dist/cjs/mcp/resources.js +4 -4
- package/dist/cjs/mcp/resources.js.map +1 -1
- package/dist/cjs/mcp/tool-profiles.d.ts +55 -0
- package/dist/cjs/mcp/tool-profiles.d.ts.map +1 -0
- package/dist/cjs/mcp/tool-profiles.js +204 -0
- package/dist/cjs/mcp/tool-profiles.js.map +1 -0
- package/dist/cjs/mcp/tools.d.ts +12 -0
- package/dist/cjs/mcp/tools.d.ts.map +1 -1
- package/dist/cjs/mcp/tools.js +175 -26
- package/dist/cjs/mcp/tools.js.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.d.ts +36 -2
- package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.js +104 -23
- package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
- package/dist/cjs/utils/AutoContextBundle.d.ts.map +1 -1
- package/dist/cjs/utils/AutoContextBundle.js +17 -20
- package/dist/cjs/utils/AutoContextBundle.js.map +1 -1
- package/dist/cjs/utils/ConversationCheckpoint.d.ts +13 -0
- package/dist/cjs/utils/ConversationCheckpoint.d.ts.map +1 -1
- package/dist/cjs/utils/ConversationCheckpoint.js +58 -0
- package/dist/cjs/utils/ConversationCheckpoint.js.map +1 -1
- package/dist/cjs/utils/TestAutofixInterceptor.d.ts.map +1 -1
- package/dist/cjs/utils/TestAutofixInterceptor.js +15 -26
- package/dist/cjs/utils/TestAutofixInterceptor.js.map +1 -1
- package/dist/esm/api/dashboardRoutes.d.ts +3 -3
- package/dist/esm/api/dashboardRoutes.js +1 -1
- package/dist/esm/api/server.d.ts +4 -4
- package/dist/esm/api/server.js +3 -3
- package/dist/esm/autopilot/AutopilotWatcher.js +3 -3
- package/dist/esm/autopilot/Notifier.d.ts +1 -1
- package/dist/esm/cli/lemma-proxy.js +14 -14
- package/dist/esm/cli/stack.d.ts +4 -4
- package/dist/esm/cli/stack.js +5 -5
- package/dist/esm/cloud/KeyManager.d.ts +1 -1
- package/dist/esm/cloud/KeyManager.js +1 -1
- package/dist/esm/cloud/TenantCache.d.ts +1 -1
- package/dist/esm/cloud/TenantCache.js +1 -1
- package/dist/esm/cloud/index.d.ts +3 -3
- package/dist/esm/cloud/index.js +3 -3
- package/dist/esm/cloud/server.d.ts +3 -3
- package/dist/esm/cloud/server.js +5 -5
- package/dist/esm/config/index.d.ts +1 -1
- package/dist/esm/config/index.js +1 -1
- package/dist/esm/consensus/index.d.ts +2 -2
- package/dist/esm/consensus/index.js +2 -2
- package/dist/esm/core/AgentRegistry.d.ts +1 -1
- package/dist/esm/core/AgentRegistry.js +1 -1
- package/dist/esm/core/DashboardBroadcaster.d.ts +3 -3
- package/dist/esm/core/DashboardBroadcaster.js +2 -2
- package/dist/esm/core/DashboardWebSocketServer.d.ts +1 -1
- package/dist/esm/core/DashboardWebSocketServer.js +1 -1
- package/dist/esm/core/GhostAlchemist.js +1 -1
- package/dist/esm/core/GhostListener.js +2 -2
- package/dist/esm/core/OrchestrationEngine.d.ts +3 -3
- package/dist/esm/core/OrchestrationEngine.js +2 -2
- package/dist/esm/core/SubconsciousEngine.d.ts +1 -1
- package/dist/esm/core/SubconsciousEngine.js +2 -2
- package/dist/esm/core/WebSocketServer.d.ts +2 -2
- package/dist/esm/core/WebSocketServer.js +1 -1
- package/dist/esm/core/index.d.ts +6 -6
- package/dist/esm/core/index.js +6 -6
- package/dist/esm/core/router.d.ts +3 -3
- package/dist/esm/core/router.js +1 -1
- package/dist/esm/db/database.js +1 -1
- package/dist/esm/embed.d.ts +2 -2
- package/dist/esm/embed.js +2 -2
- package/dist/esm/examples/basic-usage.js +1 -1
- package/dist/esm/index.d.ts +14 -14
- package/dist/esm/index.js +14 -14
- package/dist/esm/infra/analyzers/DriftDetector.d.ts +1 -1
- package/dist/esm/infra/analyzers/InfraAnalyzer.d.ts +1 -1
- package/dist/esm/infra/analyzers/MonolithAnalyzer.d.ts +1 -1
- package/dist/esm/infra/analyzers/index.d.ts +3 -3
- package/dist/esm/infra/analyzers/index.js +3 -3
- package/dist/esm/infra/cli.js +2 -2
- package/dist/esm/infra/config.d.ts +1 -1
- package/dist/esm/infra/index.d.ts +5 -5
- package/dist/esm/infra/index.js +5 -5
- package/dist/esm/infra/mcp-tools.js +5 -5
- package/dist/esm/infra/providers/InfraProvider.d.ts +1 -1
- package/dist/esm/infra/providers/JenkinsProvider.d.ts +2 -2
- package/dist/esm/infra/providers/OKDProvider.d.ts +2 -2
- package/dist/esm/infra/providers/TerraformProvider.d.ts +2 -2
- package/dist/esm/infra/providers/index.d.ts +5 -5
- package/dist/esm/infra/providers/index.js +3 -3
- package/dist/esm/mcp/index.js +5 -5
- package/dist/esm/mcp/prompts.d.ts +1 -2
- package/dist/esm/mcp/prompts.d.ts.map +1 -1
- package/dist/esm/mcp/prompts.js +28 -125
- package/dist/esm/mcp/prompts.js.map +1 -1
- package/dist/esm/mcp/resources.d.ts.map +1 -1
- package/dist/esm/mcp/resources.js +5 -5
- package/dist/esm/mcp/resources.js.map +1 -1
- package/dist/esm/mcp/tool-profiles.d.ts +55 -0
- package/dist/esm/mcp/tool-profiles.d.ts.map +1 -0
- package/dist/esm/mcp/tool-profiles.js +196 -0
- package/dist/esm/mcp/tool-profiles.js.map +1 -0
- package/dist/esm/mcp/tools.d.ts +12 -0
- package/dist/esm/mcp/tools.d.ts.map +1 -1
- package/dist/esm/mcp/tools.js +209 -63
- package/dist/esm/mcp/tools.js.map +1 -1
- package/dist/esm/observability/IdeContextSync.d.ts +1 -1
- package/dist/esm/observability/IdeContextSync.js +5 -5
- package/dist/esm/pr-review/PRReviewEngine.d.ts +1 -1
- package/dist/esm/pr-review/PRReviewEngine.js +4 -4
- package/dist/esm/pr-review/ReviewStore.d.ts +1 -1
- package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.d.ts +2 -2
- package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.js +1 -1
- package/dist/esm/pr-review/adapters/GitHubAdapter.d.ts +2 -2
- package/dist/esm/pr-review/adapters/GitHubAdapter.js +1 -1
- package/dist/esm/pr-review/adapters/GitLabAdapter.d.ts +2 -2
- package/dist/esm/pr-review/adapters/GitLabAdapter.js +1 -1
- package/dist/esm/pr-review/adapters/GitPlatformAdapter.d.ts +1 -1
- package/dist/esm/pr-review/adapters/index.d.ts +4 -4
- package/dist/esm/pr-review/adapters/index.js +3 -3
- package/dist/esm/pr-review/analyzers/QualityGrader.d.ts +1 -1
- package/dist/esm/pr-review/analyzers/RegressionDetector.d.ts +1 -1
- package/dist/esm/pr-review/analyzers/SecurityScanner.d.ts +1 -1
- package/dist/esm/pr-review/analyzers/StaticAnalyzer.d.ts +1 -1
- package/dist/esm/pr-review/analyzers/index.d.ts +8 -8
- package/dist/esm/pr-review/analyzers/index.js +4 -4
- package/dist/esm/pr-review/bridge/BrainBridge.d.ts +1 -1
- package/dist/esm/pr-review/bridge/BrainBridge.js +1 -1
- package/dist/esm/pr-review/bridge/index.d.ts +1 -1
- package/dist/esm/pr-review/bridge/index.js +1 -1
- package/dist/esm/pr-review/index.d.ts +4 -4
- package/dist/esm/pr-review/index.js +2 -2
- package/dist/esm/pr-review/reviewRunner.d.ts +2 -2
- package/dist/esm/pr-review/reviewRunner.js +6 -6
- package/dist/esm/pr-review/webhook/WebhookServer.js +1 -1
- package/dist/esm/pr-review/webhook/index.d.ts +1 -1
- package/dist/esm/pr-review/webhook/index.js +1 -1
- package/dist/esm/protocol/flows.d.ts +1 -1
- package/dist/esm/protocol/flows.js +1 -1
- package/dist/esm/protocol/index.d.ts +4 -4
- package/dist/esm/protocol/index.js +4 -4
- package/dist/esm/protocol/utils.d.ts +1 -1
- package/dist/esm/protocol/utils.js +2 -2
- package/dist/esm/protocol/validators.d.ts +1 -1
- package/dist/esm/protocol/validators.js +1 -1
- package/dist/esm/proxy/ContextInjector.d.ts +1 -1
- package/dist/esm/proxy/Gatekeeper.d.ts +1 -1
- package/dist/esm/security/SecurityMiddleware.d.ts +1 -1
- package/dist/esm/security/SecurityMiddleware.js +3 -3
- package/dist/esm/security/index.d.ts +4 -4
- package/dist/esm/security/index.js +4 -4
- package/dist/esm/speculative/SpeculativeCache.d.ts +2 -2
- package/dist/esm/speculative/SpeculativeEngine.d.ts +2 -2
- package/dist/esm/speculative/SpeculativeEngine.js +3 -3
- package/dist/esm/speculative/WorkerPool.d.ts +1 -1
- package/dist/esm/speculative/index.d.ts +4 -4
- package/dist/esm/speculative/index.js +4 -4
- package/dist/esm/subconscious/SemanticCache.d.ts +2 -2
- package/dist/esm/subconscious/SemanticCache.js +2 -2
- package/dist/esm/subconscious/SubconsciousEngine.d.ts +1 -1
- package/dist/esm/subconscious/SubconsciousEngine.js +3 -3
- package/dist/esm/subconscious/TheBrainV2.d.ts +36 -2
- package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/esm/subconscious/TheBrainV2.js +103 -23
- package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
- package/dist/esm/subconscious/index.d.ts +4 -4
- package/dist/esm/subconscious/index.js +4 -4
- package/dist/esm/utils/AutoContextBundle.d.ts +1 -1
- package/dist/esm/utils/AutoContextBundle.d.ts.map +1 -1
- package/dist/esm/utils/AutoContextBundle.js +20 -23
- package/dist/esm/utils/AutoContextBundle.js.map +1 -1
- package/dist/esm/utils/BulkFileDigest.js +2 -2
- package/dist/esm/utils/ClipboardWatcher.js +2 -2
- package/dist/esm/utils/ContextCollapser.js +1 -1
- package/dist/esm/utils/ConversationCheckpoint.d.ts +13 -0
- package/dist/esm/utils/ConversationCheckpoint.d.ts.map +1 -1
- package/dist/esm/utils/ConversationCheckpoint.js +57 -0
- package/dist/esm/utils/ConversationCheckpoint.js.map +1 -1
- package/dist/esm/utils/ExecutiveReport.js +1 -1
- package/dist/esm/utils/StructuralSearch.d.ts +1 -1
- package/dist/esm/utils/SurgicalASTInsert.js +1 -1
- package/dist/esm/utils/SymbolSurgicalContext.js +1 -1
- package/dist/esm/utils/TestAutofixInterceptor.d.ts.map +1 -1
- package/dist/esm/utils/TestAutofixInterceptor.js +15 -26
- package/dist/esm/utils/TestAutofixInterceptor.js.map +1 -1
- package/dist/esm/utils/WorkspaceSearch.js +0 -0
- package/dist/esm/utils/logger.js +1 -1
- package/package.json +9 -10
- package/sdks/crewai/README.md +178 -0
- package/sdks/crewai/dist/index.d.ts +130 -0
- package/sdks/crewai/dist/index.js +308 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
|
+
import { execFileSync } from 'child_process';
|
|
3
4
|
const CHECKPOINT_DIR = '.lemma/session';
|
|
4
5
|
const MAX_CHECKPOINTS = 10;
|
|
5
6
|
function getDir(projectRoot) {
|
|
@@ -43,6 +44,62 @@ export function saveCheckpoint(checkpoint, projectRoot) {
|
|
|
43
44
|
}
|
|
44
45
|
return full;
|
|
45
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Builds and saves a checkpoint from repository state alone.
|
|
49
|
+
*
|
|
50
|
+
* The model-driven path (calling `conversation_checkpoint` with action "save") depends on the
|
|
51
|
+
* assistant remembering to do it at the end of a session, which in practice does not happen —
|
|
52
|
+
* `.lemma/session/` did not exist in this repo across six releases. This derives what it can
|
|
53
|
+
* from git without any model involvement, so a session-end hook can call it unconditionally.
|
|
54
|
+
*
|
|
55
|
+
* It cannot recover decisions or pending tasks — those only exist in the conversation. Those
|
|
56
|
+
* fields stay empty here rather than being invented, and a model-written checkpoint that has
|
|
57
|
+
* them is always the better record when one exists.
|
|
58
|
+
*/
|
|
59
|
+
export function captureAutoCheckpoint(projectRoot, summary) {
|
|
60
|
+
const git = (args) => {
|
|
61
|
+
try {
|
|
62
|
+
// trimEnd, not trim: `git status --porcelain` encodes the status in the first two
|
|
63
|
+
// columns, so stripping leading whitespace would eat the first line's status char
|
|
64
|
+
// and take the first character of its filename with it.
|
|
65
|
+
return execFileSync('git', ['-C', projectRoot, ...args.split(' ')], {
|
|
66
|
+
encoding: 'utf8',
|
|
67
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
68
|
+
}).trimEnd();
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return '';
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const status = git('status --porcelain');
|
|
75
|
+
const branch = git('rev-parse --abbrev-ref HEAD');
|
|
76
|
+
if (!branch)
|
|
77
|
+
return null; // not a git repo — nothing to derive from
|
|
78
|
+
const filesModified = status
|
|
79
|
+
.split('\n')
|
|
80
|
+
.filter(Boolean)
|
|
81
|
+
.map((l) => l.slice(3).trim())
|
|
82
|
+
.filter(Boolean);
|
|
83
|
+
const recentCommits = git('log -3 --pretty=format:%s').split('\n').filter(Boolean);
|
|
84
|
+
const derived = [
|
|
85
|
+
`Branch: ${branch}`,
|
|
86
|
+
filesModified.length
|
|
87
|
+
? `${filesModified.length} file(s) with uncommitted changes.`
|
|
88
|
+
: 'Working tree clean.',
|
|
89
|
+
recentCommits.length ? `Recent commits: ${recentCommits.join(' | ')}` : '',
|
|
90
|
+
]
|
|
91
|
+
.filter(Boolean)
|
|
92
|
+
.join(' ');
|
|
93
|
+
return saveCheckpoint({
|
|
94
|
+
projectPath: projectRoot,
|
|
95
|
+
filesModified,
|
|
96
|
+
// Only the conversation knows these; an auto-capture must not fabricate them.
|
|
97
|
+
decisionsMade: [],
|
|
98
|
+
bugsResolved: [],
|
|
99
|
+
tasksPending: [],
|
|
100
|
+
summary: summary ? `${summary}\n\n${derived}` : derived,
|
|
101
|
+
}, projectRoot);
|
|
102
|
+
}
|
|
46
103
|
export function loadLatestCheckpoint(projectRoot) {
|
|
47
104
|
const files = listCheckpoints(projectRoot);
|
|
48
105
|
if (files.length === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationCheckpoint.js","sourceRoot":"","sources":["../../../src/utils/ConversationCheckpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ConversationCheckpoint.js","sourceRoot":"","sources":["../../../src/utils/ConversationCheckpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
import fs from 'fs';
|
|
11
11
|
import path from 'path';
|
|
12
12
|
import * as ts from 'typescript';
|
|
13
|
-
import { safeResolvePath } from '../mcp/utils';
|
|
13
|
+
import { safeResolvePath } from '../mcp/utils.js';
|
|
14
14
|
/**
|
|
15
15
|
* Traverses AST to find the node defining the specified symbol name.
|
|
16
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestAutofixInterceptor.d.ts","sourceRoot":"","sources":["../../../src/utils/TestAutofixInterceptor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TestAutofixInterceptor.d.ts","sourceRoot":"","sources":["../../../src/utils/TestAutofixInterceptor.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AA6ED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,YAAa,EAC5B,WAAW,EAAE,MAAM,GAClB,iBAAiB,CAmCnB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { execSync } from 'child_process';
|
|
2
|
+
import { getBrain, deriveProjectId } from '../subconscious/TheBrainV2.js';
|
|
2
3
|
function extractFailures(output) {
|
|
3
4
|
const failures = [];
|
|
4
5
|
// Jest/Vitest failure pattern
|
|
@@ -51,35 +52,23 @@ function extractTestCounts(output) {
|
|
|
51
52
|
}
|
|
52
53
|
return { total, passed, failed };
|
|
53
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Looks for a previously stored fix for a test failure.
|
|
57
|
+
*
|
|
58
|
+
* Previously scanned `<project>/.lemma/memory/*.json` — a directory no code path writes —
|
|
59
|
+
* so `brainHit` was always false and the "Brain-suggested fix" feature never fired once.
|
|
60
|
+
* Now it asks the Brain directly, which also replaces the hand-rolled token overlap score
|
|
61
|
+
* with the BM25 ranking the Brain already implements.
|
|
62
|
+
*/
|
|
54
63
|
function searchBrainForFix(errorMessage, projectRoot) {
|
|
55
64
|
try {
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
65
|
+
const results = getBrain().search(errorMessage, 1, 0.35, {
|
|
66
|
+
projectId: deriveProjectId(projectRoot),
|
|
67
|
+
});
|
|
68
|
+
const top = results[0];
|
|
69
|
+
if (!top)
|
|
60
70
|
return { fix: null, hit: false };
|
|
61
|
-
|
|
62
|
-
const files = fs.readdirSync(brainDir).filter((f) => f.endsWith('.json'));
|
|
63
|
-
let bestScore = 0;
|
|
64
|
-
let bestFix = null;
|
|
65
|
-
for (const f of files) {
|
|
66
|
-
try {
|
|
67
|
-
const data = JSON.parse(fs.readFileSync(path.join(brainDir, f), 'utf8'));
|
|
68
|
-
const content = `${data.query || ''} ${data.response || ''}`.toLowerCase();
|
|
69
|
-
let score = 0;
|
|
70
|
-
for (const token of errorTokens) {
|
|
71
|
-
if (content.includes(token))
|
|
72
|
-
score++;
|
|
73
|
-
}
|
|
74
|
-
const normalizedScore = errorTokens.length > 0 ? score / errorTokens.length : 0;
|
|
75
|
-
if (normalizedScore > bestScore && normalizedScore > 0.3) {
|
|
76
|
-
bestScore = normalizedScore;
|
|
77
|
-
bestFix = String(data.response).slice(0, 500);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
catch { }
|
|
81
|
-
}
|
|
82
|
-
return { fix: bestFix, hit: bestScore > 0.3 };
|
|
71
|
+
return { fix: String(top.response).slice(0, 500), hit: true };
|
|
83
72
|
}
|
|
84
73
|
catch {
|
|
85
74
|
return { fix: null, hit: false };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestAutofixInterceptor.js","sourceRoot":"","sources":["../../../src/utils/TestAutofixInterceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"TestAutofixInterceptor.js","sourceRoot":"","sources":["../../../src/utils/TestAutofixInterceptor.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
package/dist/esm/utils/logger.js
CHANGED
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nxuss/lemma",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.1",
|
|
4
4
|
"description": "Intelligent AI Gateway for IDEs & Agents — Semantic cache, Privacy Firewall, Infrastructure Command Center, 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",
|
|
8
8
|
"bin": {
|
|
9
9
|
"lemma": "lemma-proxy.cjs",
|
|
10
|
-
"lemma-mcp-server": "mcp-server.js"
|
|
10
|
+
"lemma-mcp-server": "mcp-server.js",
|
|
11
|
+
"lemma-checkpoint": "bin/checkpoint.js"
|
|
11
12
|
},
|
|
12
13
|
"exports": {
|
|
13
14
|
".": {
|
|
@@ -70,10 +71,6 @@
|
|
|
70
71
|
"default": "./dist/cjs/protocol/index.js"
|
|
71
72
|
}
|
|
72
73
|
},
|
|
73
|
-
"./langchain": {
|
|
74
|
-
"types": "./sdks/langchain/dist/index.d.ts",
|
|
75
|
-
"default": "./sdks/langchain/dist/index.js"
|
|
76
|
-
},
|
|
77
74
|
"./crewai": {
|
|
78
75
|
"types": "./sdks/crewai/dist/index.d.ts",
|
|
79
76
|
"default": "./sdks/crewai/dist/index.js"
|
|
@@ -88,7 +85,9 @@
|
|
|
88
85
|
"cache-proxy.js",
|
|
89
86
|
"bin/init.js",
|
|
90
87
|
"bin/cli.js",
|
|
88
|
+
"bin/checkpoint.js",
|
|
91
89
|
"dashboard/dist/**/*",
|
|
90
|
+
"sdks/crewai/dist/**/*",
|
|
92
91
|
"!dist/examples/**",
|
|
93
92
|
"README.md",
|
|
94
93
|
"LICENSE"
|
|
@@ -98,12 +97,12 @@
|
|
|
98
97
|
"proxy:stop": "node lemma-proxy.cjs stop",
|
|
99
98
|
"proxy:stats": "node lemma-proxy.cjs stats",
|
|
100
99
|
"proxy:status": "node lemma-proxy.cjs status",
|
|
101
|
-
"build": "npm run build:esm && npm run build:cjs && npm run
|
|
102
|
-
"build:full": "npm run build
|
|
100
|
+
"build": "npm run build:esm && npm run build:cjs && npm run build:sdks",
|
|
101
|
+
"build:full": "npm run build",
|
|
103
102
|
"build:esm": "tsc --outDir ./dist/esm",
|
|
104
103
|
"build:cjs": "tsc --project tsconfig.cjs.json",
|
|
105
104
|
"build:sdks": "npm run sdk:build",
|
|
106
|
-
"postbuild": "node scripts/post-build.js",
|
|
105
|
+
"postbuild": "node scripts/post-build.js && node scripts/fix-esm-extensions.js",
|
|
107
106
|
"dev": "npx tsx start-dev.ts",
|
|
108
107
|
"start": "node dist/cjs/index.js",
|
|
109
108
|
"test": "jest",
|
|
@@ -137,7 +136,7 @@
|
|
|
137
136
|
"stack:all": "bash scripts/launch-all.sh",
|
|
138
137
|
"sdk:langchain:build": "cd sdks/langchain && npm run build",
|
|
139
138
|
"sdk:crewai:build": "cd sdks/crewai && npm run build",
|
|
140
|
-
"sdk:build": "npm run sdk:
|
|
139
|
+
"sdk:build": "npm run sdk:crewai:build",
|
|
141
140
|
"keys:generate": "npx tsx scripts/manage-keys.ts generate",
|
|
142
141
|
"keys:list": "npx tsx scripts/manage-keys.ts list",
|
|
143
142
|
"keys:revoke": "npx tsx scripts/manage-keys.ts revoke"
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# @lemma/crewai
|
|
2
|
+
|
|
3
|
+
CrewAI integration for Lemma agent orchestration hub.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @lemma/crewai
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { LemmaCrewAgent } from '@lemma/crewai';
|
|
15
|
+
|
|
16
|
+
// Create an agent connected to Lemma
|
|
17
|
+
const agent = new LemmaCrewAgent({
|
|
18
|
+
routerUrl: 'ws://localhost:8080',
|
|
19
|
+
agentId: 'research-agent',
|
|
20
|
+
role: 'Researcher',
|
|
21
|
+
goal: 'Find and analyze information',
|
|
22
|
+
backstory: 'Expert researcher with deep analytical skills',
|
|
23
|
+
capabilities: ['research', 'analysis', 'web-search'],
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
// Connect to the hub
|
|
27
|
+
await agent.connect();
|
|
28
|
+
|
|
29
|
+
// Execute a task
|
|
30
|
+
const result = await agent.execute({
|
|
31
|
+
description: 'Research the latest trends in AI',
|
|
32
|
+
expectedOutput: 'A comprehensive report on AI trends',
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
console.log(result);
|
|
36
|
+
|
|
37
|
+
// Disconnect when done
|
|
38
|
+
agent.disconnect();
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Features
|
|
42
|
+
|
|
43
|
+
- **Semantic Caching**: Automatic caching of similar tasks
|
|
44
|
+
- **Agent Collaboration**: Discover and delegate to other agents
|
|
45
|
+
- **Task Routing**: Receive tasks from the orchestration hub
|
|
46
|
+
- **Real-time Monitoring**: Track performance through Lemma dashboard
|
|
47
|
+
- **CrewAI Compatible**: Works with existing CrewAI patterns
|
|
48
|
+
|
|
49
|
+
## Configuration
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
interface LemmaCrewConfig {
|
|
53
|
+
routerUrl: string; // WebSocket URL of Lemma router
|
|
54
|
+
agentId: string; // Unique agent identifier
|
|
55
|
+
role: string; // Agent role (CrewAI concept)
|
|
56
|
+
goal: string; // Agent goal
|
|
57
|
+
backstory?: string; // Agent backstory
|
|
58
|
+
capabilities?: string[]; // Agent capabilities
|
|
59
|
+
verbose?: boolean; // Enable verbose logging
|
|
60
|
+
allowDelegation?: boolean; // Allow task delegation
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Advanced Usage
|
|
65
|
+
|
|
66
|
+
### Multi-Agent Crew
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
import { EngramCrew } from '@engram/crewai';
|
|
70
|
+
|
|
71
|
+
const crew = new EngramCrew({
|
|
72
|
+
routerUrl: 'ws://localhost:8080',
|
|
73
|
+
agents: [
|
|
74
|
+
{
|
|
75
|
+
agentId: 'researcher',
|
|
76
|
+
role: 'Researcher',
|
|
77
|
+
goal: 'Research information',
|
|
78
|
+
capabilities: ['research', 'web-search'],
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
agentId: 'writer',
|
|
82
|
+
role: 'Writer',
|
|
83
|
+
goal: 'Write compelling content',
|
|
84
|
+
capabilities: ['writing', 'editing'],
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
agentId: 'reviewer',
|
|
88
|
+
role: 'Reviewer',
|
|
89
|
+
goal: 'Review and improve content',
|
|
90
|
+
capabilities: ['review', 'quality-assurance'],
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
await crew.connect();
|
|
96
|
+
|
|
97
|
+
// Execute a multi-step workflow
|
|
98
|
+
const result = await crew.kickoff({
|
|
99
|
+
task: 'Create a blog post about quantum computing',
|
|
100
|
+
process: 'sequential', // or 'hierarchical'
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
console.log(result);
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Task Delegation
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
const agent = new EngramCrewAgent({
|
|
110
|
+
routerUrl: 'ws://localhost:8080',
|
|
111
|
+
agentId: 'manager-agent',
|
|
112
|
+
role: 'Manager',
|
|
113
|
+
goal: 'Coordinate team tasks',
|
|
114
|
+
allowDelegation: true,
|
|
115
|
+
capabilities: ['management', 'coordination'],
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
await agent.connect();
|
|
119
|
+
|
|
120
|
+
// Agent can delegate subtasks to other agents
|
|
121
|
+
const result = await agent.execute({
|
|
122
|
+
description: 'Create a marketing campaign',
|
|
123
|
+
allowDelegation: true,
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Benefits
|
|
128
|
+
|
|
129
|
+
1. **60-80% Cost Reduction**: Semantic caching eliminates redundant LLM calls
|
|
130
|
+
2. **Sub-50ms Responses**: Cached results return instantly
|
|
131
|
+
3. **Agent Discovery**: Automatically find capable agents for tasks
|
|
132
|
+
4. **Centralized Monitoring**: Real-time visibility through dashboard
|
|
133
|
+
5. **Fault Tolerance**: Auto-reconnection and error handling
|
|
134
|
+
|
|
135
|
+
## Examples
|
|
136
|
+
|
|
137
|
+
### Research Agent
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
const researcher = new EngramCrewAgent({
|
|
141
|
+
routerUrl: 'ws://localhost:8080',
|
|
142
|
+
agentId: 'researcher-001',
|
|
143
|
+
role: 'Senior Researcher',
|
|
144
|
+
goal: 'Conduct thorough research on any topic',
|
|
145
|
+
backstory: 'PhD in Computer Science with 10 years of research experience',
|
|
146
|
+
capabilities: ['research', 'analysis', 'fact-checking'],
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
await researcher.connect();
|
|
150
|
+
|
|
151
|
+
const findings = await researcher.execute({
|
|
152
|
+
description: 'Research the impact of AI on healthcare',
|
|
153
|
+
expectedOutput: 'Detailed research report with citations',
|
|
154
|
+
});
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Code Review Agent
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
const reviewer = new EngramCrewAgent({
|
|
161
|
+
routerUrl: 'ws://localhost:8080',
|
|
162
|
+
agentId: 'code-reviewer',
|
|
163
|
+
role: 'Senior Code Reviewer',
|
|
164
|
+
goal: 'Review code for quality and security',
|
|
165
|
+
capabilities: ['code-review', 'security-audit', 'best-practices'],
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
await reviewer.connect();
|
|
169
|
+
|
|
170
|
+
const review = await reviewer.execute({
|
|
171
|
+
description: 'Review this TypeScript code for issues',
|
|
172
|
+
context: { code: '...' },
|
|
173
|
+
});
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## License
|
|
177
|
+
|
|
178
|
+
MIT
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lemma Crew Configuration
|
|
3
|
+
*/
|
|
4
|
+
export interface LemmaCrewConfig {
|
|
5
|
+
/** WebSocket URL of the Lemma router */
|
|
6
|
+
routerUrl: string;
|
|
7
|
+
/** Agent ID */
|
|
8
|
+
agentId: string;
|
|
9
|
+
/** Agent role (CrewAI concept) */
|
|
10
|
+
role: string;
|
|
11
|
+
/** Agent goal */
|
|
12
|
+
goal: string;
|
|
13
|
+
/** Agent backstory */
|
|
14
|
+
backstory?: string;
|
|
15
|
+
/** Capabilities this agent provides */
|
|
16
|
+
capabilities?: string[];
|
|
17
|
+
/** Enable verbose logging */
|
|
18
|
+
verbose?: boolean;
|
|
19
|
+
/** Allow task delegation */
|
|
20
|
+
allowDelegation?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Task execution request
|
|
24
|
+
*/
|
|
25
|
+
export interface TaskRequest {
|
|
26
|
+
description: string;
|
|
27
|
+
expectedOutput?: string;
|
|
28
|
+
context?: any;
|
|
29
|
+
allowDelegation?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Task execution result
|
|
33
|
+
*/
|
|
34
|
+
export interface TaskResult {
|
|
35
|
+
success: boolean;
|
|
36
|
+
output?: string;
|
|
37
|
+
error?: string;
|
|
38
|
+
executionTime: number;
|
|
39
|
+
cached?: boolean;
|
|
40
|
+
similarity?: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* CrewAI Agent integrated with Lemma Router
|
|
44
|
+
*/
|
|
45
|
+
export declare class LemmaCrewAgent {
|
|
46
|
+
private ws;
|
|
47
|
+
private config;
|
|
48
|
+
private connected;
|
|
49
|
+
private pendingTasks;
|
|
50
|
+
constructor(config: LemmaCrewConfig);
|
|
51
|
+
/**
|
|
52
|
+
* Connect to Lemma router
|
|
53
|
+
*/
|
|
54
|
+
connect(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Disconnect from router
|
|
57
|
+
*/
|
|
58
|
+
disconnect(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Execute a task
|
|
61
|
+
*/
|
|
62
|
+
execute(task: TaskRequest): Promise<TaskResult>;
|
|
63
|
+
/**
|
|
64
|
+
* Handle incoming message from router
|
|
65
|
+
*/
|
|
66
|
+
private handleMessage;
|
|
67
|
+
/**
|
|
68
|
+
* Handle task assignment from router
|
|
69
|
+
*/
|
|
70
|
+
private handleTaskAssign;
|
|
71
|
+
/**
|
|
72
|
+
* Handle task response from router
|
|
73
|
+
*/
|
|
74
|
+
private handleTaskResponse;
|
|
75
|
+
/**
|
|
76
|
+
* Perform task (override in subclasses)
|
|
77
|
+
*/
|
|
78
|
+
protected performTask(description: string, parameters: any): Promise<string>;
|
|
79
|
+
/**
|
|
80
|
+
* Send message to router
|
|
81
|
+
*/
|
|
82
|
+
private send;
|
|
83
|
+
/**
|
|
84
|
+
* Log message if verbose
|
|
85
|
+
*/
|
|
86
|
+
private log;
|
|
87
|
+
/**
|
|
88
|
+
* Get agent info
|
|
89
|
+
*/
|
|
90
|
+
getInfo(): {
|
|
91
|
+
agentId: string;
|
|
92
|
+
role: string;
|
|
93
|
+
goal: string;
|
|
94
|
+
backstory: string;
|
|
95
|
+
capabilities: string[];
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Lemma Crew - Multi-agent orchestration
|
|
100
|
+
*/
|
|
101
|
+
export interface LemmaCrewOptions {
|
|
102
|
+
routerUrl: string;
|
|
103
|
+
agents: Omit<LemmaCrewConfig, 'routerUrl'>[];
|
|
104
|
+
verbose?: boolean;
|
|
105
|
+
}
|
|
106
|
+
export declare class LemmaCrew {
|
|
107
|
+
private agents;
|
|
108
|
+
private config;
|
|
109
|
+
constructor(config: LemmaCrewOptions);
|
|
110
|
+
/**
|
|
111
|
+
* Connect all agents
|
|
112
|
+
*/
|
|
113
|
+
connect(): Promise<void>;
|
|
114
|
+
/**
|
|
115
|
+
* Disconnect all agents
|
|
116
|
+
*/
|
|
117
|
+
disconnect(): void;
|
|
118
|
+
/**
|
|
119
|
+
* Execute a multi-agent workflow
|
|
120
|
+
*/
|
|
121
|
+
kickoff(options: {
|
|
122
|
+
task: string;
|
|
123
|
+
process?: 'sequential' | 'hierarchical';
|
|
124
|
+
}): Promise<any>;
|
|
125
|
+
/**
|
|
126
|
+
* Get all agents
|
|
127
|
+
*/
|
|
128
|
+
getAgents(): LemmaCrewAgent[];
|
|
129
|
+
}
|
|
130
|
+
export default LemmaCrewAgent;
|