feat(opencode): fff search tools#27802
Conversation
|
Hey! Your PR title Please update it to start with one of:
Where See CONTRIBUTING.md for details. |
|
The following comment was made by an LLM, it may be inaccurate: Based on the search results, I found 2 potentially related PRs that address similar fff search functionality:
Why they're related: All three PRs focus on integrating fff (a fuzzy file finder) with the search functionality. PR #27802 implements fff pickers for file search, content search, directories, and mixed search - which could potentially be addressing the same feature set as the earlier PRs. You may want to check if these earlier PRs were completed, merged, or abandoned to determine if #27802 is a duplicate effort or a continuation/improvement of prior work. |
|
Thanks for updating your PR! It now meets our contributing guidelines. 👍 |
359023d to
c53db50
Compare
| ) | ||
| } | ||
|
|
||
| if (result.hasNextPage) { |
There was a problem hiding this comment.
this is replaces the truncated message above. Needed because fff doesn't perform the full search once it found requested amount (there could be a bit more if certain file contains a ton of results as the internal pagination is happening over files)
This saves a ton of system resources on large directories when we can reduce amount of syscalls spent on opening and reading files
c53db50 to
e69acf4
Compare
e69acf4 to
8ee7f9a
Compare
Hona
left a comment
There was a problem hiding this comment.
I struggled far more than I should have trying to manually test this, so what is intended here anyway?
I wanted to make a cool post that worst-case agent scans of my whole hard drive are now faster, but I couldn't get those results:
C:\fell back to ripgrep.~with**/opencode.json{,c}fell back to ripgrep.~with missing**/opencode.jsoncfell back to ripgrep and failed.- The TUI
@file picker does not use FFF.
~ with **/opencode.json was fast through FFF, but it was the only path I could get working.
| const id = key(dir) | ||
| const made = yield* fffSync("create picker", () => | ||
| Fff.create({ | ||
| basePath: dir, |
There was a problem hiding this comment.
C:\ cannot use FFF here: FFF rejects filesystem roots, so worst-case broad searches immediately fall back to ripgrep.
|
|
||
| if (pick) { | ||
| const out = yield* fffSync("glob file search", () => | ||
| pick.fileSearch(include(input.pattern), { |
There was a problem hiding this comment.
**/opencode.json{,c} fell back to ripgrep while **/opencode.json used FFF. Common glob syntax appears to miss the new path.
| ), | ||
| ) | ||
|
|
||
| if (rows.length > 0) { |
There was a problem hiding this comment.
Shouldn't a successful FFF search with no matches return []? **/opencode.jsonc under ~ fell back to ripgrep and then failed on an inaccessible directory.
| yield* ensure() | ||
| const { cache } = yield* InstanceState.get(state) | ||
|
|
||
| if (query && kind === "file") { |
There was a problem hiding this comment.
The TUI @ picker does not hit this branch: it calls find.files({ query, workspace }), which resolves to kind === "all". I verified this headlessly against the PR checkout. On Windows, even an explicit type: "file" call still returned mode=cache because FFF results use / while the cached paths use \.
347f124 to
0805457
Compare
0805457 to
bb3e65b
Compare
* feat(app): improve desktop multi-server support (anomalyco#30678) Co-authored-by: Brendan Allan <git@brendonovich.dev> * chore: generate * fix(app): handle tab overflow and scrolling in titlebar (anomalyco#30886) * fix(app): tab overflow (anomalyco#30894) * tui: guard path formatting inputs (anomalyco#30469) Fixes anomalyco#27726, anomalyco#25216, anomalyco#24856, anomalyco#24294, anomalyco#17071, anomalyco#29164, anomalyco#24837, anomalyco#16865, anomalyco#14279, anomalyco#29895 * opencode/run: refresh themes after terminal reloads (anomalyco#30917) * chore: generate * fix(tui): fall back to local cwd when editor spawns in attach mode (anomalyco#30583) * docs: update Go Qwen tiered pricing (anomalyco#30936) * chore: generate * feat(tui): add diff hunk navigation (anomalyco#30935) * chore: rm fuzzy search on references (anomalyco#30931) * fix: use mapError instead of orDie for context snapshot decoding (anomalyco#30905) Co-authored-by: Shoubhit Dash <shoubhit2005@gmail.com> * fix(core): recover corrupted models cache (anomalyco#30947) * chore: bun install (anomalyco#30968) * fix(opencode): resolve Bedrock hang by using node build conditions (anomalyco#30873) * fix(workflows): retry nix-hashes compute-hash on transient failure (anomalyco#30743) * fix(stats): scroll model charts to latest on mobile * fix(opencode): prevent destructive edit matches (anomalyco#30932) * chore: generate * fix(core): respect v2 default agents (anomalyco#30969) * chore: generate * test(opencode): remove disposal event wait race (anomalyco#30971) * test(opencode): remove shell timeout output race (anomalyco#30974) * fix(opencode): gate reasoning summaries by provider (anomalyco#30973) * feat(core): admit v2 skill guidance (anomalyco#30843) * fix(workflows): serialize desktop release uploads (anomalyco#30978) * fix(stats): add mobile chart end spacing * chore: generate * sync release versions for v1.16.2 * feat(core): interrupt v2 session execution (anomalyco#30850) * chore: generate * feat(core): honor default session models (anomalyco#30982) * fix(core): harden model selection edges (anomalyco#30987) * fix(tui): show current location in working copies; order by created; change shortcut; tab to cycle actions in dialog select (anomalyco#30989) * chore: generate * feat(core): compact v2 session context (anomalyco#30986) * fix(opencode): terminate help output with newline (anomalyco#30992) * fix(opencode): honor Bedrock Mantle config (anomalyco#31001) * fix(core): preserve model request semantics (anomalyco#30990) * chore: generate * feat(core): bound v2 tool output (anomalyco#30999) * chore: generate * fix(core): scope Vertex provider transforms (anomalyco#31004) * feat(core): expose session model switching (anomalyco#31011) * fix(tui): update tool spacing before layout * fix(core): recover v2 context overflow (anomalyco#31005) * fix(core): validate public session model switches (anomalyco#31012) * feat(tui): delete working copies from move dialog (anomalyco#31017) * chore: generate * fix(tui): bootstrap new project copies (anomalyco#31019) * fix(opencode): limit generated project copy names (anomalyco#31022) * fix(tui): inject reminder after moving session (anomalyco#31027) * fix(session): respect directory filter with workspaces (anomalyco#30804) * feat(app): improve servers UI (anomalyco#30961) * chore: generate * feat(app): updates to project avatar (anomalyco#30964) * chore: generate * feat(app): sessions list improvements (anomalyco#30941) * chore: generate * fix(core): scope v2 prompt cache by session (anomalyco#31036) Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> * fix(stats): filter market share to go * fix(app): increase project session limit and add scrolling (anomalyco#31035) * fix(core): make V2 reads media-aware and binary-safe (anomalyco#31038) * chore: update nix node_modules hashes * feat(opencode): add search to auth logout command (anomalyco#31053) * feat(opencode): support non-interactive MCP add (anomalyco#31054) * feat(http-recorder): prepare public beta release (anomalyco#31018) * refactor(core): simplify filesystem mutation protocol (anomalyco#31059) * refactor(core): simplify filesystem read protocol (anomalyco#31058) * chore: update nix node_modules hashes * refactor(core): simplify search root protocol (anomalyco#31060) * feat: desktop v2 everything WSL (anomalyco#23407) * chore: generate * fix(core): bound prompt cache session keys (anomalyco#31062) * fix(core): enforce V2 tool permissions (anomalyco#31061) * feat(opencode): fff search tools (anomalyco#27802) Co-authored-by: Shoubhit Dash <shoubhit2005@gmail.com> * chore: generate * chore: update nix node_modules hashes * fix: background agent prompting, lets kill this sleep behavior oml (anomalyco#31162) * test: fix tool test (anomalyco#31163) * docs: fix MCP header interpolation example to {env:VAR} (anomalyco#31078) Co-authored-by: wujunchen <wujunchen@baidu.com> * chore(http-recorder): disable release automation (anomalyco#31160) * refactor(core): unify v2 tool architecture (anomalyco#31168) * fix(core): use static tool type imports (anomalyco#31170) * docs(v2): update permission rule naming (anomalyco#31167) * fix(core): isolate image normalization (anomalyco#31165) * fix(test): release Windows search handles (anomalyco#31172) * fix(core): harden unified tool runtime (anomalyco#31171) * test(core): cover managed output read permissions (anomalyco#31166) * fix(core): preserve session failure causes * refactor(server): canonicalize service API (anomalyco#31049) * chore: generate * chore: update nix node_modules hashes * fix(tui): sort connect providers alphabetically (anomalyco#30891) Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: rekram1-node <rekram1-node@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> * feat(desktop): make updates persistent and responsive (anomalyco#31191) * chore: generate * refactor(tui): extract standalone package (anomalyco#31193) * chore: generate * chore: update nix node_modules hashes * fix(app): refresh directory MCP status (anomalyco#31194) * feat(desktop): open attachments in active project (anomalyco#31192) * chore: generate * fix(desktop): style home session scrollbar (anomalyco#31202) * fix(desktop): disable hidden agent cycling (anomalyco#31207) * test(core): cover skill directory output (anomalyco#31263) * fix(opencode): avoid duplicate skill catalog (anomalyco#31269) * chore(opencode): update MCP SDK to 1.29.0 (anomalyco#31268) * chore: generate * chore: update nix node_modules hashes * run: make minimal mode more minimal (anomalyco#31227) * chore: generate --------- Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: Simon Klee <hello@simonklee.dk> Co-authored-by: pcadena-lila <pcadena@lila.ai> Co-authored-by: Jack <jack@anoma.ly> Co-authored-by: Shoubhit Dash <shoubhit2005@gmail.com> Co-authored-by: weiconghe <46336277+weiconghe@users.noreply.github.com> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: alberto <914199+alblez@users.noreply.github.com> Co-authored-by: Jérôme Benoit <jerome.benoit@sap.com> Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: James Long <longster@gmail.com> Co-authored-by: mridul <65942753+rexdotsh@users.noreply.github.com> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Dmitriy Kovalenko <dmitriy@iusevimbtw.com> Co-authored-by: fancivez <384514351@qq.com> Co-authored-by: wujunchen <wujunchen@baidu.com> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: Robert Douglass <rob@robshouse.net> Co-authored-by: rekram1-node <rekram1-node@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
Issue for this PR
Closes #<you guys know right?>
Type of change
What does this PR do?
This implements fff pickers for the all file search operation - file search, content search, directories & mixed search.
If you paste a large clearly AI generated description here your PR may be IGNORED or CLOSED!
How did you verify your code works?
bun test
bun dev .
bun run bench-fff.ts
Checklist
If you do not follow this template your PR will be automatically rejected.