@mmlotfy/intellicodemcp
Version:
IntelliCodeMCP - Advanced AI Model Context Protocol System for intelligent code management and orchestration
112 lines • 4.42 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeSmartContext = executeSmartContext;
const fs_1 = require("fs");
const path_1 = __importDefault(require("path"));
const memory_bank_1 = require("./memory-bank");
const fuse_js_1 = __importDefault(require("fuse.js"));
async function executeSmartContext(args) {
const { thread_id, task_id, max_tokens = 10000, query } = args;
const timestamp = new Date().toISOString();
let contextContent = '';
try {
// Gather context from threads or tasks
if (thread_id) {
const threadFile = path_1.default.join('intelliMemoryHub', 'threads', `${thread_id}.txt`);
contextContent += await fs_1.promises.readFile(threadFile, 'utf8');
}
if (task_id) {
const taskFile = path_1.default.join('intelliMemoryHub', 'knots', `${task_id}.txt`);
contextContent += await fs_1.promises.readFile(taskFile, 'utf8');
}
// Perform search if query is provided
let searchResults = [];
if (query) {
searchResults = await searchContext(query);
contextContent += `\nSearch Results:\n${searchResults.map(r => `File: ${r.file}, Preview: ${r.content}`).join('\n')}`;
}
// Generate summary (simulated with truncation for now)
const summary = truncateContent(contextContent, max_tokens);
// Save summary
const summaryFile = `summary_${timestamp.replace(/[-:.]/g, '')}.json`;
const summaryData = {
thread_id,
task_id,
summary,
search_results: searchResults,
timestamp,
};
await (0, memory_bank_1.executeMemoryFile)({
action: 'write',
category: 'docs',
file_name: `weaver_summaries/${summaryFile}`,
content: JSON.stringify(summaryData, null, 2),
});
return summaryData;
}
catch (err) {
const errorSummary = {
summary: `Error generating summary: ${err.message}`,
timestamp,
};
await (0, memory_bank_1.executeMemoryFile)({
action: 'write',
category: 'docs',
file_name: `weaver_summaries/error_${timestamp.replace(/[-:.]/g, '')}.json`,
content: JSON.stringify(errorSummary, null, 2),
});
throw err;
}
}
async function searchContext(query) {
const basePath = path_1.default.resolve(process.cwd(), 'intelliMemoryHub');
const files = await getFiles(basePath);
const documents = await Promise.all(files.map(async (file) => ({
file: path_1.default.relative(process.cwd(), file),
content: await fs_1.promises.readFile(file, 'utf8'),
})));
const fuse = new fuse_js_1.default(documents, {
keys: ['content'],
includeScore: true,
threshold: 0.3,
});
const results = fuse.search(query);
const searchResults = results.map((result) => ({
file: result.item.file,
content: result.item.content.slice(0, 200) + '...',
score: result.score || 0,
}));
const timestamp = new Date().toISOString().replace(/[-:.]/g, '');
await (0, memory_bank_1.executeMemoryFile)({
action: 'write',
category: 'search',
file_name: `search_result_${timestamp}.json`,
content: JSON.stringify({ query, results: searchResults, timestamp: new Date().toISOString() }, null, 2),
});
return searchResults;
}
async function getFiles(dir) {
const entries = await fs_1.promises.readdir(dir, { withFileTypes: true });
const files = [];
for (const entry of entries) {
const fullPath = path_1.default.join(dir, entry.name);
if (entry.isDirectory()) {
files.push(...await getFiles(fullPath));
}
else if (fullPath.match(/\.(ts|tsx|js|jsx|txt|md|json|yaml)$/)) {
files.push(fullPath);
}
}
return files;
}
function truncateContent(content, maxTokens) {
// Rough token estimation: 1 token ≈ 4 characters
const maxChars = maxTokens * 4;
if (content.length <= maxChars)
return content;
return content.slice(0, maxChars) + '...';
}
//# sourceMappingURL=smartcontext-weaver.js.map