Skip to content

feat(gui): Models catalog — one advanced disclosure, provider ⋯, v2 switch moves to Subagents - #3390

Merged
lidge-jun merged 3 commits into
devfrom
codex/260904-dm-030-models-catalog
Sep 3, 2026
Merged

feat(gui): Models catalog — one advanced disclosure, provider ⋯, v2 switch moves to Subagents#3390
lidge-jun merged 3 commits into
devfrom
codex/260904-dm-030-models-catalog

Conversation

@lidge-jun

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

Copy link
Copy Markdown
Owner

Summary

Phase 3 of the dashboard-minimal roadmap (devlog/_plan/260904_dashboard_minimal/030_models_catalog.md). The Models catalog opened with a four-line explanation, a wall of catalog-wide switches (new-model policy, aliases, shadow-call intercept, the v1/base/v2 surface switch, context cap plus its paragraph), an order-hint paragraph, and six controls repeated in every provider header — 135 interactive controls before a single model row.

  • The explanation and the order hint are focusable info tooltips (visible on focus, with an sr-only name); the combos/routing subtitles show only while their workspace is empty.
  • Catalog-wide policy sits behind one closed 고급 <details>; every control is still there, one click away.
  • Each provider header keeps edit + 모두 켜기/끄기 inline; aliases, custom model, presets and the context cap fold into a labelled <details> (inline reveal, DOM tab order — a disclosure, not a menu role).
  • The v1/base/v2 switch is a delegation setting, so it moves to the Subagents delegation section, which already owned the /api/v2 read and write (UltraModePatch gains an optional multiAgentMode). Models keeps its v2 state for the keep-native and thread controls.
  • The page-head Codex-restart orb was a third copy (sidebar orb + stale banner remain) and is gone.

Verification

Focused checks only (repository-wide local suite intentionally not run; hosted CI on this head is the broad gate):

cd gui && bun x tsc -b                                   # exit 0
bun run typecheck && bun run lint:gui                    # exit 0
cd gui && bun run lint:i18n                              # exit 0
cd gui && bun test --isolate tests                       # 1304 pass / 0 fail
cd gui && bun run build                                  # exit 0
bun run privacy:scan                                     # passed

New: models-advanced-disclosure.test.ts (details placement, switch relocated to Subagents with the /api/v2 patch, tooltips named, head has no restart, provider ⋯ contents, CSS markers). Updated: codex-stale-banner, models-keep-native-v1-placement.

Render-grounded (Vite dev build read-only against a running proxy, ko, 1440 px). #models: 고급 closed, 8 provider ⋯ disclosures closed, no head orb, no subtitle paragraph, no order-hint paragraph, no v1/base/v2 radiogroup; opening 고급 reveals 8 controls and opening a provider's ⋯ reveals 기본 별칭 사용 / 커스텀 모델 추가 / 기본 창 · 상한 / 사용자 지정 창. #subagents renders the 서브에이전트 radiogroup reading the live v1.

Models catalog after: stale banner, tab strip, a closed 고급 disclosure, collapse controls with an info button, and provider rows that show only edit, 모두 켜기, 모두 끄기 and a ⋯ button

Same page with 고급 and one provider ⋯ opened, showing the policy switches and the folded provider actions inline

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed (devlog unit; docs-site sync is roadmap phase 090).
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults (none touched).

Summary by CodeRabbit

  • New Features
    • Added a selectable multi-agent surface mode (v1, default, or v2) to the Subagents workspace, with saved settings and loading-state protection.
    • Added expandable advanced settings and provider actions on the Models page.
    • Added informational and accessibility tooltips for catalog behavior and model ordering.
  • Improvements
    • Reorganized Models page controls for a cleaner, more compact layout.
    • Removed the page-head restart action.
    • Added translated labels and guidance across supported languages.

@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner September 3, 2026 18:15
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 3, 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 Completed 2026-09-03T18:20:55.758048Z d58222b 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 commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

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

coderabbitai Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Team

Run ID: a60b4358-420d-4b26-b8b7-11de682ce1dd

📥 Commits

Reviewing files that changed from the base of the PR and between d060f53 and 5404ae0.

⛔ Files ignored due to path filters (2)
  • devlog/_plan/260904_dashboard_minimal/assets/031_models_after.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/031_models_disclosures_open.png is excluded by !**/*.png
📒 Files selected for processing (17)
  • gui/src/components/subagents-workspace/SubagentDelegationSection.tsx
  • gui/src/i18n/de.ts
  • gui/src/i18n/en.ts
  • gui/src/i18n/fr.ts
  • gui/src/i18n/ja.ts
  • gui/src/i18n/ko.ts
  • gui/src/i18n/ru.ts
  • gui/src/i18n/tr.ts
  • gui/src/i18n/zh-TW.ts
  • gui/src/i18n/zh.ts
  • gui/src/pages/Models.tsx
  • gui/src/pages/use-subagent-delegation.ts
  • gui/src/styles.css
  • gui/tests/codex-stale-banner.test.ts
  • gui/tests/models-advanced-disclosure.test.ts
  • gui/tests/models-keep-native-v1-placement.test.ts
  • gui/tests/subagents-ultra-mode.test.tsx

📝 Walkthrough

Walkthrough

The Models page moves multi-agent mode selection to Subagent delegation. It groups catalog controls into native disclosures, replaces restart and inline hints with tooltips, updates related tests, and adds localized accessibility strings.

Changes

Models controls

Layer / File(s) Summary
Delegation mode ownership
gui/src/pages/use-subagent-delegation.ts:32-34, gui/src/components/subagents-workspace/SubagentDelegationSection.tsx:10-12,68-107, gui/src/pages/Models.tsx:258-263, gui/tests/models-keep-native-v1-placement.test.ts:71-82, gui/tests/subagents-ultra-mode.test.tsx:176-222
UltraModePatch accepts multiAgentMode. Subagent delegation renders and saves the v1/default/v2 selector. The Models page no longer owns the mode setter. Tests verify the PUT and server-state reload.
Catalog disclosures and accessibility
gui/src/pages/Models.tsx:685-689,1249-1422,1728-1736,2128-2136,2169-2177,2190, gui/src/styles.css:1198-1211, gui/tests/models-advanced-disclosure.test.ts:1-75, gui/tests/codex-stale-banner.test.ts:122-132
Advanced catalog settings and provider actions now use native <details> disclosures. Subtitle and order hints use tooltips. The page-head restart action is removed, while stale-banner restart coverage remains.
Catalog localization
gui/src/i18n/en.ts:513-516, gui/src/i18n/de.ts:488-491, gui/src/i18n/fr.ts:498-501, gui/src/i18n/ja.ts:496-499, gui/src/i18n/ko.ts:499-502, gui/src/i18n/ru.ts:501-504, gui/src/i18n/tr.ts:504-507, gui/src/i18n/zh-TW.ts:379-382, gui/src/i18n/zh.ts:496-499
All listed locale catalogs add translations for advanced controls, provider actions, catalog behavior, and picker ordering accessibility labels.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Suggested reviewers: wibias, dbc-hbin

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant SubagentDelegationSection
  participant onUltraModeSave
  participant V2API
  User->>SubagentDelegationSection: Select v1, default, or v2
  SubagentDelegationSection->>onUltraModeSave: Submit multiAgentMode patch
  onUltraModeSave->>V2API: PUT /api/v2
  V2API-->>onUltraModeSave: Persist selected mode
  onUltraModeSave->>V2API: Re-read multiAgentMode
  V2API-->>SubagentDelegationSection: Return server state
Loading
✨ 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/260904-dm-030-models-catalog

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.

jun added 3 commits September 4, 2026 03:17
…ch moves to Subagents

The catalog opened with a four-line explanation, a wall of catalog-wide switches (new-model
policy, aliases, shadow-call, the v1/base/v2 surface switch, context cap + its paragraph),
an order-hint paragraph, and six controls repeated in every provider header. Now:

- The explanation and the order hint are focusable info tooltips (visible on focus, named
  for assistive tech); combos/routing subtitles show only while their workspace is empty.
- Catalog-wide policy sits behind one closed "고급" details.
- Each provider header keeps edit + 모두 켜기/끄기 inline; aliases, custom model, presets
  and the context cap fold into a labelled ⋯ details (inline reveal, DOM tab order — a
  disclosure, not a menu).
- The v1/base/v2 switch is a delegation setting; it moves to the Subagents delegation
  section, which already owned the /api/v2 read and write (UltraModePatch gains
  multiAgentMode). Models keeps its v2 state for keep-native and thread controls.
- The page-head Codex-restart orb (third copy; sidebar orb + banner remain) is gone.

Plan: devlog/_plan/260904_dashboard_minimal/030_models_catalog.md.
@lidge-jun
lidge-jun force-pushed the codex/260904-dm-030-models-catalog branch from d58222b to 5404ae0 Compare September 3, 2026 18:17
@lidge-jun

Copy link
Copy Markdown
Owner Author

리뷰 · 우선순위 72 / 80

이 PR은 대시보드 미니멀 로드맵의 3단계입니다. 계획 문서는 devlog/_plan/260904_dashboard_minimal/030_models_catalog.md이고, 앞 단계인 사이드바 푸터(#3382)와 대시보드 홈(#3387)은 이미 지금 dev HEAD(d060f53ab)에 있습니다. 로드맵 문서 묶음(#3381)도 머지되어 같은 폴더에 있습니다. 지금 Models 카탈로그 탭은 네 줄 설명, 새 모델 정책·별칭·쉐도우·v1/base/v2·기본 창/상한 스위치 벽, 피커 순서 문단, 그리고 프로바이더 헤더마다 반복되는 여섯 개 조작이 한꺼번에 열려 있습니다. PR 본문이 말한 대로 모델 한 줄도 보기 전에 조작이 135개까지 쌓입니다. 같은 /api/v2 값을 Models와 (예전에) 대시보드가 같이 고치던 문제도 #3387이 대시보드 쪽을 지운 뒤, 이번 단계에서 Models의 모드 스위치까지 Subagents로 옮기라는 게 로드맵 합의였습니다.

변경 뒤에는 카탈로그용 긴 설명과 피커 순서 안내가 포커스 가능한 ⓘ Tooltip으로 줄고, 카탈로그 전역 정책은 닫힌 details.models-advanced(고급) 안에 들어갑니다. 프로바이더 헤더는 연필·모두 켜기/끄기만 밖에 두고, 별칭·커스텀 모델·프리셋·창 상한은 라벨 있는 disclosure(models-group-more)로 접습니다. 메뉴 role이 아니라 인라인 disclosure라는 a11y 규칙도 계획·테스트에 같이 잠겨 있습니다. v1/base/v2 radiogroup은 gui/src/components/subagents-workspace/SubagentDelegationSection.tsx 맨 위로 옮겨지고, UltraModePatch에 optional multiAgentMode가 추가되어 이미 Subagents가 쓰던 PUT /api/v2 경로로 저장합니다. Models는 keep-native·스레드 설정을 위해 /api/v2 읽기/쓰기를 그대로 둡니다. 페이지 머리의 Codex 재시작 orb(세 번째 복사본)는 빠지고, 사이드바 orb와 CodexStaleBanner만 남습니다.

테스트도 이 축을 맞춥니다. 새 gui/tests/models-advanced-disclosure.test.ts가 고급 details 위치, 모드 스위치 이전, Tooltip 접근 이름, 헤드 orb 제거, 프로바이더 ⋯ 내용, CSS 마커를 소스 단위로 잠급니다. codex-stale-bannermodels-keep-native-v1-placement도 헤드 orb/setMultiAgentMode 제거에 맞춰 고쳤습니다. 본문에 GUI 1304 pass, typecheck, lint:gui, lint:i18n, build, privacy:scan이 적혀 있고, gates·hygiene 등은 이미 초록입니다. types.ts/config.ts 분할과는 무관합니다. #3387 직후 의존 순서(020 → 030)를 지키는 단위라 지금 dev 방향과도 맞습니다. 모바일 탭 간격 PR(#3386)은 styles.css/styles-models-workspace.css를 건드려서, 머지 전에 CSS 충돌만 한 번 보면 됩니다.

gui/src/pages/Models.tsx 페이지 헤드 - 계획 030은 카탈로그 설명을 탭 스트립 오른쪽 ⓘ로 두라고 했습니다. 이 PR은 h2 옆 page-head에 두었고, Tooltip 내용은 항상 models.subtitle(카탈로그 문구)입니다. Combos/Routing 탭을 보고 있을 때도 같은 카탈로그 설명이 열립니다.

gui/src/pages/Models.tsx controlsBlock / details.models-advanced - 모드 스위치는 Subagents로 나갔지만, v2일 때만 보이는 keep-native·스레드 조작은 여전히 controlsBlock 안에 있어 닫힌 “고급” 뒤에 묻힙니다. Subagents에서 v2로 바꾼 뒤 Models로 오면, 그 설정을 찾으려면 고급을 열어야 합니다.

gui/src/pages/Models.tsx - const [, setV2Loading] = useState(true)로 로딩 플래그 값을 버렸습니다. 예전에는 (v2Loading || v2)로 모드 줄을 그렸는데, 지금은 keep-native/스레드가 v2가 온 뒤에만 고급 안에서 나타납니다. 큰 회귀는 아니나 죽은 state 패턴입니다.

gui/src/pages/Models.tsx + gui/src/pages/Subagents.tsx - 같은 /api/v2를 두 페이지가 각자 읽습니다. 계획상 의도(Models는 keep-native·스레드, Subagents는 모드)이지만, 한쪽에서 저장한 뒤 다른 탭을 이미 열어 둔 채면 화면 값이 잠깐 어긋날 수 있습니다.

gui/src/components/subagents-workspace/SubagentDelegationSection.tsx - 모드 도움말이 모달 대신 Tooltip으로 바뀌었고 Tooltip이 button 래퍼라 포커스는 됩니다. 다만 보이는 제목 models.v2Label 옆에 sr-only로 같은 라벨을 또 넣었습니다. 중복 이름이라 큰 문제는 아니지만, 카탈로그 쪽처럼 models.v2Help용 짧은 aria 이름을 쓰는 편이 더 분명합니다.

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

  • keep-native·스레드를 고급 안에 둘지, v2일 때는 고급 밖(또는 Subagents 근처)으로 뺄지
  • 카탈로그 ⓘ를 page-head에 둘지, 계획대로 탭 스트립 오른쪽으로 옮길지 (탭마다 문구를 바꿀지도)
  • fix(models): normalize mobile tab spacing and stabilize Combos layout #3386(모바일 탭/Combos 레이아웃)과 styles.css 충돌을 이 PR에서 먼저 맞출지, 머지 후 정리할지

너의 추천
CI 나머지(test shards·macos 등)가 초록이면 merge해도 됩니다. #3387 다음 로드맵 단위이고, 카탈로그 소음과 /api/v2 편집기 중복을 줄입니다. 머지 전에 keep-native가 고급 안에 묻히는 UX만 한 번 확인하거나, follow-up으로 v2일 때 그 줄만 밖으로 빼는 작은 패치를 남기면 충분합니다.

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

@lidge-jun
lidge-jun merged commit cfa0383 into dev Sep 3, 2026
23 of 26 checks passed
@lidge-jun
lidge-jun deleted the codex/260904-dm-030-models-catalog branch September 3, 2026 18:20

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d58222bd48

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread gui/src/pages/Models.tsx
Comment on lines +2174 to +2177
<Tooltip content={t("models.subtitle")} side="bottom" maxWidth={420}>
<IconInfo width={14} height={14} aria-hidden="true" />
<span className="sr-only">{t("models.subtitleAria")}</span>
</Tooltip>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restrict catalog help to the catalog tab

When the user selects Combos, Routing, or Compatibility, this tooltip remains visible because it is rendered unconditionally in the shared page header, but both its accessible name and content describe only the model catalog. This is especially misleading for nonempty Combos and Routing workspaces, where line 2190 also removes the tab-specific subtitle, leaving the catalog explanation as the only visible help affordance. Render this tooltip only when tab === "catalog", or change it to use help content for the active tab.

Useful? React with 👍 / 👎.

luvs01 pushed a commit to luvs01/opencodex that referenced this pull request Sep 4, 2026
…psed

The 260904 dashboard-minimal roadmap traded working controls for visual quiet, and the result cost real function. Reverts lidge-jun#3382 (sidebar footer), lidge-jun#3387 (dashboard home), lidge-jun#3390 (models catalog), lidge-jun#3395 (usage) and lidge-jun#3399 (the i18n prune that removed those surfaces keys).

What comes back: the labelled sidebar footer rows instead of two rows of unlabelled 28px orbs; the v1/base/v2 subagent surface switch inline on Models, which is a primary control and not an advanced disclosure; the ultra-mode effort controls; the sidecar and memory cards without their closed disclosure; and the Usage active-days card with its heatmap inline rather than behind a 일별 활동 details.

The v1/base/v2 switch is kept in BOTH homes: the revert restores Models, and UltraModeState/UltraModePatch keep multiAgentMode so the Subagents copy added by lidge-jun#3390 still reads and writes /api/v2. Three imports the revert left dangling (Tooltip, IconInfo, TKey) are restored alongside it.

dashboard-tabs.test.ts anchored its .page-tabs CSS lookup on a bare substring, which now matches an earlier descendant rule added after it was written; it reads the base rule at line start instead.
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