@monoes/monomindcli 1.11.4 → 1.11.6
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/dist/src/commands/benchmark.d.ts.map +1 -1
- package/dist/src/commands/benchmark.js +17 -45
- package/dist/src/commands/benchmark.js.map +1 -1
- package/dist/src/commands/route.d.ts.map +1 -1
- package/dist/src/commands/route.js +18 -35
- package/dist/src/commands/route.js.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +2 -7
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph-compat.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph-compat.js +2 -2
- package/dist/src/mcp-tools/monograph-compat.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +1 -2
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +1 -2
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts.map +1 -1
- package/dist/src/memory/memory-initializer.js +49 -115
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/monovector/index.d.ts +1 -8
- package/dist/src/monovector/index.d.ts.map +1 -1
- package/dist/src/monovector/index.js +1 -13
- package/dist/src/monovector/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -2
- package/bundled-graph/dist/src/build.js +0 -73
- package/bundled-graph/dist/src/cluster.js +0 -120
- package/bundled-graph/package.json +0 -57
- package/dist/src/mcp-tools/ruvllm-tools.d.ts +0 -9
- package/dist/src/mcp-tools/ruvllm-tools.d.ts.map +0 -1
- package/dist/src/mcp-tools/ruvllm-tools.js +0 -295
- package/dist/src/mcp-tools/ruvllm-tools.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@monoes/monomindcli",
|
|
3
|
-
"version": "1.11.
|
|
3
|
+
"version": "1.11.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Monomind CLI - Enterprise AI agent orchestration with 60+ specialized agents, swarm coordination, MCP server, self-learning hooks, and vector memory for Claude Code",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -68,7 +68,6 @@
|
|
|
68
68
|
"dist",
|
|
69
69
|
"bin",
|
|
70
70
|
".claude",
|
|
71
|
-
"bundled-graph",
|
|
72
71
|
"scripts",
|
|
73
72
|
"README.md"
|
|
74
73
|
],
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import Graph from 'graphology';
|
|
2
|
-
// Mirrors upstream graphify's _normalize_id: lowercase + collapse non-alphanumeric to underscores.
|
|
3
|
-
function normalizeId(s) {
|
|
4
|
-
return s.replace(/[^a-zA-Z0-9]+/g, '_').replace(/^_+|_+$/g, '').toLowerCase();
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Build a graphology Graph from extracted nodes and edges.
|
|
8
|
-
* Deduplicates nodes by id, merges parallel edges with higher weight.
|
|
9
|
-
*/
|
|
10
|
-
export function buildGraph(extraction) {
|
|
11
|
-
const graph = new Graph({ type: 'directed', multi: false });
|
|
12
|
-
// Add all nodes — merge attributes if already present (dedup by id)
|
|
13
|
-
for (const node of extraction.nodes) {
|
|
14
|
-
if (!graph.hasNode(node.id)) {
|
|
15
|
-
graph.addNode(node.id, { ...node });
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
graph.mergeNodeAttributes(node.id, { ...node });
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
// Build normalized ID lookup to remap mismatched edge endpoints before stubbing.
|
|
22
|
-
const normToId = new Map();
|
|
23
|
-
graph.forEachNode((id) => {
|
|
24
|
-
normToId.set(normalizeId(id), id);
|
|
25
|
-
});
|
|
26
|
-
// Add edges — skip self-loops, remap via normalization, stub only true externals
|
|
27
|
-
for (const edge of extraction.edges) {
|
|
28
|
-
let src = edge.source;
|
|
29
|
-
let tgt = edge.target;
|
|
30
|
-
if (!graph.hasNode(src)) {
|
|
31
|
-
const remapped = normToId.get(normalizeId(src));
|
|
32
|
-
if (remapped) {
|
|
33
|
-
src = remapped;
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
graph.addNode(src, { id: src, label: src, fileType: 'unknown', sourceFile: '' });
|
|
37
|
-
normToId.set(normalizeId(src), src);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
if (!graph.hasNode(tgt)) {
|
|
41
|
-
const remapped = normToId.get(normalizeId(tgt));
|
|
42
|
-
if (remapped) {
|
|
43
|
-
tgt = remapped;
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
graph.addNode(tgt, { id: tgt, label: tgt, fileType: 'unknown', sourceFile: '' });
|
|
47
|
-
normToId.set(normalizeId(tgt), tgt);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
if (src === tgt)
|
|
51
|
-
continue;
|
|
52
|
-
try {
|
|
53
|
-
graph.addEdge(src, tgt, {
|
|
54
|
-
relation: edge.relation,
|
|
55
|
-
confidence: edge.confidence,
|
|
56
|
-
confidenceScore: edge.confidenceScore,
|
|
57
|
-
weight: edge.weight ?? 1,
|
|
58
|
-
sourceFile: edge.sourceFile,
|
|
59
|
-
sourceLocation: edge.sourceLocation,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
catch {
|
|
63
|
-
// Edge already exists — bump its weight
|
|
64
|
-
const existing = graph.edge(src, tgt);
|
|
65
|
-
if (existing) {
|
|
66
|
-
const prev = graph.getEdgeAttribute(existing, 'weight') ?? 1;
|
|
67
|
-
graph.setEdgeAttribute(existing, 'weight', prev + 1);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return graph;
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=build.js.map
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import Graph from 'graphology';
|
|
2
|
-
export async function detectCommunities(graph) {
|
|
3
|
-
let louvainFn = null;
|
|
4
|
-
try {
|
|
5
|
-
const mod = await import('graphology-communities-louvain');
|
|
6
|
-
louvainFn = mod.default;
|
|
7
|
-
}
|
|
8
|
-
catch { /* louvain not available */ }
|
|
9
|
-
if (louvainFn) {
|
|
10
|
-
try {
|
|
11
|
-
const assignment = louvainFn(graph);
|
|
12
|
-
for (const [nodeId, communityId] of Object.entries(assignment)) {
|
|
13
|
-
graph.setNodeAttribute(nodeId, 'community', communityId);
|
|
14
|
-
}
|
|
15
|
-
const communities = {};
|
|
16
|
-
for (const [nodeId, communityId] of Object.entries(assignment)) {
|
|
17
|
-
if (!communities[communityId])
|
|
18
|
-
communities[communityId] = [];
|
|
19
|
-
communities[communityId].push(nodeId);
|
|
20
|
-
}
|
|
21
|
-
return splitOversizedCommunities(graph, communities, 0.25, louvainFn);
|
|
22
|
-
}
|
|
23
|
-
catch { /* fall through */ }
|
|
24
|
-
}
|
|
25
|
-
return splitOversizedCommunities(graph, fallbackCluster(graph), 0.25, louvainFn);
|
|
26
|
-
}
|
|
27
|
-
function fallbackCluster(graph) {
|
|
28
|
-
const dirMap = new Map();
|
|
29
|
-
let nextId = 0;
|
|
30
|
-
const communities = {};
|
|
31
|
-
graph.forEachNode((id, attrs) => {
|
|
32
|
-
const file = attrs.sourceFile || '';
|
|
33
|
-
const parts = file.split('/');
|
|
34
|
-
const dir = parts.length > 1 ? parts.slice(0, -1).join('/') : 'root';
|
|
35
|
-
if (!dirMap.has(dir))
|
|
36
|
-
dirMap.set(dir, nextId++);
|
|
37
|
-
const cid = dirMap.get(dir);
|
|
38
|
-
graph.setNodeAttribute(id, 'community', cid);
|
|
39
|
-
if (!communities[cid])
|
|
40
|
-
communities[cid] = [];
|
|
41
|
-
communities[cid].push(id);
|
|
42
|
-
});
|
|
43
|
-
return communities;
|
|
44
|
-
}
|
|
45
|
-
export function cohesionScore(graph, communityNodes) {
|
|
46
|
-
const memberSet = new Set(communityNodes);
|
|
47
|
-
let totalEdges = 0;
|
|
48
|
-
let internalEdges = 0;
|
|
49
|
-
graph.forEachEdge((_edge, _attrs, source, target) => {
|
|
50
|
-
const srcIn = memberSet.has(source);
|
|
51
|
-
const tgtIn = memberSet.has(target);
|
|
52
|
-
if (srcIn || tgtIn) {
|
|
53
|
-
totalEdges++;
|
|
54
|
-
if (srcIn && tgtIn)
|
|
55
|
-
internalEdges++;
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
return totalEdges === 0 ? 1.0 : internalEdges / totalEdges;
|
|
59
|
-
}
|
|
60
|
-
export function splitOversizedCommunities(graph, communities, threshold = 0.25, louvainFn = null) {
|
|
61
|
-
const maxSize = threshold * graph.order;
|
|
62
|
-
const allIds = Object.keys(communities).map(Number);
|
|
63
|
-
let nextId = allIds.length > 0 ? Math.max(...allIds) + 1 : 0;
|
|
64
|
-
for (const [cidStr, members] of Object.entries(communities)) {
|
|
65
|
-
if (members.length <= maxSize)
|
|
66
|
-
continue;
|
|
67
|
-
const cid = Number(cidStr);
|
|
68
|
-
// Attempt topology-based second pass via Louvain on the community subgraph
|
|
69
|
-
if (louvainFn && members.length >= 10) {
|
|
70
|
-
try {
|
|
71
|
-
const memberSet = new Set(members);
|
|
72
|
-
const subG = new Graph({ type: 'undirected', multi: false });
|
|
73
|
-
for (const nodeId of members)
|
|
74
|
-
subG.addNode(nodeId);
|
|
75
|
-
graph.forEachEdge((_e, _a, source, target) => {
|
|
76
|
-
if (memberSet.has(source) && memberSet.has(target) && source !== target && !subG.hasEdge(source, target))
|
|
77
|
-
subG.addEdge(source, target);
|
|
78
|
-
});
|
|
79
|
-
const subAssignment = louvainFn(subG);
|
|
80
|
-
const subCommunityCount = new Set(Object.values(subAssignment)).size;
|
|
81
|
-
if (subCommunityCount > 1 && subCommunityCount <= Math.ceil(members.length / 2)) {
|
|
82
|
-
const subIdMap = new Map();
|
|
83
|
-
const newSubIds = {};
|
|
84
|
-
for (const [nodeId, localId] of Object.entries(subAssignment)) {
|
|
85
|
-
if (!subIdMap.has(localId))
|
|
86
|
-
subIdMap.set(localId, nextId++);
|
|
87
|
-
const globalId = subIdMap.get(localId);
|
|
88
|
-
graph.setNodeAttribute(nodeId, 'community', globalId);
|
|
89
|
-
if (!newSubIds[globalId])
|
|
90
|
-
newSubIds[globalId] = [];
|
|
91
|
-
newSubIds[globalId].push(nodeId);
|
|
92
|
-
}
|
|
93
|
-
delete communities[cid];
|
|
94
|
-
Object.assign(communities, newSubIds);
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
catch { /* fall through to directory heuristic */ }
|
|
99
|
-
}
|
|
100
|
-
// Directory heuristic fallback
|
|
101
|
-
const subMap = new Map();
|
|
102
|
-
const newSubIds = {};
|
|
103
|
-
for (const nodeId of members) {
|
|
104
|
-
const file = graph.getNodeAttribute(nodeId, 'sourceFile') || '';
|
|
105
|
-
const parts = file.split('/');
|
|
106
|
-
const parentDir = parts.length > 1 ? parts[parts.length - 2] : 'root';
|
|
107
|
-
if (!subMap.has(parentDir))
|
|
108
|
-
subMap.set(parentDir, nextId++);
|
|
109
|
-
const subId = subMap.get(parentDir);
|
|
110
|
-
graph.setNodeAttribute(nodeId, 'community', subId);
|
|
111
|
-
if (!newSubIds[subId])
|
|
112
|
-
newSubIds[subId] = [];
|
|
113
|
-
newSubIds[subId].push(nodeId);
|
|
114
|
-
}
|
|
115
|
-
delete communities[cid];
|
|
116
|
-
Object.assign(communities, newSubIds);
|
|
117
|
-
}
|
|
118
|
-
return communities;
|
|
119
|
-
}
|
|
120
|
-
//# sourceMappingURL=cluster.js.map
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@monomind/graph",
|
|
3
|
-
"version": "1.4.0",
|
|
4
|
-
"type": "module",
|
|
5
|
-
"description": "Knowledge graph engine for monomind — AST extraction, graph construction, community detection, and persistent codebase understanding",
|
|
6
|
-
"main": "./dist/src/index.js",
|
|
7
|
-
"types": "./dist/src/index.d.ts",
|
|
8
|
-
"exports": {
|
|
9
|
-
".": {
|
|
10
|
-
"types": "./dist/src/index.d.ts",
|
|
11
|
-
"import": "./dist/src/index.js"
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
"files": [
|
|
15
|
-
"dist",
|
|
16
|
-
"src"
|
|
17
|
-
],
|
|
18
|
-
"scripts": {
|
|
19
|
-
"build": "tsc",
|
|
20
|
-
"test": "vitest run",
|
|
21
|
-
"clean": "rm -rf dist"
|
|
22
|
-
},
|
|
23
|
-
"dependencies": {
|
|
24
|
-
"graphology": "^0.25.4",
|
|
25
|
-
"graphology-types": "^0.24.7",
|
|
26
|
-
"graphology-communities-louvain": "^2.0.1",
|
|
27
|
-
"graphology-shortest-path": "^2.0.2",
|
|
28
|
-
"graphology-traversal": "^0.3.1",
|
|
29
|
-
"graphology-metrics": "^2.4.0",
|
|
30
|
-
"chokidar": "^3.6.0"
|
|
31
|
-
},
|
|
32
|
-
"devDependencies": {
|
|
33
|
-
"@types/node": "^20.0.0",
|
|
34
|
-
"typescript": "^5.3.0",
|
|
35
|
-
"vitest": "^4.1.4"
|
|
36
|
-
},
|
|
37
|
-
"optionalDependencies": {
|
|
38
|
-
"node-tree-sitter": "^0.22.4",
|
|
39
|
-
"tree-sitter-typescript": "^0.23.2",
|
|
40
|
-
"tree-sitter-javascript": "^0.23.1",
|
|
41
|
-
"tree-sitter-python": "^0.23.6",
|
|
42
|
-
"tree-sitter-go": "^0.23.4",
|
|
43
|
-
"tree-sitter-rust": "^0.23.2",
|
|
44
|
-
"tree-sitter-java": "^0.23.5",
|
|
45
|
-
"tree-sitter-c": "^0.23.4",
|
|
46
|
-
"tree-sitter-cpp": "^0.23.4",
|
|
47
|
-
"tree-sitter-ruby": "^0.23.1",
|
|
48
|
-
"tree-sitter-c-sharp": "^0.23.1",
|
|
49
|
-
"tree-sitter-kotlin": "^0.3.9",
|
|
50
|
-
"tree-sitter-swift": "^0.6.1",
|
|
51
|
-
"tree-sitter-scala": "^0.23.4",
|
|
52
|
-
"tree-sitter-php": "^0.23.11"
|
|
53
|
-
},
|
|
54
|
-
"publishConfig": {
|
|
55
|
-
"access": "public"
|
|
56
|
-
}
|
|
57
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MonoVector LLM WASM MCP Tools
|
|
3
|
-
*
|
|
4
|
-
* Exposes @monoes/ruvllm-wasm operations via MCP protocol.
|
|
5
|
-
* All tools gracefully degrade when the WASM package is not installed.
|
|
6
|
-
*/
|
|
7
|
-
import type { MCPTool } from './types.js';
|
|
8
|
-
export declare const ruvllmWasmTools: MCPTool[];
|
|
9
|
-
//# sourceMappingURL=ruvllm-tools.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ruvllm-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/ruvllm-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AA0B1C,eAAO,MAAM,eAAe,EAAE,OAAO,EAsQpC,CAAC"}
|
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MonoVector LLM WASM MCP Tools
|
|
3
|
-
*
|
|
4
|
-
* Exposes @monoes/ruvllm-wasm operations via MCP protocol.
|
|
5
|
-
* All tools gracefully degrade when the WASM package is not installed.
|
|
6
|
-
*/
|
|
7
|
-
async function loadRuvllmWasm() {
|
|
8
|
-
return import('../monovector/ruvllm-wasm.js');
|
|
9
|
-
}
|
|
10
|
-
// ── Instance Registries ──────────────────────────────────────
|
|
11
|
-
const hnswRouters = new Map();
|
|
12
|
-
const sonaInstances = new Map();
|
|
13
|
-
const loraInstances = new Map();
|
|
14
|
-
// ── Map eviction (prevents WASM object leaks in long-running MCP servers) ────
|
|
15
|
-
const MAX_MAP_SIZE = 50;
|
|
16
|
-
function setWithEviction(map, key, value) {
|
|
17
|
-
if (map.size >= MAX_MAP_SIZE) {
|
|
18
|
-
// Evict the oldest entry (first inserted)
|
|
19
|
-
const firstKey = map.keys().next().value;
|
|
20
|
-
map.delete(firstKey);
|
|
21
|
-
}
|
|
22
|
-
map.set(key, value);
|
|
23
|
-
}
|
|
24
|
-
export const ruvllmWasmTools = [
|
|
25
|
-
{
|
|
26
|
-
name: 'ruvllm_status',
|
|
27
|
-
description: 'Get ruvllm-wasm availability and initialization status.',
|
|
28
|
-
inputSchema: { type: 'object', properties: {} },
|
|
29
|
-
handler: async () => {
|
|
30
|
-
try {
|
|
31
|
-
const mod = await loadRuvllmWasm();
|
|
32
|
-
const status = await mod.getRuvllmStatus();
|
|
33
|
-
return { content: [{ type: 'text', text: JSON.stringify(status, null, 2) }] };
|
|
34
|
-
}
|
|
35
|
-
catch (err) {
|
|
36
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
name: 'ruvllm_hnsw_create',
|
|
42
|
-
description: 'Create a WASM HNSW router for semantic pattern routing. Max ~11 patterns (v2.0.1 limit).',
|
|
43
|
-
inputSchema: {
|
|
44
|
-
type: 'object',
|
|
45
|
-
properties: {
|
|
46
|
-
dimensions: { type: 'number', description: 'Embedding dimensions (e.g., 64, 128, 384)' },
|
|
47
|
-
maxPatterns: { type: 'number', description: 'Max patterns capacity (limit ~11 in v2.0.1)' },
|
|
48
|
-
efSearch: { type: 'number', description: 'HNSW ef search parameter (higher = more accurate, slower)' },
|
|
49
|
-
},
|
|
50
|
-
required: ['dimensions', 'maxPatterns'],
|
|
51
|
-
},
|
|
52
|
-
handler: async (args) => {
|
|
53
|
-
try {
|
|
54
|
-
const mod = await loadRuvllmWasm();
|
|
55
|
-
const router = await mod.createHnswRouter({
|
|
56
|
-
dimensions: args.dimensions,
|
|
57
|
-
maxPatterns: args.maxPatterns,
|
|
58
|
-
efSearch: args.efSearch,
|
|
59
|
-
});
|
|
60
|
-
// Store router in module-level registry
|
|
61
|
-
const id = `hnsw-${Date.now().toString(36)}`;
|
|
62
|
-
setWithEviction(hnswRouters, id, router);
|
|
63
|
-
return { content: [{ type: 'text', text: JSON.stringify({ success: true, routerId: id, dimensions: args.dimensions, maxPatterns: args.maxPatterns }) }] };
|
|
64
|
-
}
|
|
65
|
-
catch (err) {
|
|
66
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
name: 'ruvllm_hnsw_add',
|
|
72
|
-
description: 'Add a pattern to an HNSW router. Embedding must match router dimensions.',
|
|
73
|
-
inputSchema: {
|
|
74
|
-
type: 'object',
|
|
75
|
-
properties: {
|
|
76
|
-
routerId: { type: 'string', description: 'HNSW router ID from ruvllm_hnsw_create' },
|
|
77
|
-
name: { type: 'string', description: 'Pattern name/label' },
|
|
78
|
-
embedding: { type: 'array', items: { type: 'number' }, description: 'Float array embedding vector' },
|
|
79
|
-
metadata: { type: 'object', description: 'Optional metadata object' },
|
|
80
|
-
},
|
|
81
|
-
required: ['routerId', 'name', 'embedding'],
|
|
82
|
-
},
|
|
83
|
-
handler: async (args) => {
|
|
84
|
-
try {
|
|
85
|
-
const router = hnswRouters.get(args.routerId);
|
|
86
|
-
if (!router)
|
|
87
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: `Router not found: ${args.routerId}` }) }], isError: true };
|
|
88
|
-
const embedding = new Float32Array(args.embedding);
|
|
89
|
-
const ok = router.addPattern({
|
|
90
|
-
name: args.name,
|
|
91
|
-
embedding,
|
|
92
|
-
metadata: args.metadata,
|
|
93
|
-
});
|
|
94
|
-
return { content: [{ type: 'text', text: JSON.stringify({ success: ok, patternCount: router.patternCount() }) }] };
|
|
95
|
-
}
|
|
96
|
-
catch (err) {
|
|
97
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
name: 'ruvllm_hnsw_route',
|
|
103
|
-
description: 'Route a query embedding to nearest patterns in HNSW index.',
|
|
104
|
-
inputSchema: {
|
|
105
|
-
type: 'object',
|
|
106
|
-
properties: {
|
|
107
|
-
routerId: { type: 'string', description: 'HNSW router ID' },
|
|
108
|
-
query: { type: 'array', items: { type: 'number' }, description: 'Query embedding vector' },
|
|
109
|
-
k: { type: 'number', description: 'Number of nearest neighbors (default: 3)' },
|
|
110
|
-
},
|
|
111
|
-
required: ['routerId', 'query'],
|
|
112
|
-
},
|
|
113
|
-
handler: async (args) => {
|
|
114
|
-
try {
|
|
115
|
-
const router = hnswRouters.get(args.routerId);
|
|
116
|
-
if (!router)
|
|
117
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: `Router not found: ${args.routerId}` }) }], isError: true };
|
|
118
|
-
const query = new Float32Array(args.query);
|
|
119
|
-
const k = typeof args.k === 'number' && args.k > 0 ? Math.floor(args.k) : 3;
|
|
120
|
-
const results = router.route(query, k);
|
|
121
|
-
return { content: [{ type: 'text', text: JSON.stringify({ results }) }] };
|
|
122
|
-
}
|
|
123
|
-
catch (err) {
|
|
124
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
125
|
-
}
|
|
126
|
-
},
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
name: 'ruvllm_sona_create',
|
|
130
|
-
description: 'Create a SONA instant adaptation loop (<1ms adaptation cycles).',
|
|
131
|
-
inputSchema: {
|
|
132
|
-
type: 'object',
|
|
133
|
-
properties: {
|
|
134
|
-
hiddenDim: { type: 'number', description: 'Hidden dimension (default: 64)' },
|
|
135
|
-
learningRate: { type: 'number', description: 'Learning rate (default: 0.01)' },
|
|
136
|
-
patternCapacity: { type: 'number', description: 'Max stored patterns' },
|
|
137
|
-
},
|
|
138
|
-
},
|
|
139
|
-
handler: async (args) => {
|
|
140
|
-
try {
|
|
141
|
-
const mod = await loadRuvllmWasm();
|
|
142
|
-
const sona = await mod.createSonaInstant({
|
|
143
|
-
hiddenDim: args.hiddenDim,
|
|
144
|
-
learningRate: args.learningRate,
|
|
145
|
-
patternCapacity: args.patternCapacity,
|
|
146
|
-
});
|
|
147
|
-
const id = `sona-${Date.now().toString(36)}`;
|
|
148
|
-
setWithEviction(sonaInstances, id, sona);
|
|
149
|
-
return { content: [{ type: 'text', text: JSON.stringify({ success: true, sonaId: id }) }] };
|
|
150
|
-
}
|
|
151
|
-
catch (err) {
|
|
152
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
153
|
-
}
|
|
154
|
-
},
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
name: 'ruvllm_sona_adapt',
|
|
158
|
-
description: 'Run SONA instant adaptation with a quality signal.',
|
|
159
|
-
inputSchema: {
|
|
160
|
-
type: 'object',
|
|
161
|
-
properties: {
|
|
162
|
-
sonaId: { type: 'string', description: 'SONA instance ID' },
|
|
163
|
-
quality: { type: 'number', description: 'Quality signal (0.0-1.0)' },
|
|
164
|
-
},
|
|
165
|
-
required: ['sonaId', 'quality'],
|
|
166
|
-
},
|
|
167
|
-
handler: async (args) => {
|
|
168
|
-
try {
|
|
169
|
-
const sona = sonaInstances.get(args.sonaId);
|
|
170
|
-
if (!sona)
|
|
171
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: `SONA not found: ${args.sonaId}` }) }], isError: true };
|
|
172
|
-
sona.adapt(args.quality);
|
|
173
|
-
return { content: [{ type: 'text', text: JSON.stringify({ success: true, stats: sona.stats() }) }] };
|
|
174
|
-
}
|
|
175
|
-
catch (err) {
|
|
176
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
177
|
-
}
|
|
178
|
-
},
|
|
179
|
-
},
|
|
180
|
-
{
|
|
181
|
-
name: 'ruvllm_microlora_create',
|
|
182
|
-
description: 'Create a MicroLoRA adapter (ultra-lightweight LoRA, ranks 1-4).',
|
|
183
|
-
inputSchema: {
|
|
184
|
-
type: 'object',
|
|
185
|
-
properties: {
|
|
186
|
-
inputDim: { type: 'number', description: 'Input dimension' },
|
|
187
|
-
outputDim: { type: 'number', description: 'Output dimension' },
|
|
188
|
-
rank: { type: 'number', description: 'LoRA rank (1-4, default: 2)' },
|
|
189
|
-
alpha: { type: 'number', description: 'LoRA alpha scaling (default: 1.0)' },
|
|
190
|
-
},
|
|
191
|
-
required: ['inputDim', 'outputDim'],
|
|
192
|
-
},
|
|
193
|
-
handler: async (args) => {
|
|
194
|
-
try {
|
|
195
|
-
const mod = await loadRuvllmWasm();
|
|
196
|
-
const lora = await mod.createMicroLora({
|
|
197
|
-
inputDim: args.inputDim,
|
|
198
|
-
outputDim: args.outputDim,
|
|
199
|
-
rank: args.rank,
|
|
200
|
-
alpha: args.alpha,
|
|
201
|
-
});
|
|
202
|
-
const id = `lora-${Date.now().toString(36)}`;
|
|
203
|
-
setWithEviction(loraInstances, id, lora);
|
|
204
|
-
return { content: [{ type: 'text', text: JSON.stringify({ success: true, loraId: id }) }] };
|
|
205
|
-
}
|
|
206
|
-
catch (err) {
|
|
207
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
208
|
-
}
|
|
209
|
-
},
|
|
210
|
-
},
|
|
211
|
-
{
|
|
212
|
-
name: 'ruvllm_microlora_adapt',
|
|
213
|
-
description: 'Adapt MicroLoRA weights with quality feedback.',
|
|
214
|
-
inputSchema: {
|
|
215
|
-
type: 'object',
|
|
216
|
-
properties: {
|
|
217
|
-
loraId: { type: 'string', description: 'MicroLoRA instance ID' },
|
|
218
|
-
quality: { type: 'number', description: 'Quality signal (0.0-1.0)' },
|
|
219
|
-
learningRate: { type: 'number', description: 'Learning rate (default: 0.01)' },
|
|
220
|
-
success: { type: 'boolean', description: 'Whether the adaptation was successful (default: true)' },
|
|
221
|
-
},
|
|
222
|
-
required: ['loraId', 'quality'],
|
|
223
|
-
},
|
|
224
|
-
handler: async (args) => {
|
|
225
|
-
try {
|
|
226
|
-
const lora = loraInstances.get(args.loraId);
|
|
227
|
-
if (!lora)
|
|
228
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: `MicroLoRA not found: ${args.loraId}` }) }], isError: true };
|
|
229
|
-
lora.adapt(args.quality, args.learningRate, args.success);
|
|
230
|
-
return { content: [{ type: 'text', text: JSON.stringify({ success: true, stats: lora.stats() }) }] };
|
|
231
|
-
}
|
|
232
|
-
catch (err) {
|
|
233
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
234
|
-
}
|
|
235
|
-
},
|
|
236
|
-
},
|
|
237
|
-
{
|
|
238
|
-
name: 'ruvllm_chat_format',
|
|
239
|
-
description: 'Format chat messages using a template (llama3, mistral, chatml, phi, gemma, or auto-detect).',
|
|
240
|
-
inputSchema: {
|
|
241
|
-
type: 'object',
|
|
242
|
-
properties: {
|
|
243
|
-
messages: {
|
|
244
|
-
type: 'array',
|
|
245
|
-
items: { type: 'object', properties: { role: { type: 'string' }, content: { type: 'string' } }, required: ['role', 'content'] },
|
|
246
|
-
description: 'Array of {role, content} message objects',
|
|
247
|
-
},
|
|
248
|
-
template: { type: 'string', description: 'Template preset (llama3, mistral, chatml, phi, gemma) or model ID for auto-detection' },
|
|
249
|
-
},
|
|
250
|
-
required: ['messages', 'template'],
|
|
251
|
-
},
|
|
252
|
-
handler: async (args) => {
|
|
253
|
-
try {
|
|
254
|
-
const mod = await loadRuvllmWasm();
|
|
255
|
-
const messages = args.messages;
|
|
256
|
-
const templateStr = args.template;
|
|
257
|
-
const presets = ['llama3', 'mistral', 'chatml', 'phi', 'gemma'];
|
|
258
|
-
const template = presets.includes(templateStr)
|
|
259
|
-
? templateStr
|
|
260
|
-
: { modelId: templateStr };
|
|
261
|
-
const formatted = await mod.formatChat(messages, template);
|
|
262
|
-
return { content: [{ type: 'text', text: formatted }] };
|
|
263
|
-
}
|
|
264
|
-
catch (err) {
|
|
265
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
266
|
-
}
|
|
267
|
-
},
|
|
268
|
-
},
|
|
269
|
-
{
|
|
270
|
-
name: 'ruvllm_generate_config',
|
|
271
|
-
description: 'Create a generation config (maxTokens, temperature, topP, etc.) as JSON.',
|
|
272
|
-
inputSchema: {
|
|
273
|
-
type: 'object',
|
|
274
|
-
properties: {
|
|
275
|
-
maxTokens: { type: 'number', description: 'Max tokens to generate' },
|
|
276
|
-
temperature: { type: 'number', description: 'Sampling temperature (note: f32 precision)' },
|
|
277
|
-
topP: { type: 'number', description: 'Top-p sampling' },
|
|
278
|
-
topK: { type: 'number', description: 'Top-k sampling' },
|
|
279
|
-
repetitionPenalty: { type: 'number', description: 'Repetition penalty' },
|
|
280
|
-
stopSequences: { type: 'array', items: { type: 'string' }, description: 'Stop sequences' },
|
|
281
|
-
},
|
|
282
|
-
},
|
|
283
|
-
handler: async (args) => {
|
|
284
|
-
try {
|
|
285
|
-
const mod = await loadRuvllmWasm();
|
|
286
|
-
const config = await mod.createGenerateConfig(args);
|
|
287
|
-
return { content: [{ type: 'text', text: config }] };
|
|
288
|
-
}
|
|
289
|
-
catch (err) {
|
|
290
|
-
return { content: [{ type: 'text', text: JSON.stringify({ error: String(err) }) }], isError: true };
|
|
291
|
-
}
|
|
292
|
-
},
|
|
293
|
-
},
|
|
294
|
-
];
|
|
295
|
-
//# sourceMappingURL=ruvllm-tools.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ruvllm-tools.js","sourceRoot":"","sources":["../../../src/mcp-tools/ruvllm-tools.ts"],"names":[],"mappings":"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"}
|