You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* refactor(chat): extract shared ACP host client for CLI pools
Share createAcpHostClient and acquireAcpCliConnection between providers.
Refactor Cursor ACP pool to delegate spawn/init and cursor_login handling.
Co-authored-by: Arul Sharma <arul28@users.noreply.github.com>
* feat(chat): add Factory Droid ACP work chat surface
- Spawn droid exec --output-format acp with pooled JSON-RPC like Cursor
- Dynamic droid/* model descriptors, discovery + defaults, auth via CLI + FACTORY_API_KEY
- Wire DroidRuntime through agent chat (turns, steer queue, interrupt, permissions, persistence)
- Extend AI status, model picker grouping, providers settings, missions permissions for droid
Co-authored-by: Arul Sharma <arul28@users.noreply.github.com>
* fix(acp): dedupe pool refs, pending init, process eviction, terminal safety
- Serialize acquire per poolKey with shared pending init; fix double inner ref on cursor/droid fast path
- Evict stale entries on child close/error; kill process and log stderr tail on init/handshake failure
- Resolve ACP terminal cwd within lane root; cap waitForTerminalExit with SIGKILL + close wait
Co-authored-by: Arul Sharma <arul28@users.noreply.github.com>
* fix(droid): PR review — executable order, auth, interrupts, UI copy
- Prefer DROID_EXECUTABLE/FACTORY_DROID_EXECUTABLE over synthetic auth paths
- Do not treat droid --version as login; use FACTORY_API_KEY, ~/.factory/settings, or auth probes
- Only inject FACTORY_API_KEY cli-subscription when binary resolves (not fallback-command)
- Align droid blocker and settings login hint with actual auth steps
- Honor interrupt during Droid runtime setup and before prompt dispatch; avoid Claude fallback on cancel mid-setup
- Approval_request detail: cursorAcp only for Cursor; add acpHost source
- Map unified edit mode to Droid --auto medium
Co-authored-by: Arul Sharma <arul28@users.noreply.github.com>
* fix(droid): auth probe verified flags; resolveDroid path; setup/turn interrupt events
- inspectDroidCliPresence: STRONG_UNAUTH => verified true; inconclusive => verified false
- detectCliAuthStatuses droid: use resolveDroidExecutable path for probes
- ensureDroidRuntime: abort if managed.closed after acquire; release pool
- runDroidTurn: emit interrupted status + terminal events on early exit and closed-during-setup
Co-authored-by: Arul Sharma <arul28@users.noreply.github.com>
* fix(acp): bounded acquire retries; clear waitForTerminalExit kill timer on close
- Replace recursive acquireAcpCliConnection with retry loop (max attempts + backoff)
- Clear SIGKILL timeout when process closes before WAIT_FOR_TERMINAL_EXIT_MAX_MS
Co-authored-by: Arul Sharma <arul28@users.noreply.github.com>
* fix: auth probe, pool generation guards, root path, double-release, and pool key normalization
- authDetector: inspect stdout+stderr for auth patterns regardless of exit code
- acpCliPool: getRootPath returns options.spawn.cwd instead of empty string
- agentChatService: prevent double releaseDroidAcpConnection via released flag
- agentChatService: droidPoolKeyFor uses resolved model ID, not raw session model
- cursorAcpPool/droidAcpPool: add generation tokens to prevent stale-generation
races — acquire returns { pooled, generation }, release validates generation
- agentChatService: thread poolGeneration through CursorRuntime/DroidRuntime
- Update test mocks to match new { pooled, generation } return shape
* fix(droid): restore rebased chat surface updates
* Deduplicate Droid chat and discover custom models
* Add /shipLane command and portable ship-lane playbook
Introduces an autonomous PR-to-merge driver that runs automate → finalize
once, then polls CI and review comments on a self-paced 12-min cadence,
fixing valid comments and failing tests in place. Prefers TeamCreate agent
teams when available, falls back to parallel Agent calls otherwise. Opens
the PR via `ade prs create` when possible so it shows up in ADE's PR
tracking; falls back to `gh pr create` only after the agent has genuinely
exhausted the ADE path via `--help`-driven discovery.
Also narrows /automate to run only the new and affected tests (not the
full suite), and makes /finalize's 8-shard parallel run explicit so shards
don't get chained serially.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
(cherry picked from commit 68ef71a)
* Drop trailing slash on node_modules gitignore pattern
Lane worktrees use symlinks named node_modules pointing at the main
checkout's installed copies. The previous `node_modules/` pattern only
matched directories, so git saw the symlinks as untracked — which in turn
blocked `ade prs create` preflight and forced /shipLane to fall back to
`gh pr create`. Without the slash, the pattern matches both directories
(main checkout) and symlinks (worktrees).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
(cherry picked from commit 07623ee)
* Add Phase 3j cleanup of lingering worker processes to /finalize
The 8-shard vitest run, parallel tsup builds, and typecheck fans sometimes
leave worker pools behind after the phase exits. They don't fail CI but
accumulate across runs and can hold file locks. New Phase 3j kills them
scoped to apps/ paths so vitest instances the user may have running
elsewhere aren't affected. Adds a Cleanup line to the Phase 4 summary and
the completion checklist.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
(cherry picked from commit 3a5fbe5)
* ship: checkpoint before automate/finalize
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* test(droid): cover resolveDroidExecutable resolution priority
Mirrors the codexExecutable test pattern: env override beats auth path,
auth path beats PATH lookup, fallback returns the bare 'droid' command.
* test(ai): seed droid provider connection in aiIntegrationService fixture
aiIntegrationService.ts now reads providerConnections.droid.runtimeAvailable
unconditionally, but the test helper only built {claude, codex, cursor},
producing TypeError on getStatus. Add droid to the helper, ServiceFactoryOptions
availability, and the cli statuses / detectAllAuth mocks.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* ship: iteration 1 — fix test-desktop (5) authDetector droid probe, address 22 review comments
CI: authDetector.test.ts 'treats droid exec list-tools as a valid authenticated probe' was failing because the test mocks did not cover the new droid resolution path; fixed mock setup so installed/verified resolve.
Review: 22 actionable comments addressed across Greptile (3 P1/P2), Capy (1), and CodeRabbit (18) — covers async readFileSync, concurrency guard, dead code, ACP pool races, droid auth gating, permission propagation, terminal kill escalation, generic adapter fallback, browserMock helpers, AgentChatPane legacy autonomy, UsageGuardrails droid signal, providerModelSelectorGrouping factory metadata.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Arul Sharma <arul28@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments