Add Droid (Factory) as a provider - #227
Open
dancaldera wants to merge 2 commits into
Open
dancaldera wants to merge 2 commits into
dancaldera wants to merge 2 commits into
Conversation
Drive the Factory Droid CLI over its documented ACP transport (droid exec --output-format acp) through the shared AcpDriver: - ProviderKind::Droid wired end to end: resume cursors, session listing and history import, commit-message generation, live slash commands, provider marks for desktop, web, and mobile - Access modes map onto Droid's autonomy ladder (normal, auto-low, auto-medium, auto-high) - Model discovery walks the account catalog on a local-only session (_meta.sessionId skips the Factory-side record) and reads each model's effort ladder from session/resume, so new releases and BYOK routes need no hardcoded table; a lone-choice answer such as the auto router's None gets no selector - Steering stays off until concurrent session/prompt behavior is verified; fork and rewind stay disabled like Fx and Kimi - Documented in docs/providers.md with the load-bearing quirks
aleclarson
reviewed
Sep 14, 2026
aleclarson
left a comment
Contributor
There was a problem hiding this comment.
Nice integration — the enum/cursor wiring, capability flags, and per-model effort discovery all look right, and keeping steering/fork/rewind off until verified is the right call. A few things before merge:
Bugs
apps/mobile/src/hooks/use-daemon-data.ts— thePROVIDERSlist is missing'droid', souseProviderCatalognever probes it and Droid can't appear in the mobile provider picker even when installed.packages/waku-client/src/composer-preferences.ts— thePROVIDERSset is missing'droid';parsePreferencesdiscards stored prefs whenlastProviderisn't in the set, so a Droid user's composer prefs silently reset tocodexdefaults.crates/waku-core/src/model_catalog.rs(discover_droid_models) —session/resumeis sent withoutcwd, which is a required field in the ACP schema. Works on droid 0.217.0, but adding"cwd": cwd.to_string_lossy()(it's in scope) is free insurance against stricter validation.
Optional
SetSessionConfigOptionResponsealready returns refreshedconfigOptions— if Droid populates it there, the per-modelsession/resumecan be dropped and the discovery walk halves. If it doesn't, a one-line comment would help._meta.sessionIdfor a local-only session relies on undocumented behavior; if it regresses, every discovery writes a ghost session into the user's Factory history.session/closeafter the walk would hedge this.src/app/composer.rsbumpsprovider_mark10.5 → 12.0 for all providers — probably a correct fix, but it's an unrelated global visual change; worth splitting or calling out.
Verdict: approve once the two TS lists and the cwd are fixed.
- add 'droid' to the mobile daemon-data and client composer-preferences provider lists, so the mobile picker probes it and stored preferences survive re-parse instead of resetting to codex defaults - send the ACP-required cwd with the discovery session/resume re-read - hedge the local-only discovery session with a best-effort session/close (droid 0.219.0 answers Method not found today) and document why the per-model re-read is needed: set_config_option answers stay empty - normalize rustfmt drift in driver/acp.rs and driver/mod.rs Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Author
|
Thanks for the careful review! Fixes are in 2a62a32:
On the optional notes:
|
aleclarson
approved these changes
Sep 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hello! This is my first pr into this project, and I'd like one of my favorite harnesses to be added to this one. Seeing that this is actually making everything very clean and only creating a good way to wrap different harnesses, I can apply any suggestion, and this pr only is related to adding this provider.
Problem and solution
Droid speaks ACP so it rides the same driver as Cursor, Fx, Grok and Kimi, there is no new transport here. The provider is wired end to end: resume cursors, session list and history import, commit messages, live slash commands and provider marks for desktop, web and mobile. Access modes map to droid's autonomy ladder and model discovery asks droid itself for each model's effort ladder on a local-only session, so there is no hardcoded table that can drift when new models ship.
Checks
Limitations and follow-up
Related issue
None yet, happy to open one if the maintainers prefer.
AI disclosure
Used an AI coding agent (T3 Code running GLM) to implement the integration, run the checks and prepare the branch. I reviewed the work, tested it against my local droid, and wrote the intro of this description myself.
Checklist