* chore: point residual repo refs at dmtrKovalenko/fff
Update install URLs, download targets, and docs after the GitHub
rename from fff.nvim to fff. Preserve the existing Neovim package
name (fff.nvim) in lazy/vim.pack snippets so upgraders keep the same
install dir and lockfile identity.
* chore(docs): align Neovim package name with repo basename
Drop the explicit fff.nvim package name so lazy/vim.pack use fff from
the repository URL. Mild migration cost for existing installs (new
plugin dir + clean of the old one). Drop this commit to keep the
lowest-pain name=fff.nvim install snippets from the previous commit.
* feat(python): migrate Python bindings from ctypes to PyO3
- Add native PyO3 extension in crates/fff-python
- Replace ctypes wrapper with maturin-built package in packages/fff-python
- Expose FileFinder, search/glob/directory/mixed/grep APIs and result types
- Use PyPI package name fff-python (import name remains fff)
- Update workspace Cargo.toml/Cargo.lock and .gitignore for Python artifacts
* ci: add Python CI workflow and release wheel builds
- Add .github/workflows/python.yml to test bindings on Ubuntu/macOS/Windows
- Extend release.yaml with Python wheel builds (x86_64/aarch64) and sdist
- Add optional PyPI publish job using trusted publishing
* fix(python): address review feedback and release CI
Rust bindings:
- Release GIL during heavy search/grep operations via py.allow_threads
- Add MixedFileItem/MixedDirItem::from_core to avoid double-cloning
- Return PyDict directly from health_check and drop serde_json dependency
- Call destroy() in __exit__ so the context manager releases resources
- Add mode parameter to multi_grep for parity with grep
- Preserve cache budget overrides across reindex()
- Rename combo_boost param to match FuzzySearchOptions field
Docs/tests:
- Update Python test for dict-returning health_check
- Add Python bindings section to main README
CI:
- Fix pypi-publish job to depend on build-python/build-python-sdist
instead of release, making the workflow_dispatch checkbox functional
* fix(python): sync release versions and expand tests
* refactor(python): split lib.rs and improve Pythonic API
- Split crates/fff-python/src/lib.rs into modules:
- types.rs: all pyclass result types
- finder.rs: FileFinder implementation
- conversions.rs: From/core conversions
- Make API more Pythonic:
- FileFinder now accepts pathlib.Path / os.PathLike for base_path and reindex
- Add close() alias for destroy()
- grep/multi_grep now raise FFFException for invalid modes
- GrepResult gains has_more property and next_cursor() method
- Add type stubs:
- packages/fff-python/src/fff/__init__.pyi
- packages/fff-python/src/fff/py.typed
- Add __repr__ implementations for all exposed pyclasses
- Expand Python tests for pathlib, close(), reprs, invalid mode, and cursor pagination
* fix(python): align type stubs and runtime API
* refactor(python): polish binding API and GIL handling
Make the Python binding API more idiomatic before merge: replace getter-style methods with properties, keep close() as the single explicit shutdown API, add container semantics for result objects, and tighten type stubs with Literal/Sequence/PathLike support.
Also reduce Rust binding duplication with shared option/result helpers and release the Python GIL around blocking filesystem, git, and query-history operations.
* feat(python): async wait_for_scan with blocking variant
* fix(python): consistent frecency type and combo defaults matching node
* fix(python): health_check defaults to indexed path and reports cwd errors; expand readme
* chore(python): rename pypi distribution to fff-search
* chore(python): align version to 0.9.4 for unified release
* chore(release): bump python version with sed instead of inline python
* refactor(python): use From trait for core type conversions
* chore: do not run full prebuild of python wheels on PR
---------
Co-authored-by: Dmitriy Kovalenko <dmtr.kovalenko@outlook.com>
* docs: add Homebrew install for fff-mcp (#345)
Document `brew install jellydn/tap/fff-mcp` as an alternative to the
curl/PowerShell installers. Formula lives in jellydn/homebrew-tap and
pulls prebuilt binaries from GitHub releases (v0.9.1).
* ci: notify Homebrew tap on stable releases (#345)
After a stable release, dispatch jellydn/homebrew-tap to regenerate
fff-mcp.rb when HOMEBREW_TAP_DISPATCH_TOKEN is configured. Without the
secret, the tap's scheduled workflow still picks up new versions.
* ci: restrict Homebrew tap dispatch to dmtrKovalenko repo owner
Require repository_owner == dmtrKovalenko and send FFF_RELEASE_BUMP_SECRET
in dispatch payload for tap-side verification.
* docs: fix MCP install copy after Homebrew section
* fix(homebrew): move formula in-repo with release auto-bump (#571)
Address maintainer review: stop hardcoding README version and external
jellydn/homebrew-tap dependency. Formula/fff-mcp.rb is bumped on each
stable release so brew upgrade picks up new versions.
- Add Formula/fff-mcp.rb and scripts/bump-fff-mcp.sh (credit @jellydn)
- Replace external tap dispatch with bump-homebrew-formula job
- README: brew install dmtrKovalenko/fff/fff-mcp
* fix(homebrew): use version DSL and #{version} URLs in formula
Drop v = "x.y.z" and per-URL v0.9.1 literals. One version line plus
RELEASE_BASE; download paths interpolate version at install time.
CI bump script still sets version + sha256 from each release.
* fix: Correct the CI to include correct checksums
---------
Co-authored-by: Dmitriy Kovalenko <dmtr.kovalenko@outlook.com>
* perf: Improve performance for no link time optimmization builds
* chore: Update docs for - perf: Improve performance for no link time optimmization builds