feat(providers): add canonical free provider directory#405
feat(providers): add canonical free provider directory#405HaydernCenterpoint wants to merge 1 commit into
Conversation
This comment was marked as outdated.
This comment was marked as outdated.
|
Reviewed — two blocking findings:
Also missing: directory invariants test, reference-row exclusion test, GUI free-classification test, custom-name collision test, and docs sync for the user-facing change. Happy to re-review after the enrichment exclusion + UI gating are in. |
|
@lidge-jun got it boss, will fix it when i wake up! |
🔒 Under maintainer review — detailed feedback incoming@lidge-jun (maintainer) has this PR in an active review pass. Please do not merge or close This PR is not part of the current integration batch. It is held back deliberately — Heads-up on rebasing: No action needed from you until then. Thanks for the contribution and for your patience. Review tracker: |
|
Thank you for assembling the canonical free-provider directory. This PR should not merge independently in its current form. At Please either add the actionable-state contract and tests in the same narrowly scoped PR, or keep directory-only rows out of dashboard presets. A regression should prove a #434 already contains #405's four changed file blobs unchanged, so maintaining both also creates duplicate/superseded review work. Please close this PR in favor of the appropriately split directory slice from #434, rebased on current Please also rebase the directory slice onto current Reviewed as part of a maintainer integration pass. |
Adds the catalog of free/credit-based provider endpoints as a standalone module with no runtime consumer. Deliberately does NOT take the PR's registry and derive hunks. The PR merges directory rows into PROVIDER_REGISTRY behind a `directoryOnly` marker, but that marker is descriptive only. `routedProviderConfig()` looks up by id with no such guard, so a user's own provider named `qoder`, `vertex`, or `baidu` would be canonicalized onto the directory row's adapter and baseUrl. For `qoder` that baseUrl is the empty string, so the request loses its destination outright. Review found several other unguarded consumers — CLI provider list/create, GUI presets, catalog enrichment, subagent prefix classification — and the GUI DTO carries no actionable/reference distinction, so reference rows reach a provider-creation surface that implies they are connectable. Landing the catalog without those hunks keeps the data available for a later UI slice while leaving routing untouched. That slice needs its own read-only DTO and a server-side actionable check; teaching every registry consumer about a flag is the fragile direction. Two data corrections on the way in: - `lastVerified` is now optional and only present on rows whose endpoint was actually checked. The module previously stamped one shared date on all 81 rows including the 22 marked `unverified` — a provenance claim nobody made. `bytez` keeps its live endpoint but drops the date, since its recurring-credit terms could not be confirmed. - Both iFlytek rows cited the WebSocket protocol page as documentation for an OpenAI-compatible HTTP endpoint. Pointed at the HTTP guide instead. Tests lock the isolation rather than the catalog contents: reference ids stay out of PROVIDER_REGISTRY, a custom `qoder` provider keeps its own destination through routeModel, and unverified rows carry no verification date. Verified red by reproducing the PR's append design. Co-authored-by: Haydern <oriskinhaydern@gmail.com>
|
Integrated the catalog into The marker doesn't isolate anything. Review also found the flag is honored in only two of the projections that need it. Unguarded: runtime routing and known-model merging, CLI provider list and create, So the catalog landed as a standalone module with no runtime consumer. The data is preserved and available; nothing routes through it. When someone builds the UI slice, it should read through its own DTO with a server-side Two data corrections on the way in. The module stamped a single Both iFlytek rows cited Worth noting the rest of the catalog held up well under spot checks: Baidu Qianfan, Cloudflare Workers AI, OVHcloud, and Nebius all matched their official documentation, and live unauthenticated probes to Bytez, AgentRouter, and LongCat returned provider auth errors rather than dead hosts. One caveat for later — Pollinations' keyless contract wasn't fully verified, so Tests lock the isolation rather than the catalog contents: reference ids stay out of Thank you for assembling this — 81 endpoints with access-group classification is real research, and it's now in the tree where a UI can pick it up safely. Integrated as part of a maintainer PABCD pass. Plan unit: |
통합(dev push 완료): #437 803807a, #460 74ddd96, #431 82a47db, #405 be16c1d, #468 후속 테스트 bcaf029. close: 통합 4건 + 통합 없이 1건(#459, 설계 충돌). #457은 OPEN 유지. 이슈 close 0건 — dev에서 고쳐졌는데 안 닫힌 이슈가 없었다. 무효화: WP4(#466)와 WP6(#467)은 동료가 직접 머지했고, 우리 분석이 지적한 결함을 동료 커밋이 같은 방향으로 해소했다. 보안 보류 5건에 신규 발견 게시: #429 재분류, #355 OAuth 토큰 목적지, #424 유료 브리지 기본 ON, #408 설치 락 해제, #403 4분할 요청. A-gate는 사이클마다 3~5라운드를 돌았다. 반복된 원인은 계획서에 테스트나 코드를 적으면서 실물 소스를 확인하지 않은 것이었다.
Summary
Tests
Summary by CodeRabbit
New Features
Bug Fixes