@monoes/monomindcli 2.7.14 → 2.7.16
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/.claude/helpers/control-start.cjs +17 -3
- package/.claude/helpers/handlers/route-handler.cjs +41 -29
- package/.claude/helpers/handlers/session-restore-handler.cjs +3 -3
- package/.claude/helpers/hook-handler.cjs +2 -2
- package/.claude/helpers/mastermind-activate.cjs +4 -0
- package/.claude/helpers/statusline.cjs +83 -33
- package/.claude/helpers/utils/monograph.cjs +4 -2
- package/dist/src/capabilities/cap-documents.d.ts.map +1 -1
- package/dist/src/capabilities/cap-documents.js +263 -35
- package/dist/src/capabilities/cap-documents.js.map +1 -1
- package/dist/src/capabilities/scanner.js +1 -1
- package/dist/src/capabilities/scanner.js.map +1 -1
- package/dist/src/commands/doc.js +1 -1
- package/dist/src/commands/doc.js.map +1 -1
- package/dist/src/commands/org-observe.d.ts +4 -2
- package/dist/src/commands/org-observe.d.ts.map +1 -1
- package/dist/src/commands/org-observe.js +105 -4
- package/dist/src/commands/org-observe.js.map +1 -1
- package/dist/src/commands/org.d.ts +2 -0
- package/dist/src/commands/org.d.ts.map +1 -1
- package/dist/src/commands/org.js +120 -4
- package/dist/src/commands/org.js.map +1 -1
- package/dist/src/init/claudemd-generator.js +1 -1
- package/dist/src/init/settings-generator.d.ts.map +1 -1
- package/dist/src/init/settings-generator.js +23 -9
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.d.ts.map +1 -1
- package/dist/src/init/statusline-generator.js +45 -1
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/knowledge/eval/model-presence.d.ts +5 -0
- package/dist/src/knowledge/eval/model-presence.d.ts.map +1 -1
- package/dist/src/knowledge/eval/model-presence.js +52 -6
- package/dist/src/knowledge/eval/model-presence.js.map +1 -1
- package/dist/src/knowledge/eval/signals.d.ts.map +1 -1
- package/dist/src/knowledge/eval/signals.js +24 -0
- package/dist/src/knowledge/eval/signals.js.map +1 -1
- package/dist/src/mcp-client.d.ts +10 -0
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +86 -4
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-tools/index.d.ts +1 -1
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +1 -1
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/monomind-tools.d.ts +14 -0
- package/dist/src/mcp-tools/monomind-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/monomind-tools.js +54 -0
- package/dist/src/mcp-tools/monomind-tools.js.map +1 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +27 -7
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/orgrt/broker.d.ts +4 -2
- package/dist/src/orgrt/broker.d.ts.map +1 -1
- package/dist/src/orgrt/broker.js +8 -6
- package/dist/src/orgrt/broker.js.map +1 -1
- package/dist/src/orgrt/bus.d.ts +1 -0
- package/dist/src/orgrt/bus.d.ts.map +1 -1
- package/dist/src/orgrt/bus.js +5 -1
- package/dist/src/orgrt/bus.js.map +1 -1
- package/dist/src/orgrt/daemon.d.ts +17 -2
- package/dist/src/orgrt/daemon.d.ts.map +1 -1
- package/dist/src/orgrt/daemon.js +179 -44
- package/dist/src/orgrt/daemon.js.map +1 -1
- package/dist/src/orgrt/inbox.d.ts +1 -1
- package/dist/src/orgrt/inbox.d.ts.map +1 -1
- package/dist/src/orgrt/inbox.js +12 -3
- package/dist/src/orgrt/inbox.js.map +1 -1
- package/dist/src/orgrt/policy.d.ts.map +1 -1
- package/dist/src/orgrt/policy.js +84 -0
- package/dist/src/orgrt/policy.js.map +1 -1
- package/dist/src/orgrt/reporting.d.ts +2 -0
- package/dist/src/orgrt/reporting.d.ts.map +1 -1
- package/dist/src/orgrt/reporting.js +4 -1
- package/dist/src/orgrt/reporting.js.map +1 -1
- package/dist/src/orgrt/server.d.ts +4 -2
- package/dist/src/orgrt/server.d.ts.map +1 -1
- package/dist/src/orgrt/server.js +76 -73
- package/dist/src/orgrt/server.js.map +1 -1
- package/dist/src/orgrt/session.d.ts.map +1 -1
- package/dist/src/orgrt/session.js +63 -27
- package/dist/src/orgrt/session.js.map +1 -1
- package/dist/src/orgrt/test-loop.js +1 -1
- package/dist/src/orgrt/test-loop.js.map +1 -1
- package/dist/src/orgrt/types.d.ts +50 -1
- package/dist/src/orgrt/types.d.ts.map +1 -1
- package/dist/src/orgrt/types.js +33 -1
- package/dist/src/orgrt/types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -1
- package/dist/src/mcp-tools/neural-tools.d.ts +0 -15
- package/dist/src/mcp-tools/neural-tools.d.ts.map +0 -1
- package/dist/src/mcp-tools/neural-tools.js +0 -506
- package/dist/src/mcp-tools/neural-tools.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@monoes/monomindcli",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.16",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI engine for Monomind \u2014 an open-source MCP server that extends Claude Code with a codebase knowledge graph (tree-sitter + SQLite), persistent memory, multi-agent task coordination, and session hooks. MIT licensed, fully local.",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"@noble/ed25519": "^2.1.0",
|
|
107
107
|
"mammoth": "^1.12.0",
|
|
108
108
|
"pdf-parse": "^2.4.5",
|
|
109
|
+
"xlsx": "^0.18.5",
|
|
109
110
|
"ws": "^8.21.0",
|
|
110
111
|
"yaml": "^2.8.0",
|
|
111
112
|
"zod": "^4.0.0"
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pattern Store MCP Tools — "neural" namespace (legacy name, kept for API compat)
|
|
3
|
-
*
|
|
4
|
-
* These tools embed text as vectors and search by cosine similarity.
|
|
5
|
-
* No ML training, gradient descent, or neural network inference occurs.
|
|
6
|
-
* The "train" tool embeds and stores; the "predict" tool finds similar stored
|
|
7
|
-
* patterns. Embeddings come from the shared memory/embedding-operations.ts
|
|
8
|
-
* pipeline (SQLite-backed memory bridge -> ONNX -> deterministic hash fallback).
|
|
9
|
-
*
|
|
10
|
-
* All pattern storage is delegated to intelligence.ts's LocalReasoningBank
|
|
11
|
-
* (single source of truth for patterns.json). No separate models.json store.
|
|
12
|
-
*/
|
|
13
|
-
import { type MCPTool } from './types.js';
|
|
14
|
-
export declare const neuralTools: MCPTool[];
|
|
15
|
-
//# sourceMappingURL=neural-tools.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"neural-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/neural-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAgD1C,eAAO,MAAM,WAAW,EAAE,OAAO,EAofhC,CAAC"}
|
|
@@ -1,506 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pattern Store MCP Tools — "neural" namespace (legacy name, kept for API compat)
|
|
3
|
-
*
|
|
4
|
-
* These tools embed text as vectors and search by cosine similarity.
|
|
5
|
-
* No ML training, gradient descent, or neural network inference occurs.
|
|
6
|
-
* The "train" tool embeds and stores; the "predict" tool finds similar stored
|
|
7
|
-
* patterns. Embeddings come from the shared memory/embedding-operations.ts
|
|
8
|
-
* pipeline (SQLite-backed memory bridge -> ONNX -> deterministic hash fallback).
|
|
9
|
-
*
|
|
10
|
-
* All pattern storage is delegated to intelligence.ts's LocalReasoningBank
|
|
11
|
-
* (single source of truth for patterns.json). No separate models.json store.
|
|
12
|
-
*/
|
|
13
|
-
const RESERVED_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
14
|
-
const MAX_MODEL_ID_LEN = 256;
|
|
15
|
-
const MAX_PATTERNS = 10000;
|
|
16
|
-
const MAX_TRAINING_ENTRIES = 1000;
|
|
17
|
-
const MAX_TEXT_LENGTH = 64 * 1024;
|
|
18
|
-
const MAX_SEARCH_QUERY_LENGTH = 16 * 1024;
|
|
19
|
-
// Embeddings: delegate to the shared embedding pipeline (SQLite-backed memory bridge -> ONNX ->
|
|
20
|
-
// deterministic hash fallback) in memory/embedding-operations.ts.
|
|
21
|
-
let lastEmbeddingModel = 'unknown';
|
|
22
|
-
/**
|
|
23
|
-
* Generate embedding via the shared pipeline (SQLite-backed memory bridge -> ONNX -> deterministic
|
|
24
|
-
* hash), same one used by CLI `neural` commands and memory search. Falls back to a
|
|
25
|
-
* local deterministic hash only if the shared module fails to load entirely.
|
|
26
|
-
*/
|
|
27
|
-
async function generateEmbedding(text, dims = 384) {
|
|
28
|
-
if (!text)
|
|
29
|
-
return new Array(dims).fill(0);
|
|
30
|
-
try {
|
|
31
|
-
const { generateEmbedding: sharedGenerateEmbedding } = await import('../memory/embedding-operations.js');
|
|
32
|
-
const result = await sharedGenerateEmbedding(text);
|
|
33
|
-
lastEmbeddingModel = result.model;
|
|
34
|
-
return result.embedding;
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
// memory/embedding-operations.js unavailable — deterministic hash fallback
|
|
38
|
-
lastEmbeddingModel = 'hash-fallback';
|
|
39
|
-
const hash = text.split('').reduce((acc, char, i) => acc + char.charCodeAt(0) * (i + 1), 0);
|
|
40
|
-
const embedding = [];
|
|
41
|
-
let seed = hash;
|
|
42
|
-
for (let i = 0; i < dims; i++) {
|
|
43
|
-
seed = (seed * 1103515245 + 12345) & 0x7fffffff;
|
|
44
|
-
embedding.push((seed / 0x7fffffff) * 2 - 1);
|
|
45
|
-
}
|
|
46
|
-
return embedding;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/** Truncate and validate a modelId string */
|
|
50
|
-
function sanitizeModelId(raw) {
|
|
51
|
-
if (typeof raw !== 'string')
|
|
52
|
-
return null;
|
|
53
|
-
const id = raw.length > MAX_MODEL_ID_LEN ? raw.slice(0, MAX_MODEL_ID_LEN) : raw;
|
|
54
|
-
if (RESERVED_KEYS.has(id))
|
|
55
|
-
return null;
|
|
56
|
-
return id;
|
|
57
|
-
}
|
|
58
|
-
export const neuralTools = [
|
|
59
|
-
{
|
|
60
|
-
name: 'neural_train',
|
|
61
|
-
description: 'Embed text as vectors and store as named patterns for later similarity search (no ML training occurs)',
|
|
62
|
-
category: 'neural',
|
|
63
|
-
inputSchema: {
|
|
64
|
-
type: 'object',
|
|
65
|
-
properties: {
|
|
66
|
-
modelId: { type: 'string', description: 'Store ID (groups related patterns)' },
|
|
67
|
-
modelType: { type: 'string', enum: ['pattern', 'embedding'], description: 'Store type' },
|
|
68
|
-
epochs: { type: 'number', description: 'Deprecated — ignored. Patterns are embedded and stored, not trained.' },
|
|
69
|
-
learningRate: { type: 'number', description: 'Deprecated — ignored. No gradient-based training occurs.' },
|
|
70
|
-
data: { type: 'object', description: 'Data to embed and store (array of strings or {text/content/label} objects)' },
|
|
71
|
-
},
|
|
72
|
-
required: ['modelType'],
|
|
73
|
-
},
|
|
74
|
-
handler: async (input) => {
|
|
75
|
-
const rawModelId = input.modelId || `model-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
|
|
76
|
-
const modelId = sanitizeModelId(rawModelId);
|
|
77
|
-
if (modelId === null) {
|
|
78
|
-
return { success: false, error: 'Invalid modelId' };
|
|
79
|
-
}
|
|
80
|
-
const VALID_MODEL_TYPES = new Set(['pattern', 'embedding']);
|
|
81
|
-
const rawModelType = input.modelType;
|
|
82
|
-
if (!rawModelType || !VALID_MODEL_TYPES.has(rawModelType)) {
|
|
83
|
-
return { success: false, error: `Invalid modelType "${rawModelType}". Must be one of: pattern, embedding` };
|
|
84
|
-
}
|
|
85
|
-
const modelType = rawModelType;
|
|
86
|
-
// Initialize intelligence system (single source of truth)
|
|
87
|
-
const { initializeIntelligence, getReasoningBank, getAllPatterns, flushPatterns } = await import('../memory/intelligence.js');
|
|
88
|
-
const init = await initializeIntelligence();
|
|
89
|
-
if (!init.success) {
|
|
90
|
-
return { success: false, error: 'Failed to initialize intelligence system' };
|
|
91
|
-
}
|
|
92
|
-
const bank = getReasoningBank();
|
|
93
|
-
if (!bank) {
|
|
94
|
-
return { success: false, error: 'ReasoningBank not available' };
|
|
95
|
-
}
|
|
96
|
-
// Check pattern capacity
|
|
97
|
-
const existingPatterns = await getAllPatterns();
|
|
98
|
-
if (existingPatterns.length >= MAX_PATTERNS) {
|
|
99
|
-
return { success: false, error: `Pattern store full (max ${MAX_PATTERNS}). Run neural_compress first.` };
|
|
100
|
-
}
|
|
101
|
-
const trainingData = input.data;
|
|
102
|
-
let patternsStored = 0;
|
|
103
|
-
if (trainingData) {
|
|
104
|
-
const rawEntries = Array.isArray(trainingData) ? trainingData : [trainingData];
|
|
105
|
-
const entries = rawEntries.slice(0, MAX_TRAINING_ENTRIES);
|
|
106
|
-
for (let i = 0; i < entries.length; i++) {
|
|
107
|
-
// Re-check capacity inside loop to prevent bypass via large arrays
|
|
108
|
-
const currentPatterns = await getAllPatterns();
|
|
109
|
-
if (currentPatterns.length >= MAX_PATTERNS)
|
|
110
|
-
break;
|
|
111
|
-
const entry = entries[i];
|
|
112
|
-
let text = typeof entry === 'string' ? entry
|
|
113
|
-
: entry?.text
|
|
114
|
-
|| entry?.content
|
|
115
|
-
|| entry?.label
|
|
116
|
-
|| JSON.stringify(entry);
|
|
117
|
-
if (!text || typeof text !== 'string')
|
|
118
|
-
continue;
|
|
119
|
-
if (text.length > MAX_TEXT_LENGTH)
|
|
120
|
-
text = text.slice(0, MAX_TEXT_LENGTH);
|
|
121
|
-
const embedding = await generateEmbedding(text, 384);
|
|
122
|
-
const patternId = `${modelId}-train-${i}`;
|
|
123
|
-
bank.store({
|
|
124
|
-
id: patternId,
|
|
125
|
-
type: modelType,
|
|
126
|
-
embedding,
|
|
127
|
-
content: typeof entry === 'object' && entry !== null && 'label' in entry
|
|
128
|
-
? String(entry.label) : text.slice(0, 100),
|
|
129
|
-
confidence: 0.8,
|
|
130
|
-
metadata: { modelId, index: i, raw: entry },
|
|
131
|
-
});
|
|
132
|
-
patternsStored++;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
// Flush immediately to persist
|
|
136
|
-
flushPatterns();
|
|
137
|
-
const totalPatterns = (await getAllPatterns()).length;
|
|
138
|
-
return {
|
|
139
|
-
success: true,
|
|
140
|
-
_realEmbedding: lastEmbeddingModel !== 'hash-fallback',
|
|
141
|
-
modelId,
|
|
142
|
-
type: modelType,
|
|
143
|
-
status: 'ready',
|
|
144
|
-
patternsStored,
|
|
145
|
-
totalPatterns,
|
|
146
|
-
epochs: 1,
|
|
147
|
-
trainedAt: new Date().toISOString(),
|
|
148
|
-
};
|
|
149
|
-
},
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
name: 'neural_predict',
|
|
153
|
-
description: 'Find stored patterns most similar to input text via cosine similarity (not ML prediction)',
|
|
154
|
-
category: 'neural',
|
|
155
|
-
inputSchema: {
|
|
156
|
-
type: 'object',
|
|
157
|
-
properties: {
|
|
158
|
-
modelId: { type: 'string', description: 'Model ID to use' },
|
|
159
|
-
input: { type: 'string', description: 'Text to find similar patterns for' },
|
|
160
|
-
topK: { type: 'number', description: 'Number of top results to return' },
|
|
161
|
-
},
|
|
162
|
-
required: ['input'],
|
|
163
|
-
},
|
|
164
|
-
handler: async (input) => {
|
|
165
|
-
const rawModelIdPred = input.modelId;
|
|
166
|
-
if (rawModelIdPred) {
|
|
167
|
-
const modelId = sanitizeModelId(rawModelIdPred);
|
|
168
|
-
if (modelId === null) {
|
|
169
|
-
return { success: false, error: 'Invalid modelId' };
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
const inputText = typeof input.input === 'string' ? input.input.slice(0, MAX_SEARCH_QUERY_LENGTH) : '';
|
|
173
|
-
const topK = Math.max(1, Math.min(input.topK || 3, 50));
|
|
174
|
-
const { initializeIntelligence, findSimilarPatterns } = await import('../memory/intelligence.js');
|
|
175
|
-
await initializeIntelligence();
|
|
176
|
-
const startTime = performance.now();
|
|
177
|
-
const embedding = await generateEmbedding(inputText, 384);
|
|
178
|
-
// Use intelligence.ts findSimilarPatterns which handles embedding + search
|
|
179
|
-
const results = await findSimilarPatterns(inputText, {
|
|
180
|
-
k: topK,
|
|
181
|
-
threshold: 0.1,
|
|
182
|
-
});
|
|
183
|
-
const latency = Math.round(performance.now() - startTime);
|
|
184
|
-
const predictions = results.map(r => ({
|
|
185
|
-
label: r.content || r.type || r.id,
|
|
186
|
-
confidence: r.similarity ?? r.confidence,
|
|
187
|
-
patternId: r.id,
|
|
188
|
-
}));
|
|
189
|
-
return {
|
|
190
|
-
success: true,
|
|
191
|
-
_realEmbedding: lastEmbeddingModel !== 'hash-fallback',
|
|
192
|
-
_hasStoredPatterns: results.length > 0,
|
|
193
|
-
modelId: rawModelIdPred || 'default',
|
|
194
|
-
input: inputText,
|
|
195
|
-
predictions,
|
|
196
|
-
embedding: embedding.slice(0, 8),
|
|
197
|
-
embeddingDims: embedding.length,
|
|
198
|
-
latency,
|
|
199
|
-
};
|
|
200
|
-
},
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
name: 'neural_patterns',
|
|
204
|
-
description: 'List, inspect, or delete entries in the stored pattern set (CRUD over the embedding-backed pattern store — no model or network involved)',
|
|
205
|
-
category: 'neural',
|
|
206
|
-
inputSchema: {
|
|
207
|
-
type: 'object',
|
|
208
|
-
properties: {
|
|
209
|
-
action: { type: 'string', enum: ['list', 'get', 'store', 'search', 'delete'], description: 'Action to perform' },
|
|
210
|
-
patternId: { type: 'string', description: 'Pattern ID' },
|
|
211
|
-
name: { type: 'string', description: 'Pattern name' },
|
|
212
|
-
type: { type: 'string', description: 'Pattern type' },
|
|
213
|
-
query: { type: 'string', description: 'Search query' },
|
|
214
|
-
data: { type: 'object', description: 'Pattern data' },
|
|
215
|
-
},
|
|
216
|
-
},
|
|
217
|
-
handler: async (input) => {
|
|
218
|
-
const action = input.action || 'list';
|
|
219
|
-
const { initializeIntelligence, getAllPatterns, getPatternsByType, getReasoningBank, findSimilarPatterns, deletePattern, flushPatterns } = await import('../memory/intelligence.js');
|
|
220
|
-
await initializeIntelligence();
|
|
221
|
-
if (action === 'list') {
|
|
222
|
-
const typeFilter = input.type;
|
|
223
|
-
const patterns = typeFilter
|
|
224
|
-
? await getPatternsByType(typeFilter)
|
|
225
|
-
: await getAllPatterns();
|
|
226
|
-
return {
|
|
227
|
-
patterns: patterns.map(p => ({
|
|
228
|
-
id: p.id,
|
|
229
|
-
name: p.content,
|
|
230
|
-
type: p.type,
|
|
231
|
-
usageCount: p.usageCount,
|
|
232
|
-
createdAt: typeof p.createdAt === 'number' ? new Date(p.createdAt).toISOString() : p.createdAt,
|
|
233
|
-
})),
|
|
234
|
-
total: patterns.length,
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
if (action === 'get') {
|
|
238
|
-
const patternId = input.patternId;
|
|
239
|
-
if (!patternId || RESERVED_KEYS.has(patternId)) {
|
|
240
|
-
return { success: false, error: 'Invalid patternId' };
|
|
241
|
-
}
|
|
242
|
-
const bank = getReasoningBank();
|
|
243
|
-
if (!bank) {
|
|
244
|
-
return { success: false, error: 'ReasoningBank not available' };
|
|
245
|
-
}
|
|
246
|
-
const pattern = bank.get(patternId);
|
|
247
|
-
if (!pattern) {
|
|
248
|
-
return { success: false, error: 'Pattern not found' };
|
|
249
|
-
}
|
|
250
|
-
return {
|
|
251
|
-
success: true,
|
|
252
|
-
pattern: {
|
|
253
|
-
id: pattern.id,
|
|
254
|
-
name: pattern.content,
|
|
255
|
-
type: pattern.type,
|
|
256
|
-
embedding: pattern.embedding,
|
|
257
|
-
metadata: pattern.metadata ?? {},
|
|
258
|
-
createdAt: new Date(pattern.createdAt).toISOString(),
|
|
259
|
-
usageCount: pattern.usageCount,
|
|
260
|
-
},
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
if (action === 'store') {
|
|
264
|
-
const allPatterns = await getAllPatterns();
|
|
265
|
-
if (allPatterns.length >= MAX_PATTERNS) {
|
|
266
|
-
return { success: false, error: `Pattern store full (max ${MAX_PATTERNS}). Run neural_compress first.` };
|
|
267
|
-
}
|
|
268
|
-
const MAX_PATTERN_NAME_LENGTH = 16 * 1024;
|
|
269
|
-
const rawPatternName = input.name || 'Unnamed pattern';
|
|
270
|
-
const patternName = typeof rawPatternName === 'string' && rawPatternName.length > MAX_PATTERN_NAME_LENGTH
|
|
271
|
-
? rawPatternName.slice(0, MAX_PATTERN_NAME_LENGTH)
|
|
272
|
-
: rawPatternName;
|
|
273
|
-
const embedding = await generateEmbedding(patternName, 384);
|
|
274
|
-
const patternId = `pattern-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
|
|
275
|
-
const patternType = input.type || 'general';
|
|
276
|
-
const bank = getReasoningBank();
|
|
277
|
-
if (!bank) {
|
|
278
|
-
return { success: false, error: 'ReasoningBank not available' };
|
|
279
|
-
}
|
|
280
|
-
bank.store({
|
|
281
|
-
id: patternId,
|
|
282
|
-
type: patternType,
|
|
283
|
-
embedding,
|
|
284
|
-
content: patternName,
|
|
285
|
-
confidence: 0.8,
|
|
286
|
-
metadata: input.data || {},
|
|
287
|
-
});
|
|
288
|
-
flushPatterns();
|
|
289
|
-
return {
|
|
290
|
-
success: true,
|
|
291
|
-
_realEmbedding: lastEmbeddingModel !== 'hash-fallback',
|
|
292
|
-
patternId,
|
|
293
|
-
name: patternName,
|
|
294
|
-
type: patternType,
|
|
295
|
-
embeddingDims: embedding.length,
|
|
296
|
-
createdAt: new Date().toISOString(),
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
if (action === 'search') {
|
|
300
|
-
const rawQuery = input.query;
|
|
301
|
-
const query = typeof rawQuery === 'string' && rawQuery.length > MAX_SEARCH_QUERY_LENGTH
|
|
302
|
-
? rawQuery.slice(0, MAX_SEARCH_QUERY_LENGTH)
|
|
303
|
-
: rawQuery;
|
|
304
|
-
const results = await findSimilarPatterns(query || '', {
|
|
305
|
-
k: 10,
|
|
306
|
-
threshold: 0.1,
|
|
307
|
-
});
|
|
308
|
-
return {
|
|
309
|
-
_realSimilarity: true,
|
|
310
|
-
_realEmbedding: lastEmbeddingModel !== 'hash-fallback',
|
|
311
|
-
query,
|
|
312
|
-
results: results.map(r => ({
|
|
313
|
-
id: r.id,
|
|
314
|
-
name: r.content,
|
|
315
|
-
type: r.type,
|
|
316
|
-
similarity: r.similarity ?? r.confidence,
|
|
317
|
-
})),
|
|
318
|
-
total: results.length,
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
if (action === 'delete') {
|
|
322
|
-
const patternId = input.patternId;
|
|
323
|
-
if (!patternId || RESERVED_KEYS.has(patternId)) {
|
|
324
|
-
return { success: false, error: 'Invalid patternId' };
|
|
325
|
-
}
|
|
326
|
-
const deleted = await deletePattern(patternId);
|
|
327
|
-
if (!deleted) {
|
|
328
|
-
return { success: false, error: 'Pattern not found' };
|
|
329
|
-
}
|
|
330
|
-
return { success: true, deleted: patternId };
|
|
331
|
-
}
|
|
332
|
-
return { success: false, error: 'Unknown action' };
|
|
333
|
-
},
|
|
334
|
-
},
|
|
335
|
-
{
|
|
336
|
-
name: 'neural_compress',
|
|
337
|
-
description: 'Compress pattern store (quantize, prune, or deduplicate)',
|
|
338
|
-
category: 'neural',
|
|
339
|
-
inputSchema: {
|
|
340
|
-
type: 'object',
|
|
341
|
-
properties: {
|
|
342
|
-
modelId: { type: 'string', description: 'Model ID to compress' },
|
|
343
|
-
method: { type: 'string', enum: ['quantize', 'prune', 'distill'], description: 'Compression method' },
|
|
344
|
-
targetSize: { type: 'number', description: 'Target size reduction (0-1)' },
|
|
345
|
-
},
|
|
346
|
-
},
|
|
347
|
-
handler: async (input) => {
|
|
348
|
-
const method = input.method || 'quantize';
|
|
349
|
-
const { initializeIntelligence, compactPatterns, getAllPatterns } = await import('../memory/intelligence.js');
|
|
350
|
-
await initializeIntelligence();
|
|
351
|
-
const patterns = await getAllPatterns();
|
|
352
|
-
if (patterns.length === 0) {
|
|
353
|
-
return { success: false, error: 'No patterns to compress. Train patterns first with neural_train.' };
|
|
354
|
-
}
|
|
355
|
-
const beforeCount = patterns.length;
|
|
356
|
-
if (method === 'quantize' || method === 'distill') {
|
|
357
|
-
// Both quantize and distill map to compactPatterns (dedup by cosine similarity)
|
|
358
|
-
const threshold = method === 'quantize' ? 0.99 : 0.95;
|
|
359
|
-
const result = await compactPatterns(threshold);
|
|
360
|
-
return {
|
|
361
|
-
success: true, _real: true, method,
|
|
362
|
-
patternsBefore: result.before,
|
|
363
|
-
patternsAfter: result.after,
|
|
364
|
-
patternsRemoved: result.removed,
|
|
365
|
-
note: method === 'quantize'
|
|
366
|
-
? 'Near-duplicate patterns removed (cosine > 0.99).'
|
|
367
|
-
: `Similar patterns merged (cosine > ${threshold}).`,
|
|
368
|
-
};
|
|
369
|
-
}
|
|
370
|
-
if (method === 'prune') {
|
|
371
|
-
// Prune maps to compactPatterns with a looser threshold
|
|
372
|
-
const targetReduction = input.targetSize || 0.5;
|
|
373
|
-
// Use a threshold proportional to target reduction (lower = more aggressive)
|
|
374
|
-
const threshold = 0.7 + (1 - targetReduction) * 0.25;
|
|
375
|
-
const result = await compactPatterns(threshold);
|
|
376
|
-
return {
|
|
377
|
-
success: true, _real: true, method,
|
|
378
|
-
patternsBefore: result.before,
|
|
379
|
-
patternsAfter: result.after,
|
|
380
|
-
patternsRemoved: result.removed,
|
|
381
|
-
};
|
|
382
|
-
}
|
|
383
|
-
return { success: false, error: `Unknown method: ${method}. Use quantize, prune, or distill.` };
|
|
384
|
-
},
|
|
385
|
-
},
|
|
386
|
-
{
|
|
387
|
-
name: 'neural_status',
|
|
388
|
-
description: 'Get pattern store status (pattern count, embedding dimensions, store health)',
|
|
389
|
-
category: 'neural',
|
|
390
|
-
inputSchema: {
|
|
391
|
-
type: 'object',
|
|
392
|
-
properties: {
|
|
393
|
-
modelId: { type: 'string', description: 'Specific model ID' },
|
|
394
|
-
detailed: { type: 'boolean', description: 'Include detailed info' },
|
|
395
|
-
},
|
|
396
|
-
},
|
|
397
|
-
handler: async (input) => {
|
|
398
|
-
const { initializeIntelligence, getIntelligenceStats, getAllPatterns } = await import('../memory/intelligence.js');
|
|
399
|
-
await initializeIntelligence();
|
|
400
|
-
const stats = getIntelligenceStats();
|
|
401
|
-
const patterns = await getAllPatterns();
|
|
402
|
-
if (input.modelId) {
|
|
403
|
-
const modelId = sanitizeModelId(input.modelId);
|
|
404
|
-
if (modelId === null) {
|
|
405
|
-
return { success: false, error: 'Invalid modelId' };
|
|
406
|
-
}
|
|
407
|
-
// Filter patterns belonging to this model (by metadata or id prefix)
|
|
408
|
-
const modelPatterns = patterns.filter(p => p.id.startsWith(modelId) ||
|
|
409
|
-
(p.metadata?.modelId === modelId));
|
|
410
|
-
return {
|
|
411
|
-
success: true,
|
|
412
|
-
model: {
|
|
413
|
-
id: modelId,
|
|
414
|
-
patternsStored: modelPatterns.length,
|
|
415
|
-
status: modelPatterns.length > 0 ? 'ready' : 'empty',
|
|
416
|
-
},
|
|
417
|
-
};
|
|
418
|
-
}
|
|
419
|
-
const byType = {};
|
|
420
|
-
for (const p of patterns) {
|
|
421
|
-
byType[p.type] = (byType[p.type] || 0) + 1;
|
|
422
|
-
}
|
|
423
|
-
return {
|
|
424
|
-
embeddingProvider: lastEmbeddingModel === 'unknown' ? 'not yet used' : lastEmbeddingModel,
|
|
425
|
-
sonaEnabled: stats.sonaEnabled,
|
|
426
|
-
models: {
|
|
427
|
-
total: 0, // models concept removed; patterns are stored directly
|
|
428
|
-
ready: 0,
|
|
429
|
-
indexing: 0,
|
|
430
|
-
},
|
|
431
|
-
patterns: {
|
|
432
|
-
total: patterns.length,
|
|
433
|
-
byType,
|
|
434
|
-
embeddingDims: patterns.length > 0 && patterns[0].embedding ? patterns[0].embedding.length : 384,
|
|
435
|
-
},
|
|
436
|
-
intelligence: {
|
|
437
|
-
reasoningBankSize: stats.reasoningBankSize,
|
|
438
|
-
patternsLearned: stats.patternsLearned,
|
|
439
|
-
trajectoriesRecorded: stats.trajectoriesRecorded,
|
|
440
|
-
},
|
|
441
|
-
};
|
|
442
|
-
},
|
|
443
|
-
},
|
|
444
|
-
{
|
|
445
|
-
name: 'neural_optimize',
|
|
446
|
-
description: 'Optimize pattern store (deduplicate, quantize, prune empty)',
|
|
447
|
-
category: 'neural',
|
|
448
|
-
inputSchema: {
|
|
449
|
-
type: 'object',
|
|
450
|
-
properties: {
|
|
451
|
-
modelId: { type: 'string', description: 'Model ID to optimize' },
|
|
452
|
-
target: { type: 'string', enum: ['speed', 'memory', 'accuracy', 'balanced'], description: 'Optimization target' },
|
|
453
|
-
},
|
|
454
|
-
},
|
|
455
|
-
handler: async (input) => {
|
|
456
|
-
const target = input.target || 'balanced';
|
|
457
|
-
const { initializeIntelligence, compactPatterns, getAllPatterns } = await import('../memory/intelligence.js');
|
|
458
|
-
await initializeIntelligence();
|
|
459
|
-
const patterns = await getAllPatterns();
|
|
460
|
-
if (patterns.length === 0) {
|
|
461
|
-
return { success: false, error: 'No patterns to optimize. Train patterns first with neural_train.' };
|
|
462
|
-
}
|
|
463
|
-
const startTime = performance.now();
|
|
464
|
-
const actions = [];
|
|
465
|
-
const beforeCount = patterns.length;
|
|
466
|
-
const dims = patterns[0]?.embedding?.length || 0;
|
|
467
|
-
// All optimization targets delegate to compactPatterns with varying thresholds
|
|
468
|
-
let threshold;
|
|
469
|
-
switch (target) {
|
|
470
|
-
case 'speed':
|
|
471
|
-
threshold = 0.99; // only near-exact duplicates
|
|
472
|
-
break;
|
|
473
|
-
case 'memory':
|
|
474
|
-
threshold = 0.90; // aggressive dedup
|
|
475
|
-
break;
|
|
476
|
-
case 'accuracy':
|
|
477
|
-
threshold = 0.98; // conservative
|
|
478
|
-
break;
|
|
479
|
-
case 'balanced':
|
|
480
|
-
default:
|
|
481
|
-
threshold = 0.95;
|
|
482
|
-
break;
|
|
483
|
-
}
|
|
484
|
-
const result = await compactPatterns(threshold);
|
|
485
|
-
if (result.removed > 0) {
|
|
486
|
-
actions.push(`Removed ${result.removed} similar patterns (cosine > ${threshold})`);
|
|
487
|
-
}
|
|
488
|
-
else {
|
|
489
|
-
actions.push('No duplicate patterns found');
|
|
490
|
-
}
|
|
491
|
-
const elapsed = Math.round(performance.now() - startTime);
|
|
492
|
-
return {
|
|
493
|
-
success: true, _real: true, target,
|
|
494
|
-
actions,
|
|
495
|
-
patternsBefore: result.before,
|
|
496
|
-
patternsAfter: result.after,
|
|
497
|
-
duplicatesRemoved: result.removed,
|
|
498
|
-
patternsQuantized: 0,
|
|
499
|
-
patternsRemoved: result.removed,
|
|
500
|
-
embeddingDims: dims,
|
|
501
|
-
elapsedMs: elapsed,
|
|
502
|
-
};
|
|
503
|
-
},
|
|
504
|
-
},
|
|
505
|
-
];
|
|
506
|
-
//# sourceMappingURL=neural-tools.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"neural-tools.js","sourceRoot":"","sources":["../../../src/mcp-tools/neural-tools.ts"],"names":[],"mappings":"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"}
|