When the @ autocomplete triggers RecursiveFileSearch, the crawler
materialises the entire project tree into memory with no upper bound.
For very large workspaces (missing .gitignore, huge node_modules, home
directory as cwd) this pushes Node.js past its heap limit and crashes.
- Add `maxFiles` option to CrawlOptions; use fdir's withMaxFiles() to
stop traversal early instead of post-hoc truncation
- Apply file-level ignore patterns during crawl via fdir filter() so
ignored files don't consume the maxFiles budget
- Include maxFiles in the crawl cache key for correctness
- Set MAX_CRAWL_FILES = 100 000 in RecursiveFileSearch (caps peak
memory at ~50 MB for the file list)
Fixes#3130