Recursive fs.watch on a WSL2 /mnt NTFS/9p mount walks the directory tree with every readdir/stat crossing the Windows boundary, stalling the event loop long enough to blow past opencode's 30s MCP handshake timeout so the tools never appear. This is the file-watcher half of the #172 fix, which moved the DB/WASM open off the handshake but left the watcher on the critical path. - Add watchDisabledReason() policy: CODEGRAPH_NO_WATCH (off) > CODEGRAPH_FORCE_WATCH (force on) > WSL2 + /mnt auto-detect (off). FileWatcher.start() and the MCP server both honor it; the server now logs why watching is off and how to refresh. - Add `codegraph serve --mcp --no-watch`. - When watching is off, init/install offer git sync hooks (post-commit, post-merge, post-checkout) that run `codegraph sync` in the background, or fall back to manual sync; either way the user is told the index stays frozen until re-synced. uninit removes the hooks. - Tests: watch-policy + git-hooks (idempotency, user-content preservation, core.hooksPath). Root-cause analysis and workaround by @mengfanbo123. Closes #199 Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
79b9601aae
commit
cf7db7cb98
@@ -6,8 +6,20 @@
|
||||
*
|
||||
* Components:
|
||||
* - FileWatcher: Debounced fs.watch that auto-triggers sync on file changes
|
||||
* - Watch policy: decides when the watcher must be disabled (e.g. WSL2 /mnt)
|
||||
* - Git sync hooks: opt-in commit/merge/checkout hooks when watching is off
|
||||
* - Content hashing for change detection (in extraction module)
|
||||
* - Incremental reindexing (in extraction module)
|
||||
*/
|
||||
|
||||
export { FileWatcher, WatchOptions } from './watcher';
|
||||
export { watchDisabledReason, detectWsl } from './watch-policy';
|
||||
export {
|
||||
installGitSyncHook,
|
||||
removeGitSyncHook,
|
||||
isSyncHookInstalled,
|
||||
isGitRepo,
|
||||
DEFAULT_SYNC_HOOKS,
|
||||
type GitHookName,
|
||||
type GitHookResult,
|
||||
} from './git-hooks';
|
||||
|
||||
Reference in New Issue
Block a user