Skip to main content
Glama

AutoDev Codebase MCP Server

by anrgct
run-demo-tui.tsx6.58 kB
#!/usr/bin/env node import React from 'react'; import { render, Box, Text } from 'ink'; import * as path from 'path'; import { fileURLToPath } from 'url'; import { dirname } from 'path'; import { createNodeDependencies } from '../adapters/nodejs'; import { CodeIndexManager } from '../code-index/manager'; import { App } from './tui/App'; import fs from 'fs'; import createSampleFiles from './create-sample-files'; const DEMO_FOLDER = path.join(process.cwd(), 'demo'); const OLLAMA_BASE_URL = 'http://localhost:11434'; const QDRANT_URL = 'http://localhost:6333'; const OLLAMA_MODEL = 'nomic-embed-text'; const AppWithData: React.FC = () => { const [codeIndexManager, setCodeIndexManager] = React.useState<any>(null); const [dependencies, setDependencies] = React.useState<any>(null); const [error, setError] = React.useState<string | null>(null); React.useEffect(() => { async function initialize() { const deps = createNodeDependencies({ workspacePath: DEMO_FOLDER, storageOptions: { globalStoragePath: path.join(process.cwd(), '.autodev-storage'), }, loggerOptions: { name: 'Demo-Codebase-TUI', level: 'error', timestamps: true, colors: true }, configOptions: { configPath: path.join(process.cwd(), '.autodev-config.json'), defaultConfig: { isEnabled: true, isConfigured: true, embedder: { provider: "ollama", model: OLLAMA_MODEL, baseUrl: OLLAMA_BASE_URL, dimension: 768, }, qdrantUrl: QDRANT_URL } } }); try { const demoFolderExists = await deps.fileSystem.exists(DEMO_FOLDER); if (!demoFolderExists) { fs.mkdirSync(DEMO_FOLDER, { recursive: true }); await createSampleFiles(deps.fileSystem, DEMO_FOLDER); } deps.logger?.info('[run-demo]⚙️ 加载配置...'); const config = await deps.configProvider.loadConfig(); deps.logger?.info('[run-demo]📝 配置内容:', JSON.stringify(config, null, 2)); deps.logger?.info('[run-demo]✅ 验证配置...'); const validation = await deps.configProvider.validateConfig(); deps.logger?.info('[run-demo]📝 验证结果:', validation); if (!validation.isValid) { deps.logger?.warn('[run-demo]⚠️ 配置验证警告:', validation.errors); deps.logger?.info('[run-demo]⚠️ 继续初始化(调试模式)'); // 在调试模式下,我们允许配置验证失败但继续初始化 } else { deps.logger?.info('[run-demo]✅ 配置验证通过'); } setDependencies(deps); deps.logger?.info('Creating CodeIndexManager with dependencies:', { hasFileSystem: !!deps.fileSystem, hasStorage: !!deps.storage, hasEventBus: !!deps.eventBus, hasWorkspace: !!deps.workspace, hasPathUtils: !!deps.pathUtils, hasConfigProvider: !!deps.configProvider, workspaceRootPath: deps.workspace.getRootPath() }); const manager = CodeIndexManager.getInstance(deps); deps.logger?.info('CodeIndexManager instance created:', !!manager); if (!manager) { setError('Failed to create CodeIndexManager - workspace root path may be invalid'); return; } deps.logger?.info('[run-demo]⚙️ 初始化 CodeIndexManager...'); const initResult = await manager.initialize(); deps.logger?.info('[run-demo]✅ CodeIndexManager 初始化成功:', initResult); deps.logger?.info('[run-demo]📝 管理器状态:', { isInitialized: manager.isInitialized, isFeatureEnabled: manager.isFeatureEnabled, isFeatureConfigured: manager.isFeatureConfigured, state: manager.state }); deps.logger?.info('[run-demo]🔄 设置 CodeIndexManager 到状态中...'); setCodeIndexManager(manager); deps.logger?.info('[run-demo]✅ CodeIndexManager 已设置到状态'); // Start indexing in background deps.logger?.info('[run-demo]🚀 准备开始索引...'); // 设置进度监控 manager.onProgressUpdate((progressInfo) => { deps.logger?.info('[run-demo]📊 索引进度:', progressInfo); }); setTimeout(() => { if (manager.isFeatureEnabled && manager.isInitialized) { deps.logger?.info('[run-demo]🚀 开始索引进程...'); deps.logger?.info('[run-demo]📊 当前状态:', manager.state); // 添加超时保护 const indexingTimeout = setTimeout(() => { deps.logger?.warn('[run-demo]⚠️ 索引进程超时(30秒),可能卡住了'); }, 30000); manager.startIndexing() .then(() => { clearTimeout(indexingTimeout); deps.logger?.info('[run-demo]✅ 索引完成'); }) .catch((err: any) => { clearTimeout(indexingTimeout); deps.logger?.error('[run-demo]❌ 索引失败:', err); deps.logger?.error('[run-demo]❌ 错误堆栈:', err.stack); setError(`Indexing failed: ${err.message}`); }); } else { deps.logger?.warn('[run-demo]⚠️ 跳过索引 - 功能未启用或未初始化'); deps.logger?.error('[run-demo]📊 功能状态:', { isFeatureEnabled: manager.isFeatureEnabled, isInitialized: manager.isInitialized, state: manager.state }); } }, 1000); deps.logger?.info('[run-demo]✅ 初始化完成'); } catch (err: any) { deps.logger?.error('[run-demo]❌ 初始化失败:', err); deps.logger?.error('[run-demo]❌ 错误堆栈:', err.stack); setError(`Initialization failed: ${err.message}`); } } initialize(); }, []); if (error) { return ( <Box flexDirection="column" padding={1}> <Text bold color="red">❌ 初始化失败</Text> <Text color="white">{error}</Text> <Text color="gray">请检查配置或服务连接状态</Text> </Box> ); } return <App codeIndexManager={codeIndexManager} dependencies={dependencies} />; }; if (import.meta.url === `file://${process.argv[1]}`) { render(<AppWithData />); } export default AppWithData;

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/anrgct/autodev-codebase'

If you have feedback or need assistance with the MCP directory API, please join our Discord server