Skip to content

Prioritize Modal and rename Kimi provider to Moonshot - #695

Merged
brynary merged 5 commits into
mainfrom
fix/modal-provider-catalog
Aug 1, 2026
Merged

Prioritize Modal and rename Kimi provider to Moonshot#695
brynary merged 5 commits into
mainfrom
fix/modal-provider-catalog

Conversation

@brynary

@brynary brynary commented Jul 31, 2026

Copy link
Copy Markdown
Member

Summary

  • prefer Modal over the direct Moonshot provider for Kimi K3 selection
  • make the Modal icon monochrome and replace the OpenRouter icon with its current official glyph
  • rename the canonical provider ID from kimi to moonshot and display it as Moonshot AI
  • prefer MOONSHOT_API_KEY while retaining KIMI_API_KEY as an env and vault fallback
  • keep Kimi model IDs and the Kimi agent profile unchanged

Compatibility

Configured provider IDs and qualified fallback targets must now use moonshot instead of kimi. This change does not add a provider compatibility alias. Existing KIMI_API_KEY credentials remain supported.

Validation

  • cargo nextest run --no-fail-fast -p fabro-model -p fabro-config -p fabro-agent -p fabro-llm -p fabro-workflow -p fabro-server -p fabro-cli (5,006 passed)
  • cargo nextest run --no-fail-fast -p fabro-static -p fabro-model -p fabro-config -p fabro-auth -p fabro-cli (1,443 passed)
  • cargo nextest run --no-fail-fast -p fabro-server (786 passed)
  • cargo +nightly-2026-04-14 clippy --workspace --all-targets -- -D warnings
  • affected-crate Clippy with warnings denied
  • cargo +nightly-2026-04-14 fmt --check --all
  • cd apps/fabro-web && bun run build
  • xmllint --noout apps/fabro-web/public/images/providers/moonshot.svg apps/fabro-web/public/images/providers/modal.svg apps/fabro-web/public/images/providers/openrouter.svg

brynary added 3 commits July 31, 2026 08:44
Render Modal with the theme color and replace the legacy OpenRouter mark with the current 2026 brand glyph.
Copilot AI review requested due to automatic review settings July 31, 2026 13:01

@claude claude 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.

Claude Code Review

Claude Code Review is paused for this repository. To reconnect it, an admin of this repository's GitHub organization (or the account owner, for personal repositories) who can also manage your Claude organization's Code Review settings needs to re-link GitHub in Code Review settings. This is a one-time step.

Tip: disable this comment in your organization's Code Review settings.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Ready to approve

The provider-id rename and Modal-priority change are applied consistently across code/docs/tests, and the PR includes extensive passing test coverage plus updated snapshots.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Pull request overview

This pull request updates Fabro’s model/provider catalog and related selection logic to (1) rename the canonical Kimi provider ID from kimi to moonshot (displayed as “Moonshot AI”) and (2) prioritize Modal as the preferred offering for kimi-k3 when available, while keeping Kimi model IDs and KIMI_API_KEY unchanged across the stack.

Changes:

  • Renamed provider identity throughout Rust code, tests, snapshots, and docs from kimimoonshot (provider display name: “Moonshot AI”).
  • Raised Modal provider priority so it wins kimi-k3 selection when eligible, with updated selection tests and fallback examples.
  • Refreshed provider icons (Modal monochrome; OpenRouter updated glyph) and aligned docs/changelog wording with the new provider identity.
File summaries
File Description
lib/foundation/fabro-model/src/ids.rs Updates ProviderId JSON roundtrip test to moonshot.
lib/foundation/fabro-model/src/catalog/providers/moonshot.toml Renames built-in provider key to [providers.moonshot] and sets display name “Moonshot AI”.
lib/foundation/fabro-model/src/catalog/providers/modal.toml Increases Modal priority to prefer it in selection when eligible.
lib/foundation/fabro-model/src/catalog.rs Updates catalog/provider assertions, selection tests, and snapshots to moonshot; asserts new Modal priority.
lib/foundation/fabro-model/src/billing.rs Updates legacy-tag rejection test inputs to use moonshot.
lib/foundation/fabro-config/src/parse.rs Updates config parsing tests for [llm.providers.moonshot].
lib/foundation/fabro-config/src/layers/llm.rs Updates docs/tests/examples to moonshot provider naming and sample alias.
lib/components/fabro-workflow/src/model_fallback.rs Updates fallback-chain tests to use moonshot:kimi-k3 references.
lib/components/fabro-workflow/src/handler/llm/api.rs Updates fallback policy test wiring to target moonshot.
lib/components/fabro-llm/tests/it/wire/snapshots/it__wire__anthropic__custom_named_stream_identity.snap Updates provider identity snapshot from kimi to moonshot.
lib/components/fabro-llm/tests/it/wire/snapshots/it__wire__anthropic__custom_named_stream_error_identity.snap Updates error identity text to “Server error from moonshot…”.
lib/components/fabro-llm/tests/it/wire/openai_compatible.rs Updates adapter naming / provider_options namespace keys to moonshot.
lib/components/fabro-llm/tests/it/wire/anthropic.rs Updates custom-named route tests/comments to Moonshot naming.
lib/components/fabro-llm/tests/integration.rs Updates live Moonshot/Kimi integration to use adapter name moonshot.
lib/components/fabro-llm/src/providers/anthropic.rs Updates comments and adapter name test for moonshot.
lib/components/fabro-llm/src/codec/openai_compatible/request.rs Updates docs/tests for provider namespace key moonshot.
lib/components/fabro-llm/src/codec/openai_compatible/mod.rs Updates codec module docs to list moonshot instead of kimi.
lib/components/fabro-llm/src/codec/mod.rs Updates CodecCtx docs to reference moonshot namespace.
lib/components/fabro-llm/src/client.rs Updates client/provider registration tests to moonshot.
lib/components/fabro-llm/src/adapter_registry.rs Updates OpenAI-compatible adapter factory tests to moonshot.
lib/components/fabro-agent/tests/it/parity_matrix.rs Updates provider matrix to use moonshot for Kimi models.
lib/components/fabro-agent/src/profiles/snapshots/fabro_agent__profiles__tests__openai_edit_file_prompt_snapshot.snap Updates prompt snapshot branding to “Moonshot AI”.
lib/components/fabro-agent/src/profiles/snapshots/fabro_agent__profiles__tests__openai_edit_file_and_web_search_prompt_snapshot.snap Updates prompt snapshot branding to “Moonshot AI”.
lib/components/fabro-agent/src/profiles/openai.rs Updates profile tests to route via moonshot and assert “Moonshot AI” branding.
lib/components/fabro-agent/src/profiles/mod.rs Updates test profile route provider id to moonshot.
lib/components/fabro-agent/src/profiles/kimi.rs Updates Kimi profile default provider id to moonshot while keeping profile kind Kimi.
lib/components/fabro-agent/src/compaction.rs Updates compaction budget test to use moonshot provider id.
lib/apps/fabro-server/tests/it/api/install.rs Updates install API test helper and payloads to accept moonshot.
lib/apps/fabro-server/src/server/tests.rs Updates server API tests to query/configure moonshot provider id.
lib/apps/fabro-server/src/run_manifest.rs Updates run-manifest fallback checks and ready-provider test fixtures to moonshot.
lib/apps/fabro-cli/src/shared/provider_auth.rs Updates CLI auth test provider list to include moonshot.
lib/apps/fabro-cli/src/commands/model.rs Updates CLI model command test payload to moonshot.
lib/apps/fabro-cli/src/commands/install.rs Updates CLI install command provider ID assertions to moonshot.
docs/public/reference/sdk.mdx Updates env-var provider table to label KIMI_API_KEY as Moonshot AI.
docs/public/execution/run-configuration.mdx Updates qualified fallback examples from kimi: to moonshot:.
docs/public/core-concepts/models.mdx Updates model table + default-provider table to use provider moonshot.
docs/public/changelog/2026-07-22.mdx Updates changelog wording to “direct Moonshot AI provider”.
docs/public/changelog/2026-02-28.mdx Updates catalog-provider wording to “Moonshot AI”.
docs/public/administration/server-configuration.mdx Updates secrets table to label KIMI_API_KEY as Moonshot AI.
apps/fabro-web/public/images/providers/openrouter.svg Replaces OpenRouter icon with current official glyph.
apps/fabro-web/public/images/providers/moonshot.svg Reformats Moonshot SVG for consistent attributes/styling.
apps/fabro-web/public/images/providers/modal.svg Makes Modal icon monochrome via currentColor.
Review details
  • Files reviewed: 39/42 changed files
  • Comments generated: 0
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

Keep KIMI_API_KEY as a legacy fallback for env and vault credentials.
Copilot AI review requested due to automatic review settings July 31, 2026 13:15

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Not ready to approve

A few live/E2E tests and fixtures are still gated on or seeded with KIMI_API_KEY despite MOONSHOT_API_KEY being the new canonical credential, which will cause incorrect test execution expectations for Moonshot-only setups.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Review details

Suppressed comments (6)

lib/components/fabro-agent/tests/it/parity_matrix.rs:419

  • This Moonshot web_fetch parity test is still gated on KIMI_API_KEY. If someone configures only MOONSHOT_API_KEY (the new preferred name), the live test will be skipped even though the provider is configured correctly.
    keys = ["KIMI_API_KEY", "OPENAI_API_KEY"]

lib/components/fabro-agent/tests/it/parity_matrix.rs:467

  • This Moonshot web_search parity test is still gated on KIMI_API_KEY; it should use MOONSHOT_API_KEY to match the renamed provider and preferred credential name.
    keys = ["KIMI_API_KEY", "BRAVE_SEARCH_API_KEY"]

lib/components/fabro-agent/tests/it/parity_matrix.rs:524

  • The non-OpenAI provider parity tests for Moonshot are still gated on KIMI_API_KEY, which makes these tests depend on the legacy env var instead of the new canonical MOONSHOT_API_KEY.
            keys = ["KIMI_API_KEY"]

lib/components/fabro-llm/tests/integration.rs:181

  • This live E2E test is still gated on KIMI_API_KEY and reads EnvVars::KIMI_API_KEY, even though the provider identity is now moonshot and the catalog prefers MOONSHOT_API_KEY. Switching the test to MOONSHOT_API_KEY keeps it aligned with the new canonical credential (runtime fallback to KIMI_API_KEY remains covered elsewhere).
    lib/components/fabro-agent/tests/it/parity_matrix.rs:285
  • Moonshot is now the canonical provider ID, but this parity-matrix test still requires KIMI_API_KEY to run. That keeps the live test suite coupled to the legacy env var even though MOONSHOT_API_KEY is now preferred.

This issue also appears in the following locations of the same file:

  • line 419
  • line 467
  • line 524
            keys = ["KIMI_API_KEY"]

lib/apps/fabro-server/src/run_manifest.rs:1708

  • This Moonshot fixture still seeds the vault with EnvVars::KIMI_API_KEY. Given the provider has been renamed to moonshot and the catalog now prefers MOONSHOT_API_KEY, using EnvVars::MOONSHOT_API_KEY here will keep the preflight readiness test aligned with the canonical secret name (while separate tests can cover the legacy fallback explicitly).
                (EnvVars::KIMI_API_KEY, "test-moonshot-key"),
  • Files reviewed: 44/47 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

…talog

Resolve the model catalog table conflict in docs/public/core-concepts/models.mdx
by keeping both changes: this branch's `kimi` -> `moonshot` provider rename for
the Kimi rows, and main's new DeepSeek V4 rows.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 1, 2026 13:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Not ready to approve

Multiple live/e2e tests for the renamed moonshot provider are still gated on KIMI_API_KEY, which conflicts with the PR’s new canonical MOONSHOT_API_KEY setup and will surprise developers following the updated .env.example.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Review details

Suppressed comments (7)

lib/components/fabro-agent/tests/it/parity_matrix.rs:525

  • This Moonshot provider entry in non_openai_provider_tests! still gates on KIMI_API_KEY. Since the provider was renamed and MOONSHOT_API_KEY is now canonical, the test should require MOONSHOT_API_KEY instead.
            ProviderId::new("moonshot"),
            "kimi-k2.5",
            kimi,
            keys = ["KIMI_API_KEY"]
        );

lib/components/fabro-agent/tests/it/parity_matrix.rs:286

  • These Moonshot provider parity tests still require KIMI_API_KEY, which no longer matches the canonical env var (MOONSHOT_API_KEY) and conflicts with the updated .env.example/docs. Update the required key to MOONSHOT_API_KEY so running the matrix only needs the new canonical variable.

This issue also appears in the following locations of the same file:

  • line 416
  • line 464
  • line 521
  • line 803
  • line 885
            ProviderId::new("moonshot"),
            "kimi-k2.5",
            kimi,
            keys = ["KIMI_API_KEY"]
        );

lib/components/fabro-agent/tests/it/parity_matrix.rs:420

  • The Moonshot web_fetch parity test still requires KIMI_API_KEY. Update it to MOONSHOT_API_KEY so the test suite aligns with the canonical credential name.
    ProviderId::new("moonshot"),
    "kimi-k2.5",
    kimi,
    keys = ["KIMI_API_KEY", "OPENAI_API_KEY"]
);

lib/components/fabro-agent/tests/it/parity_matrix.rs:468

  • The Moonshot web_search parity test still requires KIMI_API_KEY. Update it to MOONSHOT_API_KEY to match the provider rename and canonical credential name.
    ProviderId::new("moonshot"),
    "kimi-k2.5",
    kimi,
    keys = ["KIMI_API_KEY", "BRAVE_SEARCH_API_KEY"]
);

lib/components/fabro-agent/tests/it/parity_matrix.rs:806

  • This Moonshot reasoning-effort live test is still gated on KIMI_API_KEY. Since MOONSHOT_API_KEY is the preferred/canonical key now, update the required key to avoid surprising skips/failures when only the new env var is set.
    ProviderId::new("moonshot"),
    "kimi-k2.5",
    kimi_reasoning_effort,
    keys = ["KIMI_API_KEY"]

lib/components/fabro-agent/tests/it/parity_matrix.rs:889

  • This Moonshot loop-detection live test is still gated on KIMI_API_KEY. Update it to MOONSHOT_API_KEY so the live matrix runs with the canonical env var name.
    ProviderId::new("moonshot"),
    "kimi-k2.5",
    kimi_loop_detection,
    keys = ["KIMI_API_KEY"]
);

lib/components/fabro-llm/tests/integration.rs:181

  • This live Moonshot/Kimi K3 integration test still requires and reads KIMI_API_KEY, but the PR introduces MOONSHOT_API_KEY as the canonical env var and updates .env.example accordingly. Update the test gate and env lookup to use MOONSHOT_API_KEY so developers can run it with the new default configuration.
  • Files reviewed: 44/47 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

@brynary
brynary merged commit 33e5dc8 into main Aug 1, 2026
18 checks passed
@brynary
brynary deleted the fix/modal-provider-catalog branch August 1, 2026 13:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants