Skip to content

feat(devin): add Devin provider and ACP capability parity - #10913

Draft
mzakyali wants to merge 32 commits into
pingdotgg:mainfrom
mzakyali:feat/devin-upstream-port
Draft

feat(devin): add Devin provider and ACP capability parity#10913
mzakyali wants to merge 32 commits into
pingdotgg:mainfrom
mzakyali:feat/devin-upstream-port

Conversation

@mzakyali

@mzakyali mzakyali commented Sep 9, 2026

Copy link
Copy Markdown

Summary

  • Port Devin provider support across server, web, mobile, contracts, usage, and documentation.
  • Add Devin skill discovery and native skill prompt dispatch.
  • Preserve and render normalized ACP resource activity across clients.
  • Keep elicitation and child-agent support explicitly unsupported until Devin emits stable usable protocol data.
  • Harden rollback, permission-resource sanitization, ACP scope cleanup, approval-option propagation, pricing isolation, usage compatibility, and context accounting.

Verification

  • Server focused tests: 29 approval/adapter tests passed.
  • Web focused tests: 84 session tests passed.
  • Mobile focused tests: 102 activity tests passed.
  • Server, web, and mobile typechecks pass.
  • Conflict-marker scan and git diff check are clean.

Known acceptance limitation

The authenticated Devin live MCP smoke test remains a strict failure: Devin made zero preview_status broker requests. This PR does not claim verified live MCP handoff, elicitation, or child-agent support. Deterministic ACP normalization and provider-neutral client behavior are covered; live Devin acceptance remains an external follow-up gate.

Please review as a draft while the Devin CLI/MCP handoff is investigated.

mzakyali and others added 30 commits September 7, 2026 15:30
Adds DevinSettings, ProviderDriverKind("devin"), ModelPricing schema,
UsageAccountConsumptionDay, and provider-runtime event fields needed by
the Devin ACP adapter. Exports defaultEnabledForDriver for focused
settings tests. Preserves all current upstream contract fields.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Ports DevinDriver.ts onto current upstream APIs (resolveMaintenance,
makeManualOnlyProviderMaintenanceCapabilities). Ports DevinProvider.ts,
DevinAdapter.ts, DevinTextGeneration.ts, and DevinAcpSupport.ts onto
the current makeManagedServerProvider and AcpSessionRuntime. Preserves
MCP injection, model-change restart via session/load, and canonical
Devin event logging.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Updates ProviderRegistry.ts with Devin-specific model retention
(authoritative on success, retain cache on warning/error), catalog-
version compatibility guard, and forkScoped startImmediately to avoid
subscription races. Re-exports haveProvidersChanged for focused tests.
Preserves all current upstream retention and snapshot-merging behavior.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Ports Devin event-log scanning, provider rate-table loading, and
optional ACU consumption lookup into UsageService. Merges Devin's
parseProviderModelRateTable and normalizeModelName with current upstream
override and LiteLLM behavior. Rewrites devinAccountUsage.ts and
parseProviderModelRateTable with dedicated Effect Schemas replacing
handwritten isRecord/isString guards. Devin account usage remains
separate from local token/cost estimates.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Ports DevinAdapter.test.ts (including model-change restart via
session/load, cancel-recover with Deferred-based turn.started sync),
DevinProvider.test.ts, DevinTextGeneration.test.ts, DevinAcpSupport.test.ts,
and DevinAcpCliProbe.test.ts. Replaces fixed Effect.sleep synchronization
with a Deferred keyed off turn.started, matching the GrokAdapter test
pattern.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Reapplies Devin-related hunks to current upstream web and mobile files:
provider option metadata in session-logic, Devin account usage display
in UsagePage and UsageRouteScreen, provider icon utilities, model
family grouping, context window meter, composer provider state, and
provider settings panel. Preserves current upstream composer, settings,
and mobile behavior. Replaces missing LoaderIcon with Spinner in
ProviderInstanceCard (upstream removed that lucide import).

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Adds Devin to README provider list, docs/internals/providers.md ACP
details, docs/user/providers-devin.md, and Devin CLI installation and
usage sections. Adds test:devin-smoke script and scripts/devin-mcp-smoke.ts
isolated smoke harness. Updates pnpm-lock.yaml and pnpm-workspace.yaml
for new dependencies.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Adds DevinSkills.ts with a pure parser and a bounded command runner.
The parser decodes the top-level JSON array, requires non-empty name
and base_dir, maps base_dir to SKILL.md through the Path service,
maps description/display_name, interprets user/model triggers, disables
error records, keeps warning-only records enabled, derives deterministic
project/personal/other scope, deduplicates case-insensitively, sorts
deterministically, and skips malformed records. The runner spawns the
configured binary with the provider environment and workspace cwd,
bounds output (4 MiB) and runtime (20s), and returns typed errors for
spawn, timeout, nonzero exit, output limit, and decode failures.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Adds DevinSkillDispatch.ts: a known `$name` mention becomes Devin's
native `@skills:name` while trailing arguments, surrounding text,
unknown tokens, and `$HOME` stay literal. Skills are never inferred
from paths. The Devin adapter discovers lazily — only when a prompt
carries a candidate `$skill` token — caches successful catalogs per
workspace cwd, never caches failures, and sends the original prompt
unchanged when discovery fails.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Adds snapshotForCwd to the Devin ProviderInstance following the
existing Claude, Grok, Codex, and OpenCode pattern. A disabled Devin
returns the normal snapshot without running discovery; a discovery
failure surfaces as a typed ProviderDriverError so the provider
registry preserves the last valid workspace snapshot.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant