Repository navigation
·
113 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
⚠️ Important Changes
- Gitea webhooks now require a secret (#3637): with
gitea.webhook_secretunset, the Gitea app rejects every webhook with HTTP 403 instead of accepting it unsigned. Set the secret on the Gitea webhook and in your config before upgrading. - The GitHub Action fails on tool errors (#3712): a tool failure that used to be logged and swallowed now fails the Action. Set
github_action_config.fail_on_tool_errors = falseto keep the old green behaviour. - Comment commands need a leading
/on GitLab, Bitbucket and Bitbucket Server (#3769): a comment only runs a tool when it starts with a slash command, so plain comments that mention one no longer trigger anything. extra_config_urlis host-only (#3638): a repository's.pr_agent.tomlcan no longer set it. Configure it on the host instead, for example withPR_AGENT_EXTRA_CONFIG_URL.commitable_code_suggestionsis nowcommittable_code_suggestions(#3749): the old spelling still works with a deprecation warning until 1.0.- The Bitbucket Server webhook image runs under gunicorn (#3667): the container now starts multiple workers through the shared
gunicorn_config.pyinstead of a single Python process.
Known issue: Bedrock Kimi K3, new in this release (#3651), still receives a temperature by default, which Bedrock is reported to reject. Until #3752 lands, add the model ids to config.no_temperature_models.
What's Changed
- Run BitBucket Server webhook under gunicorn for worker isolation by @jkratz55 in #3667
- test: pin LiteLLM future Claude fallbacks by @PeterDaveHello in #3660
- test(ai_handlers): add tripwire for guarded private LiteLLM imports by @utsab345 in #3615
- test: use the bundled LiteLLM cost map in local unit runs by @akalongman in #3641
- fix(codecommit): align language classification with diff packing by @oleksii-tumanov in #3625
- refactor(cloud_auth): deduplicate repeated logic by @high-tail in #3607
🚀 Features
- feat(gitlab): distinguish applied and bot-resolved suggestion threads in the improve context by @JokeWaumans in #3774
- feat: add Bedrock Kimi K3 models by @ira-at-work in #3651
- feat: reply to GitLab trigger discussions by @deadpool-mjpatel4444 in #3426
- feat(gitlab): support inline key issues by @utsab345 in #3650
- feat(ai_handlers): surface prompt cache visibility by @utsab345 in #3618
- feat(models): add Claude Opus 5.5 support by @PeterDaveHello in #3629
- feat: validate /describe output against existing model by @taljeon in #3616
🐛 Bug Fixes
- fix(git_providers): log publish and settings errors at quiet verbosity by @PeterDaveHello in #3802
- fix(tickets): cap fetched sub-issues per ticket and order parent before children by @rishiiicreates in #3807
- fix(models): clamp OpenRouter Gemini reasoning disablement by @oleksii-tumanov in #3787
- fix(tools): re-raise any provider incomplete-files error, not just Bitbucket's by @PranavD2905 in #3800
- fix(bitbucket): encode filenames in line links by @kudala-bharani in #3796
- fix(servers): route inline comments to /ask_line only on a leading /ask by @utsab345 in #3797
- fix(review): link a TODO without a usable line number to its file by @Arta-shoja in #3788
- fix: stop caching repo context on a mutable ref by @utsab345 in #3776
- fix(typo): commitable to committable by @even-even in #3749
- fix(action): share GitHub helpers so the Action keeps the #3670 /ask fix by @Yoel-qin in #3785
- fix(github): fetch newest polling comments by @oleksii-tumanov in #3747
- fix(labels): build the label enum when no custom labels are set by @utsab345 in #3773
- fix(tokens): drop dangling bytes when fitting truncated prompt text by @Yoel-qin in #3771
- fix(providers): encode filenames in line links by @oleksii-tumanov in #3782
- fix(changelog): make fence stripping idempotent by @utsab345 in #3783
- fix(gitlab): classify concurrent changelog creation by @oleksii-tumanov in #3786
- fix(bitbucket): reject incomplete aggregate pull request diffs by @oleksii-tumanov in #3743
- fix: stop three silent fallbacks that corrupt review and label output by @utsab345 in #3744
- fix: preserve findings when inline positions cannot be resolved by @strawberry-little-bear in #3753
- fix(changelog): preserve concurrent edits during changelog updates by @oleksii-tumanov in #3751
- fix(azure): apply ignore patterns to slash-prefixed paths by @utsab345 in #3770
- fix(mosaico): honor streaming requirements in health probes by @PeterDaveHello in #3781
- fix(servers): require a leading slash for comment commands by @Yoel-qin in #3769
- fix(bitbucket): apply ignore filters to push commands by @Yoel-qin in #3768
- fix(codecommit): prepare comment bodies in publish_code_suggestions by @truecallerabreham in #3736
- fix(tickets): preserve branch issue order by @oleksii-tumanov in #3766
- fix: detect language for multi-part and uppercase suffixes by @utsab345 in #3767
- fix(gitea): delete every temp comment on cleanup by @utsab345 in #3765
- fix: fail closed on three silent fallbacks by @utsab345 in #3742
- fix(github): invalidate stale non-empty diff caches by @PeterDaveHello in #3724
- fix(github): fetch all direct sub-issues by @oleksii-tumanov in #3746
- fix(azure): do not resolve a comment thread after a swallowed tool failure by @Lesereingrape in #3722
- fix(github_action): fail the Action when a tool records a swallowed failure by @charlieanna in #3712
- fix(gitlab): stop search_line from raising UnboundLocalError by @utsab345 in #3756
- fix(gerrit): reject unsupported reflect webhook action by @oleksii-tumanov in #3748
- fix(improve): match applied entries when capping history by @utsab345 in #3735
- fix(improve): keep generation and reflection chunks aligned by @oleksii-tumanov in #3740
- fix(openrouter): normalize routing variants in capability checks by @PeterDaveHello in #3728
- fix(azure): keep the incremental diff on the source branch by @utsab345 in #3758
- fix(tests): harden Gitea E2E branch naming and timeouts by @PeterDaveHello in #3664
- fix(bitbucket): report line counts in describe by @utsab345 in #3727
- fix(add_docs): report failed inline documentation publication by @oleksii-tumanov in #3745
- fix(add_docs): anchor docstring indentation on a code line by @utsab345 in #3733
- fix(gitea): separate commit messages by @utsab345 in #3729
- fix(github): strip only the leading ask command by @utsab345 in #3732
- fix(agent): treat hash as text in commands by @utsab345 in #3731
- fix: record failures from swallowed auto-command tools by @sb123sb123 in #3710
- fix(codecommit): use the PR URL region for AWS requests by @oleksii-tumanov in #3715
- fix(bitbucket): resolve settings branches to commit hashes by @oleksii-tumanov in #3711
- fix(diff): a deletion-only diff is dropped from the compressed prompt with no bookkeeping by @utsab345 in #3699
- fix(ask): preserve apostrophes in double-quoted questions by @oleksii-tumanov in #3698
- fix(diff): preserve deleted file metadata when pruning by @PeterDaveHello in #3697
- fix(commands): preserve automatic command setting overrides by @oleksii-tumanov in #3696
- fix(gitlab): skip incomplete submodule comparisons by @oleksii-tumanov in #3695
- fix(tokens): avoid a stale cached encoder on concurrent model switch by @utsab345 in #3694
- fix(cli_args): reject forbidden keys hidden in section mapping values by @utsab345 in #3648
- fix(ignore): stop renames bypassing ignore rules on GitLab and Bitbucket by @utsab345 in #3693
- fix(mosaico): parse quoted diff paths by @deadpool-mjpatel4444 in #3441
- fix(litellm): clamp Gemini 3.7/3.8 minimal reasoning by @deadpool-mjpatel4444 in #3434
- fix(gitlab): skip invalid suggestion line ranges by @deadpool-mjpatel4444 in #3433
- fix: preserve nested code fences in review snippets by @kevin-lozada-santos in #3418
- fix(models): pass chat template options in the request body by @oleksii-tumanov in #3682
- fix(github): reuse empty diffs within a command by @PeterDaveHello in #3692
- fix: return text from GCS secret provider by @PeterDaveHello in #3690
- fix(gitlab): expose prior code-suggestion threads to improve by @utsab345 in #3684
- fix(tokens): count via litellm.acount_tokens instead of _calc_claude_tokens by @utsab345 in #3620
- fix(ci): rerun autolabeler on PR title edits by @PeterDaveHello in #3678
- fix(codecommit): keep publishing remaining suggestions after one failure by @utsab345 in #3681
- fix: redact GCS secret retrieval failures from logs by @utsab345 in #3680
- fix(models): avoid replaying rejected model requests by @oleksii-tumanov in #3683
- fix(artifacts): preserve CI context after command settings by @oleksii-tumanov in #3674
- fix: classify retryable model fallback failures by @taljeon in #3631
- fix(gitlab_webhook): degrade to shared secret when the secret provider fails by @utsab345 in #3662
- fix(github): create missing changelog file when pushing updates by @remote-controlled-man in #3639
- fix(github): keep dedup markers when truncating invalid suggestions by @utsab345 in #3668
- fix(similar_issue): re-ingest after an interrupted full ingest by @utsab345 in #3580
- fix(diff): keep all hunks spanned by a line range by @utsab345 in #3671
- fix(diff): place zero-length hunks correctly when reconstructing the base file by @huiq777 in #3673
- fix(bitbucket): update progress comments returned as raw payloads by @jspw in #3653
- fix: preserve whitespace and empty sides in generated diffs by @PeterDaveHello in #3666
- fix(help_docs): fit the dispatched prompt per fallback model by @utsab345 in #3657
- fix(github_app): keep multi-command /ask mobile quotes intact by @utsab345 in #3670
- fix(improve): report files omitted from suggestion coverage by @junnhwan in #3645
- fix(diff): ignore EOF metadata when locating lines by @PeterDaveHello in #3658
- fix(skills): invalidate cached context when the model changes by @oleksii-tumanov in #3672
- fix(describe): report the exact unprocessed-file remainder by @utsab345 in #3669
- fix(github): avoid partial hunk fallback updates by @PeterDaveHello in #3621
- fix(github): narrow broad exception handlers in the GitHub provider by @wfatih in #3524
- fix(improve): fall back to summarized comment when inline publish is exhausted by @utsab345 in #3605
- fix(mosaico): retain A2A context across follow-up tasks by @junnhwan in #3643
- fix(gitea): fail closed when webhook secret is unset by @utsab345 in #3637
- fix(security): make extra_config_url host-only by @utsab345 in #3638
- fix: redact Bitbucket install storage errors by @PeterDaveHello in #3624
- fix: redact botocore credential process refresh logs by @PeterDaveHello in #3622
- fix: validate direct command setting keys by @oleksii-tumanov in #3634
- fix(cli): isolate invocation settings by @oleksii-tumanov in #3635
- fix(gitlab): fall back to full diffs on compare timeout by @oleksii-tumanov in #3636
- fix(github): enable verified inline key issues by @taljeon in #3633
- fix(tokens): skip encoding for non-positive budgets by @PeterDaveHello in #3623
- fix(improve): validate summary anchors before per-file caps by @oleksii-tumanov in #3626
- fix(help): honor tool error propagation by @oleksii-tumanov in #3627
- fix(action): ignore non-command comments by @utsab345 in #3604
- fix: keep changelog wait cooperative by @oleksii-tumanov in #3601
- fix: preserve backslashes in diagram markers by @oleksii-tumanov in #3599
- fix(mosaico): classify diff files by language by @oleksii-tumanov in #3597
- fix(qdrant): batch similar issue uploads by @sajjadlabx in #3559
- fix(review): keep findings with non-numeric line fields by @utsab345 in #3590
- fix(bitbucket): preserve backslashes in rendered suggestions by @PeterDaveHello in #3577
- fix(tokens): count special-token literals as ordinary text by @PeterDaveHello in #3573
⚡ Performance
- perf(diff): stop stalled large-PR packing by @PeterDaveHello in #3763
- perf(tokens): avoid redundant initial prompt counting by @PeterDaveHello in #3762
- perf(gitlab): skip impossible file content reads by @PeterDaveHello in #3761
- perf(diff): skip fuzzy matching for exact patch lines by @PeterDaveHello in #3725
- perf(diff): skip diff generation for identical file contents by @PeterDaveHello in #3688
- perf: avoid repeated prefix copies when rendering diff hunks by @PeterDaveHello in #3661
- perf(diff): avoid materializing lines when stripping metadata by @PeterDaveHello in #3659
- perf(context): optimize markdown fence selection by @PeterDaveHello in #3592
- perf(diff): use set membership when packing remaining files by @PeterDaveHello in #3591
📚 Documentation
- docs: add kapa.ai "Ask AI" widget by @naorpeled in #3777
- docs(github): clarify fork PR checkout and token behavior by @PeterDaveHello in #3691
- docs: add a maintainers page by @naorpeled in #3738
- docs: change Qodo logo width from 300 to 150 by @naorpeled in #3716
- docs: migrate documentation from MkDocs to Docusaurus by @naorpeled in #3713
- docs: fix GitHub suggestion-count configuration examples by @teachershuang in #3337
- docs: add Gerrit and CodeCommit to the features table by @HarshRajSinghania in #3588
🧹 Maintenance
- chore: remove unused date and inline-comment helpers by @PeterDaveHello in #3803
- chore(deps): address urllib3 and virtualenv security advisories by @PeterDaveHello in #3804
- chore(deps): bump PyJWT from 2.13.0 to 2.15.1 for security fixes by @PeterDaveHello in #3805
- chore: remove redundant CLAUDE.md pointer file by @PeterDaveHello in #3760
- chore(docs): apply security patches with
npm audit fixby @PeterDaveHello in #3790 - chore(docs): remove unused direct clsx dependency by @PeterDaveHello in #3789
- fix(action): share GitHub helpers so the Action keeps the #3670 /ask fix by @Yoel-qin in #3785
- chore: fix ruff rule E402 B027 by @even-even in #3772
- chore: clean up LiteLLM compatibility notes for future upgrades by @PeterDaveHello in #3764
- refactor(git-providers): share code suggestion publishing by @OUAO-FRANK in #3726
- chore(deps): Upgrade LiteLLM to the latest stable v1.103.0 by @PeterDaveHello in #3754
- chore(docs): Raise Node.js minimum version from v20 to v22 by @PeterDaveHello in #3730
- chore(deps): Apply npm audit fix to the docs lockfile by @PeterDaveHello in #3734
- chore(ci): bump actions/setup-node from 4.4.0 to 7.0.0 in the actions-major group across 1 directory by @dependabot[bot] in #3720
- chore(ci): bump the actions-minor-and-patch group across 1 directory with 4 updates by @dependabot[bot] in #3719
- refactor(git_providers): share code-suggestion thread context across providers by @bernalalexis-try in #3689
- chore(models): drop retired o1-preview temperature override by @PeterDaveHello in #3677
- chore: fix E501 ruff rule part2 (final) by @even-even in #3606
- chore(models): remove retired OpenAI, Claude, and Gemini entries by @PeterDaveHello in #3665
- refactor(ai_handlers): derive temperature support from litellm metadata and retire NO_SUPPORT_TEMPERATURE_MODELS by @utsab345 in #3619
- chore(deps): Upgrade LiteLLM to the latest stable v1.102.1 by @PeterDaveHello in #3663
- chore(deps): bump litellm to 1.102.0 by @utsab345 in #3617
- chore(deps): upgrade tiktoken to 0.14.0 and refresh uv lockfile by @PeterDaveHello in #3656
- refactor(litellm_ai_handler): deduplicate repeated logic by @high-tail in #3587
- chore(ci): bump the actions-minor-and-patch group with 6 updates by @dependabot[bot] in #3594
- chore(ci): align native test checkout action with v7.0.1 by @PeterDaveHello in #3593
⬆️ Dependencies
- chore(ci): bump actions/setup-node from 4.4.0 to 7.0.0 in the actions-major group across 1 directory by @dependabot[bot] in #3720
- chore(ci): bump the actions-minor-and-patch group across 1 directory with 4 updates by @dependabot[bot] in #3719
- chore(ci): bump the actions-minor-and-patch group with 6 updates by @dependabot[bot] in #3594
Full Changelog: v0.46.0...v0.47.0