feat(git): Add Claude as a TextGenerationProvider#1323
feat(git): Add Claude as a TextGenerationProvider#1323keyzou wants to merge 9 commits intopingdotgg:mainfrom
Conversation
Move limitSection, sanitizeCommitSubject, and sanitizePrTitle into a dedicated textGenerationUtils module so they can be reused by multiple text generation providers. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the single DEFAULT_GIT_TEXT_GENERATION_MODEL constant with a DEFAULT_GIT_TEXT_GENERATION_MODEL_BY_PROVIDER map keyed by provider kind, enabling per-provider default models. Update all consumers. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…nterfaces Introduce a standalone TextGenerationProvider union type and add an optional provider field to all text generation input interfaces, allowing callers to select which backend generates the content. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add ClaudeTextGeneration layer that spawns `claude -p` with structured JSON output for commit messages, PR content, and branch names. Introduce a RoutingTextGeneration layer that dispatches to Codex or Claude based on the provider field, and wire it into the server DI graph. Thread the provider selection through GitManager to all text generation call sites. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a provider selector (Codex/Claude) to the git settings panel with dynamic model options per provider. Pass the selected provider through to the stacked action mutation. Also fix a pre-existing bug where the model field name was incorrect in the RPC call. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Match the pattern already used by Codex (CODEX_REASONING_EFFORT) to make the setting visible and easy to change. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Extract prompt construction logic into buildCommitMessagePrompt, buildPrContentPrompt, and buildBranchNamePrompt in new textGenerationPrompts.ts - Replace duplicate normalizeClaudeError and normalizeCodexError with shared normalizeCliError function parameterized by CLI name - Update Claude and Codex text generation layers to use shared utilities, reducing duplication - Add comprehensive tests for prompt builders and error normalization
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
|
can we reuse the model picker from the chat UI? So it's a single select with provider top level, model submenu? |
- Consolidate provider and model selection into reusable component - Replace getAppModelOptions with getCustomModelOptionsByProvider - Simplifies settings UI and enables reuse across the app
|
yep, didn't think about that, what do you think ? (updated the screenshot in the PR aswell) Enregistrement.de.l.ecran.2026-03-23.a.19.37.28.mov |
What Changed
I suggest reviewing commit-by-commit :)
I'm also not too familiar with Effect, so there might be some AI slop here and there, don't hesitate to flag it
I saw a similar PR at #1222 but since the change was not enough, I wanted to take a stab at the issue myself (not sure about the proper open-source etiquette here though)
Fixes #1221
Why
Pretty straightforward: I don't have Codex, so Git-related operations couldn't work for me :)
UI Changes
Here's the setting page with the Git section using Claude:
Enregistrement.de.l.ecran.2026-03-23.a.19.37.28.mov
Here's a demo of the branch name generation working (not sure I have the right flow) -- old model picker, see the video above for the updated version ^:
Enregistrement.de.l.ecran.2026-03-23.a.02.17.41.mp4
And here's a demo of committing and pushing (thus generating a commit message) -- old model picker, see the video above for the updated version:
Enregistrement.de.l.ecran.2026-03-23.a.02.15.14.mp4
Checklist
Note
Add Claude as a selectable text generation provider for git actions
ClaudeTextGenerationLivelayer in ClaudeTextGeneration.ts that spawns theclaudeCLI with JSON-structured output and a 180s timeout to generate commit messages, PR content, and branch names.RoutingTextGenerationLivelayer that dispatches text generation to Codex or Claude based on aproviderfield ('codex'|'claudeAgent') on each request.CodexTextGenerationto use them.textGenerationProvidersetting in app settings (defaulting to'codex') and updates the settings UI with a provider+model picker; the chosen provider is forwarded through therunStackedActionAPI call.RoutingTextGenerationLiveinstead ofCodexTextGenerationLive, meaning all text generation requests go through the router; existing behavior is preserved when provider is unset (defaults to Codex).Macroscope summarized c9d1242.