Skip to main content
Glama

AutoDev Codebase MCP Server

by anrgct
250705-force-option-simplified-fix.md3.44 kB
# Force选项修复方案 - 简化版 ## 问题分析 **原始问题:** - `--force` 选项无法正常工作,仍然触发缓存行为 - 原因:`reconcileIndex()` 在 `initialize()` 内部执行,但 `clearIndexData()` 在 `initialize()` 之后执行 - 时序错误:reconciliation → force清理,应该是:force清理 → reconciliation **执行流程问题:** ``` 当前流程(错误): initialize() → reconcileIndex() → clearIndexData() ↑ ↑ 看到缓存状态 清理太晚了 ``` ## 解决方案 **核心思路:** 将force标志传递到 `initialize()` 内部,在reconciliation之前处理force清理。 ### 1. 修改 `CodeIndexManager.initialize()` ```typescript public async initialize(options?: { force?: boolean }): Promise<{ requiresRestart: boolean }> { // 1. ConfigManager 和 CacheManager 初始化... // (保持现有逻辑) // 2. 检查特性是否启用... // (保持现有逻辑) // 3. CacheManager 初始化... // (保持现有逻辑) // 4. 服务创建... const needsServiceRecreation = !this._serviceFactory || requiresRestart if (needsServiceRecreation) { // 停止监控器... // 创建服务... // 创建orchestrator... // **关键修改:force清理在reconciliation之前** if (options?.force) { this.dependencies.logger?.info("Force mode enabled, clearing index data before reconciliation...") // 清理向量存储 if (this.isFeatureConfigured) { await vectorStore.deleteCollection() await new Promise(resolve => setTimeout(resolve, 500)) await vectorStore.initialize() } // 清理缓存 await this._cacheManager.clearCacheFile() this.dependencies.logger?.info("Force clear completed, proceeding with reconciliation...") } // reconciliation(此时已经是干净状态) await this.reconcileIndex(vectorStore, scanner) } // 5. 处理索引启动/重启... // (保持现有逻辑) } ``` ### 2. 修改 `tui-runner.ts` ```typescript // 简化:只需传递force标志 const initResult = await manager.initialize({ force: options.force }); // 删除原来的force处理逻辑 // if (options.force) { // await manager.clearIndexData(); // 删除这部分 // } ``` ### 3. 同时修改其他TUI模式 ```typescript // startMCPServerMode 和其他模式 const initResult = await manager.initialize({ force: options.force }); ``` ## 方案优势 1. **最小修改** - 只需修改2个文件,删除重复的force处理代码 2. **逻辑清晰** - force清理和reconciliation在同一个方法内,时序可控 3. **无额外状态** - 不需要在多个类之间传递状态 4. **一致性** - 所有初始化路径都通过同一个接口 ## 修复后的执行流程 ``` 正确流程: initialize({ force: true }) ├── 基础服务初始化 ├── 服务重新创建时: │ ├── force清理(如果指定) │ └── reconciliation(看到干净状态) └── 启动索引 ``` ## 关键改进 - **时序修复**: force清理现在在reconciliation之前执行 - **状态一致性**: reconciliation永远看不到"脏"的缓存状态 - **代码简化**: 删除了重复的force处理逻辑 - **接口统一**: 所有初始化都通过同一个带选项的接口 这样 `--force` 选项就能正确工作,跳过缓存并重新索引所有文件。

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