Skip to content

feat(devin): give both Devin providers a mark and make the CLI one addable - #4322

Merged
lidge-jun merged 1 commit into
devfrom
codex/devin-provider-mark
Sep 12, 2026
Merged

feat(devin): give both Devin providers a mark and make the CLI one addable#4322
lidge-jun merged 1 commit into
devfrom
codex/devin-provider-mark

Conversation

@lidge-jun

@lidge-jun lidge-jun commented Sep 12, 2026

Copy link
Copy Markdown
Owner

Summary

Neither Devin provider had an icon alias, so the dashboard drew a coloured initial tile for both, and the title-cased fallback rendered the local one as "Devin Cli". devin-cli also could not be added from the dashboard at all.

Devin mark on the provider rows, light and dark

devin.svg is fetched from https://docs.devin.ai/logo/light.svg and cropped to its symbol. The source is a 160x24 horizontal lockup; the three-leaf mark occupies the left 24 units and the devin wordmark starts at x=34.2, so a viewBox="0 0 24 24" window keeps the whole symbol and excludes every wordmark path. The thirteen symbol paths and all seven gradients are verbatim and nothing is translated, so the userSpaceOnUse gradient coordinates stay valid. Cropping a lockup to its symbol is what cursor-color.svg and gajae-code.svg already do; the alternative was a wordmark in a 20px box, which the provider-icons README refuses.

devin.ai/favicon.svg sits behind a Vercel security checkpoint that answers 429 with an HTML page, and cognition.ai publishes only a raster favicon, so the docs site is the reachable first-party vector. Windsurf does publish windsurf.com/favicon.svg, a plated W, but that names the retired brand for a provider labelled Cognition. Both ids share the one mark, the meta-model/meta-muse shape: they are two transports into the same product. The mark carries a gradient, so it is drawn as an image and is not a candidate for the masked set.

The second half is discoverability. derive.ts builds the add-provider list from featured || authKind === "key" || dashboardPreset, and devin-cli is none of the first two, so the only way to add it was to hand-edit config.json — which is how it came to be missing from a picker that already carried the cloud devin row. It is a dashboard preset now. It stays out of the featured strip because it needs an installed CLI and a completed devin auth login before it can answer anything, unlike Ollama or LM Studio.

devin itself is unchanged: devlog/_plan/260911_devin_two_providers/001_plan.md pins it out of the preset and featured lists as the experimental unofficial bridge.

Verification

Assertions checked directly against the built modules (icon src, display names, registry flags, and that the committed SVG carries the symbol paths and no wordmark path) — all pass. The mark was rendered at 96px and 200px to confirm the crop frames the symbol without clipping.

tests/providers/devin-cli-adapter.test.ts carries the regression: both ids resolve to /provider-icons/devin.svg, both display names are readable, and dashboardPreset is pinned true with the reason.

Repository-wide bun run test and bun run typecheck: NOT RUN locally, per the operator constraint for this session. CI covers them on this head.

The screenshot above lives on codex/assets-devin-mark-preview, a branch that exists only to host PR evidence and is never merged.

Checklist

  • Behavior change has a focused regression test
  • Targets dev
  • Screenshot of the UI change included
  • Icon provenance recorded in gui/public/provider-icons/README.md
  • Local full suite / typecheck (deferred to CI by operator instruction)

Summary by CodeRabbit

  • New Features
    • Added Devin branding support for Devin and Devin CLI providers, including a shared icon and user-friendly display names.
    • Devin CLI is now available as a dashboard provider preset.
  • Documentation
    • Documented the Devin icon source and design details, along with related branding source decisions.
  • Tests
    • Added coverage confirming provider registration, icons, and display names.

…dable

The dashboard drew a coloured initial tile for `devin` and `devin-cli` because
neither id had an icon alias, and the title-cased fallback rendered the local
one as "Devin Cli".

Add `devin.svg`, cropped from Devin's own documentation logo to its symbol, and
alias both ids to it. Provenance and the reason Windsurf's plated W was not used
are recorded in the provider-icons README.

`devin-cli` also could not be added from the dashboard. The add-provider list is
built from `featured || authKind === "key" || dashboardPreset`, and this provider
is none of the first two, so the only way in was hand-editing config.json — which
is how it ended up missing from a picker that already had the cloud row. It is a
dashboard preset now; it stays out of the featured strip because it needs an
installed CLI and a completed `devin auth login` first.
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner September 12, 2026 01:37
@github-actions

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 12, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ⚠️ Failed 2026-09-12T01:38:26.423587Z 66cd05a PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot added the enhancement New feature or request label Sep 12, 2026
@coderabbitai

coderabbitai Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 8a69749d-b35e-4060-ad92-c68877fa83a9

📥 Commits

Reviewing files that changed from the base of the PR and between 8f1471b and 66cd05a.

⛔ Files ignored due to path filters (1)
  • gui/public/provider-icons/devin.svg is excluded by !**/*.svg
📒 Files selected for processing (4)
  • gui/public/provider-icons/README.md
  • gui/src/provider-icons.ts
  • src/providers/registry.ts
  • tests/providers/devin-cli-adapter.test.ts

Included review availability: Your plan provides up to 10 included reviews per hour; 7 remain after this review.


📝 Walkthrough

Walkthrough

The change adds Devin branding for devin and devin-cli, enables devin-cli as a dashboard preset, and verifies registration, icon resolution, and display names.

Changes

Devin provider integration

Layer / File(s) Summary
Provider branding and display mapping
gui/src/provider-icons.ts, gui/public/provider-icons/README.md
Maps devin and devin-cli to devin.svg, adds display names, and documents the asset source and format.
Dashboard registration and validation
src/providers/registry.ts, tests/providers/devin-cli-adapter.test.ts
Enables devin-cli as a dashboard preset. Tests verify registration, icon resolution, and display names.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Feature

Merge Risk: ⚪ Minimal · up to 66cd0

The provider branding and dashboard registration changes have no identified merge-blocking risk.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the two main changes: adding a shared mark for both Devin providers and making the CLI provider addable in the dashboard.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 3…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/devin-provider-mark

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@lidge-jun

Copy link
Copy Markdown
Owner Author

리뷰 · 우선순위 46 / 80

이 PR은 지금 dev 끝(8f1471bca, #4318 Cognition blocklist 핫픽스 직후)에 올라온 Devin 두 프로바이더의 대시보드 얼굴 정리입니다. 지금 HEAD에는 devin(클라우드, Windsurf 로그인 경유)과 devin-cli(로컬 ACP)가 레지스트리에 둘 다 있지만, gui/src/provider-icons.ts에 아이콘 별칭이 없어서 대시보드가 둘 다 색 이니셜 타일로 그렸고, 표시 이름 폴백이 하이픈을 공백으로 바꿔 devin-cli를 "Devin Cli"처럼 보이게 만들었습니다. 이 변경은 gui/public/provider-icons/devin.svg를 새로 넣고 두 id를 같은 마크로 묶으며, devin-clidashboardPreset: true로 바꿔 추가 목록에 올라오게 합니다.

아이콘 쪽은 기존 규칙과 맞습니다. README에 적힌 대로 소스는 docs.devin.ai/logo/light.svg 160×24 가로 로고락업이고, 왼쪽 24단위 심볼만 viewBox="0 0 24 24"로 잘라 워드마크 경로를 빼 둡니다. cursor-color.svg·gajae-code.svg와 같은 "락업에서 심볼만 크롭" 방식이고, 그라데이션이 있어 masked 세트가 아니라 image로 그리는 판단도 providerIconMode 흐름과 맞습니다. Windsurf의 plated W favicon을 쓰지 않은 이유도 README에 남아 있어, 라벨이 Cognition인 행 옆에 폐기 브랜드를 붙이지 않으려는 의도가 분명합니다.

이름표도 맞춥니다. PROVIDER_DISPLAY_NAMESdevin → "Cognition (Devin/Windsurf)", devin-cli → "Devin CLI"를 넣었고, 클라우드 쪽 문자열은 레지스트리 label과 동일합니다. meta-model/meta-muse가 한 마크를 공유하는 패턴을 그대로 따릅니다.

더 중요한 절반은 발견성입니다. src/providers/derive.tsderiveProviderPresets()featured || authKind === "key" || dashboardPreset만 추가 목록에 넣습니다. devin-cliauthKind: "local", featured: false라서 예전엔 dashboardPreset: false 때문에 대시보드에서 추가할 수 없고 config.json을 직접 고치는 수밖에 없었습니다. 클라우드 devin 행은 이미 붙어 있는데 CLI만 빠진 상태가 그래서 생겼습니다. 이번 PR은 CLI만 preset으로 올리고 featured 스트립에는 넣지 않습니다. CLI 설치와 devin auth login이 끝나야 응답할 수 있어서 Ollama/LM Studio와 다르게 featured에 올리면 안 된다는 설명도 타당합니다. 클라우드 devindevlog/_plan/260911_devin_two_providers/001_plan.md가 말한 대로 dashboardPreset: false·featured 밖을 유지합니다.

테스트는 tests/providers/devin-cli-adapter.test.ts에 아이콘 경로·표시 이름·dashboardPreset: true 회귀를 넣었고, gui/src/provider-icons를 테스트에서 import하는 방식은 orcarouter-provider.test.ts 등과 같은 기존 패턴입니다. 동작 범위가 아이콘·라벨·preset 플래그라 #4318 핫픽스나 키풀 트레인과 겹치지 않아 지금 dev에 얹기 좋은 작은 UX 조각입니다.

라인 1334 (src/providers/registry.ts, devin-cli) - dashboardPreset만 true로 바뀌고 레지스트리 label은 여전히 "Devin CLI (local)"입니다. 추가 모달/프리셋 목록은 derive.tsentry.label을 쓰고, 이미 추가된 행은 formatProviderDisplayName → "Devin CLI"를 씁니다. 같은 프로바이더가 화면 위치에 따라 이름이 한 칸 달라질 수 있습니다.

gui/src/provider-icons.ts (PROVIDER_DISPLAY_NAMES["devin-cli"]) - 위와 이어지는 지점입니다. 대시보드 행 표기는 "Devin CLI"로 고쳤지만 레지스트리 label과 동기화하지 않았습니다. 의도적으로 "(local)"을 추가 목록에만 남긴 것인지, 아니면 label도 "Devin CLI"로 맞출 것인지가 빠져 있습니다.

gui/public/provider-icons/devin.svg - 경로에 흰 fill + hard-light 블렌드 레이어가 그대로 들어 있습니다. 브랜드 원본을 유지한 크롭이라 타당하지만, 밝은 테마 20px 타일에서 흰 밑칠이 얼마나 보이는지는 CI가 아니라 스크린샷/눈으로만 확인된 상태입니다. PR 본문 프리뷰가 있으니 블로커는 아닙니다.

devin 레지스트리 행 (dashboardPreset: false 유지) - 계획 문서와 일치합니다. 아이콘·이름만 고치고 클라우드 추가는 여전히 막혀 있습니다. 실험적 비공식 브리지라는 기존 입장과 맞습니다.

메인테이너의 판단이 필요한 지점

  • devin-cli 레지스트리 label을 "Devin CLI"로 맞춰 추가 목록과 행 표기를 통일할지, "(local)"을 프리셋에만 남길지
  • 클라우드 devin을 계속 대시보드 추가 목록 밖에 둘지(계획상 yes). 아이콘이 생기면 "추가도 열어 달라"는 요청이 올 수 있음
  • 밝은 테마에서 마크 가독성이 마음에 안 들면 마스킹/플레이트 후보로 다시 그릴지, 아니면 image 그라데이션 마크를 그대로 갈지

너의 추천
CI(타입체크·해당 테스트)만 초록이면 그대로 dev에 머지해도 됩니다. 이름 통일을 원하면 머지 전에 registry.tsdevin-cli label만 "Devin CLI"로 한 줄 맞추거나, 반대로 display name에 "(local)"을 되살리면 됩니다. 클라우드 devindashboardPreset: false는 계획대로 유지하는 편이 맞습니다. types/config 스플릿과 무관한 독립 UX라 close-don't-rebase 대상이 아닙니다.

이 댓글은 grok-bot이 작성했습니다

@lidge-jun
lidge-jun merged commit c7e4d5c into dev Sep 12, 2026
31 checks passed
@lidge-jun
lidge-jun deleted the codex/devin-provider-mark branch September 12, 2026 01:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant