Repository navigation
Conversation
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 20 minutes. View limit details
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. Comment |
This was referenced Oct 11, 2026
# Conflicts: # apps/desktop-tauri/src/components/providers/providerIcons.ts # apps/desktop-tauri/src/test/providerCatalog.ts # docs/PROVIDERS.md # rust/src/core/provider.rs # rust/src/core/provider_factory.rs # rust/src/core/token_accounts.rs # rust/src/settings/api_keys.rs
# Conflicts: # apps/desktop-tauri/src/components/providers/providerIcons.ts # apps/desktop-tauri/src/test/providerCatalog.ts # docs/PROVIDERS.md # rust/src/core/provider.rs # rust/src/core/provider_factory.rs # rust/src/settings/api_keys.rs
- A missing key (shared resolve_api_key NotInstalled) now maps to upstream IBMBobUsageFetcher's "Missing IBM Bob API key. Add one in Settings or set BOBSHELL_API_KEY." instead of the generic "API key not found" text; before, only a blank key reached it. Other resolver errors still propagate. - New pure helper api_key_from; hermetic test a_missing_key_uses_the_ibm_bob_message.
- HTTP 401/403 ("ClawRouter rejected the API key...") now maps to
NeedsAuthentication via error_state_kind, matching upstream's
authenticationExpired; the message text is unchanged and other
errors keep the default mapping.
- HTTP tests no longer read CLAWROUTER_BASE_URL: the env fallback is an
injected lookup that the test constructor disables.
- Port upstream's budgeted golden fixture (0.024% used, $25 limit,
openai before anthropic, reset 2026-08-01Z) as a literal test.
- Stop attaching the weekly USD CostSnapshot to the fetch result. Upstream SyntheticProviderDescriptor hides the cost block on the card (ProviderCostPresentation(menuCardStyle: .hidden)), and core has no per-provider "hidden on card" flag. The parsed credits still drive the weekly regen line. As a result the weekly cost also leaves CLI JSON. QuotaCost.resets_at was only used for that snapshot and is removed. - Port upstream's "Synthetic fixture matches the cut-over golden" (ProviderPluginParityTests.swift) and "missing rolling lane keeps weekly and search slots" (SyntheticProviderTests.swift) as literal tests. Weekly used percent is 1.9411527777777593, not upstream's 1.9411527777777735: serde_json without float_roundtrip reads 98.05884722222223 one ULP high (1.4e-14, never visible). - Use the fixed NOW in the bearer-request test instead of Utc::now(). - docs/PROVIDERS.md: the weekly credits no longer give a USD cost.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #810; merge in order 808 → 810 → 818 → 819 → 821 → 814 → 817; the diff shows predecessors until they merge.
What users get
A new IBM Bob provider for monthly Bobcoin usage.
Setup. Add an API key from the IBM Bob web portal in either of these places:
Alternatively, set
BOBSHELL_API_KEY. The CLI also acceptsibmbob,ibm-bob,ibm bob,bobandbobshell.The card shows:
refresh_at. When any team has no budget, the lane shows Bobcoins used instead of a percentage.Port and requests. Ported from upstream CodexBar v0.73.0
IBMBobUsageFetcher.swift,IBMBobSettingsReader.swiftandIBMBobProviderDescriptor.swift. Each refresh:GET https://api.us-east.bob.ibm.com/admin/v1/profile.GET /admin/v1/teams/{team}/users/{user}on the instance's regional host.Security.
bob.ibm.comor under.bob.ibm.com. Any otherregion_domainstops the refresh before a team request.Bearer, any other key asApikey.Files
rust/src/providers/ibmbob/{mod.rs,model.rs,tests.rs,fixtures/profile.json}: fetch, regional-host validation, parse and card mappingcore/provider.rs:ProviderId::IBMBob(cliibmbob, aliasesibm-bob,ibm bob,bob,bobshell; colour #0E61FA)core/provider_factory.rs: factory armproviders/mod.rssettings/api_keys.rs: catalog entry and help textcore/token_accounts.rs: token-account support that injectsBOBSHELL_API_KEY, plus a testProviderIcon-ibmbob.svg,providerIcons.ts,test/providerCatalog.tsdocs/PROVIDERS.md(new IBM Bob section),README.md(provider table row)No i18n or dependency changes.
Tests
19 tests in
ibmbob/tests.rs(13 unit, 6 local-server), plus 1 intoken_accounts.rs. They use fixed fixtures and assert literal values.refresh_ataccepts seconds and ISO strings.Bearer, and API keys useApikey.bob.ibm.com.BOBSHELL_API_KEY.Commands
cargo fmt --all -- --checkcargo test --manifest-path rust/Cargo.tomlibm bobdisplay-name alias; the first run failed onlytest_provider_id_from_display_name_aliasescargo clippy --manifest-path rust/Cargo.toml --all-targets -- -D warningscargo test --manifest-path apps/desktop-tauri/src-tauri/Cargo.tomlcargo clippy --manifest-path apps/desktop-tauri/src-tauri/Cargo.toml --all-targets -- -D warningspnpm testpnpm run lintpnpm run buildThe branch is based on 44d5de3, and the checks ran on that base. It predates #813 (the Mac card anatomy), so the panel proof and the card-layout gaps below describe the card before #813. Main's later Providers-pane changes (the usage-details section and #816's Settings panes) don't touch the cookie-source or API-key sections, and
cookie_source_options_forand the API-key catalog are unchanged on main.Proof (Windows, synthetic data only)
build-proof.sh). The proof-shim patch is never committed.win_run.pywith the IBMBob scenario pack. It uses a synthetic API key and a mockedapi.us-east.bob.ibm.com(the profile and two team budgets, all 200).W:/mac-parity/report/provider-ibmbob/panel.pngW:/mac-parity/report/provider-ibmbob/mac-card.pngW:/mac-parity/report/provider-ibmbob/COMPARISON.mdwin_run.py --mode settings:providers --target settingson this commit (5ce549d) with a copy of the pack that lists this provider first (W:/mac-parity/report/provider-ibmbob/settings-pack/). The pane shows the "API Key" section with the synthetic key masked as "sk-p...", Update and Remove, and the hint "Create an API key in the IBM Bob web portal and save it here, or set BOBSHELL_API_KEY."W:/mac-parity/report/provider-ibmbob/settings-proof/settings-after.pngand.jsonGaps vs the Mac card
Sibling PR conflicts
This is one of seven provider PRs: Synthetic (#808), ClawRouter (#810), IBM Bob (#818), Langdock (#819), LithosAI (#821), MuseAI (#814) and WorkBuddy (#817). They all add lines at the same anchors, so expect trivial textual conflicts once one of them merges. Keep both sides. The shared anchors are:
ProviderIdlists incore/provider.rs(after Vercel), including theall().len()count in its testproviders/mod.rsapi_keys.rsandtoken_accounts.rsproviderCatalog.tsand theproviderIcons.tsregistrydocs/PROVIDERS.mdsection and README table rows