This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new b2a48f72aea Add --review-requested filter to breeze pr auto-triage
(#63332)
b2a48f72aea is described below
commit b2a48f72aea34da31c839f945b6b91d2bb22c947
Author: Yeonguk Choo <[email protected]>
AuthorDate: Wed Mar 11 20:53:29 2026 +0900
Add --review-requested filter to breeze pr auto-triage (#63332)
---
dev/breeze/doc/images/output_pr_auto-triage.svg | 64 ++++++++++++----------
dev/breeze/doc/images/output_pr_auto-triage.txt | 2 +-
.../src/airflow_breeze/commands/pr_commands.py | 29 ++++++++++
.../airflow_breeze/commands/pr_commands_config.py | 1 +
4 files changed, 65 insertions(+), 31 deletions(-)
diff --git a/dev/breeze/doc/images/output_pr_auto-triage.svg
b/dev/breeze/doc/images/output_pr_auto-triage.svg
index 7210505b83e..f42c66722d3 100644
--- a/dev/breeze/doc/images/output_pr_auto-triage.svg
+++ b/dev/breeze/doc/images/output_pr_auto-triage.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2172.7999999999997"
xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2197.2"
xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -43,7 +43,7 @@
<defs>
<clipPath id="breeze-pr-auto-triage-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="2121.7999999999997" />
+ <rect x="0" y="0" width="1463.0" height="2146.2" />
</clipPath>
<clipPath id="breeze-pr-auto-triage-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -303,9 +303,12 @@
<clipPath id="breeze-pr-auto-triage-line-85">
<rect x="0" y="2075.5" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-pr-auto-triage-line-86">
+ <rect x="0" y="2099.9" width="1464" height="24.65"/>
+ </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="2170.8" rx="8"/><text
class="breeze-pr-auto-triage-title" fill="#c5c8c6" text-anchor="middle" x="740"
y="27">Command: pr auto-triage</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="2195.2" rx="8"/><text
class="breeze-pr-auto-triage-title" fill="#c5c8c6" text-anchor="middle" x="740"
y="27">Command: pr auto-triage</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -375,33 +378,34 @@
</text><text class="breeze-pr-auto-triage-r5" x="0" y="1410.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-57)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1410.8" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-57)">--checks-state         </text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="1410.8" textLength="524.6"
clip-path="url(#breeze-pr-auto-triage-line-57)">Only assess PRs&#
[...]
</text><text class="breeze-pr-auto-triage-r5" x="0" y="1435.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-58)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1435.2" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-58)">--min-commits-behind   </text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="1435.2" textLength="878.4"
clip-path="url(#breeze-pr-auto-triage-line-58)">Only assess PRs that are at 
[...]
</text><text class="breeze-pr-auto-triage-r5" x="0" y="1459.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-59)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1459.6" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-59)">(INTEGER)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1459.6" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-59)">│</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1459.6" textLength="12.2" [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1484" textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-60)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1484" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-60)">
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1508.4"
textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-61)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="1508.4" textLength="292.8"
clip-path="url(#breeze-pr-auto-triage-line-61)"> Pagination and sorting </text><text
class="breeze-pr-auto-triage-r5" x="317.2" y="1508.4" textLength="1122.4"
clip-path="url(#breeze-pr-auto-triage-line-61)">─────────────────────────────────────────────────
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1532.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-62)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1532.8" textLength="146.4"
clip-path="url(#breeze-pr-auto-triage-line-62)">--batch-size</text><text
class="breeze-pr-auto-triage-r1" x="195.2" y="1532.8" textLength="500.2"
clip-path="url(#breeze-pr-auto-triage-line-62)">Number of PRs to fetch per GraphQL page. </
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1557.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-63)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1557.2" textLength="146.4"
clip-path="url(#breeze-pr-auto-triage-line-63)">--max-num   </text><text
class="breeze-pr-auto-triage-r1" x="195.2" y="1557.2" textLength="793"
clip-path="url(#breeze-pr-auto-triage-line-63)">Maximum number of non-collaborator PRs to
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1581.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-64)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1581.6" textLength="146.4"
clip-path="url(#breeze-pr-auto-triage-line-64)">--sort      </text><text
class="breeze-pr-auto-triage-r1" x="195.2" y="1581.6" textLength="414.8"
clip-path="url(#breeze-pr-auto-triage-line-64)">Sort order for PR search res
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1606" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-65)">│</text><text
class="breeze-pr-auto-triage-r6" x="195.2" y="1606" textLength="622.2"
clip-path="url(#breeze-pr-auto-triage-line-65)">(created-asc|created-desc|updated-asc|updated-desc)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1606" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-65)">│</text><text
class="breeze-pr-auto-triage-r1" x= [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1630.4"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1630.4" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-66)">
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1654.8"
textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-67)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="1654.8" textLength="244"
clip-path="url(#breeze-pr-auto-triage-line-67)"> Assessment options </text><text
class="breeze-pr-auto-triage-r5" x="268.4" y="1654.8" textLength="1171.2"
clip-path="url(#breeze-pr-auto-triage-line-67)">────────────────────────────────────────────────────────────
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1679.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-68)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1679.2" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-68)">--check-mode     </text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1679.2" textLength="1037"
clip-path="url(#breeze-pr-auto-triage-line-68)">Which checks to run: 'both&#x
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1703.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-69)">│</text><text
class="breeze-pr-auto-triage-r5" x="256.2" y="1703.6" textLength="61"
clip-path="url(#breeze-pr-auto-triage-line-69)">both]</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1703.6" textLength="158.6"
clip-path="url(#breeze-pr-auto-triage-line-69)">(both|ci|llm)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1703.6" textLength= [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1728" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-70)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1728" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-70)">--llm-model      </text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1728" textLength="1183.4"
clip-path="url(#breeze-pr-auto-triage-line-70)">LLM model for assessment (format:
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1752.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-71)">│</text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1752.4" textLength="268.4"
clip-path="url(#breeze-pr-auto-triage-line-71)">for OpenAI Codex CLI. </text><text
class="breeze-pr-auto-triage-r5" x="524.6" y="1752.4" textLength="427"
clip-path="url(#breeze-pr-auto-triage-line-71)">[default: claude/claude-sonnet-4-6]</text><text
c [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1776.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-72)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1776.8" textLength="1159"
clip-path="url(#breeze-pr-auto-triage-line-72)">>claude/claude-sonnet-4-6< | claude/claude-opus-4-20250514 | claude/claude-sonnet-4-20250514 | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1776.8" textLength="12.2"
clip-path="u [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1801.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-73)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1801.2" textLength="976"
clip-path="url(#breeze-pr-auto-triage-line-73)">claude/claude-haiku-4-5-20251001 | claude/sonnet | claude/opus | claude/haiku | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1801.2" textLength="12.2"
clip-path="url(#breeze-p [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1825.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-74)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1825.6" textLength="1146.8"
clip-path="url(#breeze-pr-auto-triage-line-74)">codex/gpt-5.3-codex | codex/gpt-5.3-codex-spark | codex/gpt-5.2-codex | codex/gpt-5.1-codex | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1825.6" textLength="12.2"
clip-pa [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1850" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-75)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1850" textLength="695.4"
clip-path="url(#breeze-pr-auto-triage-line-75)">codex/gpt-5-codex | codex/gpt-5-codex-mini | codex/gpt-5)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1850" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-75)">│</text><text class="br [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1874.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-76)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1874.4" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-76)">--llm-concurrency</text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1874.4" textLength="524.6"
clip-path="url(#breeze-pr-auto-triage-line-76)">Number of concurrent LLM assessment calls. </tex
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1898.8"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1898.8" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-77)">
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1923.2"
textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-78)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="1923.2" textLength="195.2"
clip-path="url(#breeze-pr-auto-triage-line-78)"> Action options </text><text
class="breeze-pr-auto-triage-r5" x="219.6" y="1923.2" textLength="1220"
clip-path="url(#breeze-pr-auto-triage-line-78)">────────────────────────────────────────────────────────────────
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1947.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-79)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1947.6" textLength="183"
clip-path="url(#breeze-pr-auto-triage-line-79)">--answer-triage</text><text
class="breeze-pr-auto-triage-r1" x="231.8" y="1947.6" textLength="1207.8"
clip-path="url(#breeze-pr-auto-triage-line-79)">Force answer to triage prompts: [d]raft, [c]lose,&#
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1972" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-80)">│</text><text
class="breeze-pr-auto-triage-r6" x="231.8" y="1972" textLength="183"
clip-path="url(#breeze-pr-auto-triage-line-80)">(d|c|r|s|q|y|n)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1972" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-80)">│</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1972" textLength="12.2" clip [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1996.4"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-81)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1996.4" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-81)">
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="2020.8"
textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-82)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="2020.8" textLength="195.2"
clip-path="url(#breeze-pr-auto-triage-line-82)"> Common options </text><text
class="breeze-pr-auto-triage-r5" x="219.6" y="2020.8" textLength="1220"
clip-path="url(#breeze-pr-auto-triage-line-82)">────────────────────────────────────────────────────────────────
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="2045.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-83)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="2045.2" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-83)">--dry-run</text><text
class="breeze-pr-auto-triage-r7" x="158.6" y="2045.2" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-83)">-D</text><text
class="breeze-pr-auto-triage-r1" x="207.4" y="2045.2" textLength="719.8" [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="2069.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-84)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="2069.6" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-84)">--verbose</text><text
class="breeze-pr-auto-triage-r7" x="158.6" y="2069.6" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-84)">-v</text><text
class="breeze-pr-auto-triage-r1" x="207.4" y="2069.6" textLength="585.6" [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="2094" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-85)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="2094" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-85)">--help   </text><text
class="breeze-pr-auto-triage-r7" x="158.6" y="2094" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-85)">-h</text><text
class="breeze-pr-auto-triage-r1" x="207.4" y="2094" textLength= [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="2118.4"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-86)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="2118.4" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-86)">
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1484" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-60)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1484" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-60)">--review-requested     </text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="1484" textLength="817.4"
clip-path="url(#breeze-pr-auto-triage-line-60)">Only show PRs where review i
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1508.4"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-61)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1508.4" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-61)">
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1532.8"
textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-62)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="1532.8" textLength="292.8"
clip-path="url(#breeze-pr-auto-triage-line-62)"> Pagination and sorting </text><text
class="breeze-pr-auto-triage-r5" x="317.2" y="1532.8" textLength="1122.4"
clip-path="url(#breeze-pr-auto-triage-line-62)">─────────────────────────────────────────────────
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1557.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-63)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1557.2" textLength="146.4"
clip-path="url(#breeze-pr-auto-triage-line-63)">--batch-size</text><text
class="breeze-pr-auto-triage-r1" x="195.2" y="1557.2" textLength="500.2"
clip-path="url(#breeze-pr-auto-triage-line-63)">Number of PRs to fetch per GraphQL page. </
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1581.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-64)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1581.6" textLength="146.4"
clip-path="url(#breeze-pr-auto-triage-line-64)">--max-num   </text><text
class="breeze-pr-auto-triage-r1" x="195.2" y="1581.6" textLength="793"
clip-path="url(#breeze-pr-auto-triage-line-64)">Maximum number of non-collaborator PRs to
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1606" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-65)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1606" textLength="146.4"
clip-path="url(#breeze-pr-auto-triage-line-65)">--sort      </text><text
class="breeze-pr-auto-triage-r1" x="195.2" y="1606" textLength="414.8"
clip-path="url(#breeze-pr-auto-triage-line-65)">Sort order for PR search results.&
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1630.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-66)">│</text><text
class="breeze-pr-auto-triage-r6" x="195.2" y="1630.4" textLength="622.2"
clip-path="url(#breeze-pr-auto-triage-line-66)">(created-asc|created-desc|updated-asc|updated-desc)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1630.4" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-66)">│</text><text
class="breeze-pr-auto-triage- [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1654.8"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1654.8" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-67)">
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1679.2"
textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-68)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="1679.2" textLength="244"
clip-path="url(#breeze-pr-auto-triage-line-68)"> Assessment options </text><text
class="breeze-pr-auto-triage-r5" x="268.4" y="1679.2" textLength="1171.2"
clip-path="url(#breeze-pr-auto-triage-line-68)">────────────────────────────────────────────────────────────
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1703.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-69)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1703.6" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-69)">--check-mode     </text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1703.6" textLength="1037"
clip-path="url(#breeze-pr-auto-triage-line-69)">Which checks to run: 'both&#x
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1728" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-70)">│</text><text
class="breeze-pr-auto-triage-r5" x="256.2" y="1728" textLength="61"
clip-path="url(#breeze-pr-auto-triage-line-70)">both]</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1728" textLength="158.6"
clip-path="url(#breeze-pr-auto-triage-line-70)">(both|ci|llm)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1728" textLength="12.2" c [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1752.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-71)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1752.4" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-71)">--llm-model      </text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1752.4" textLength="1183.4"
clip-path="url(#breeze-pr-auto-triage-line-71)">LLM model for assessment (f
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1776.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-72)">│</text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1776.8" textLength="268.4"
clip-path="url(#breeze-pr-auto-triage-line-72)">for OpenAI Codex CLI. </text><text
class="breeze-pr-auto-triage-r5" x="524.6" y="1776.8" textLength="427"
clip-path="url(#breeze-pr-auto-triage-line-72)">[default: claude/claude-sonnet-4-6]</text><text
c [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1801.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-73)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1801.2" textLength="1159"
clip-path="url(#breeze-pr-auto-triage-line-73)">>claude/claude-sonnet-4-6< | claude/claude-opus-4-20250514 | claude/claude-sonnet-4-20250514 | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1801.2" textLength="12.2"
clip-path="u [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1825.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-74)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1825.6" textLength="976"
clip-path="url(#breeze-pr-auto-triage-line-74)">claude/claude-haiku-4-5-20251001 | claude/sonnet | claude/opus | claude/haiku | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1825.6" textLength="12.2"
clip-path="url(#breeze-p [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1850" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-75)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1850" textLength="1146.8"
clip-path="url(#breeze-pr-auto-triage-line-75)">codex/gpt-5.3-codex | codex/gpt-5.3-codex-spark | codex/gpt-5.2-codex | codex/gpt-5.1-codex | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1850" textLength="12.2"
clip-path="ur [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1874.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-76)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1874.4" textLength="695.4"
clip-path="url(#breeze-pr-auto-triage-line-76)">codex/gpt-5-codex | codex/gpt-5-codex-mini | codex/gpt-5)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1874.4" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-76)">│</text><text cla [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1898.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-77)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1898.8" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-77)">--llm-concurrency</text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1898.8" textLength="524.6"
clip-path="url(#breeze-pr-auto-triage-line-77)">Number of concurrent LLM assessment calls. </tex
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1923.2"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1923.2" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-78)">
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1947.6"
textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-79)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="1947.6" textLength="195.2"
clip-path="url(#breeze-pr-auto-triage-line-79)"> Action options </text><text
class="breeze-pr-auto-triage-r5" x="219.6" y="1947.6" textLength="1220"
clip-path="url(#breeze-pr-auto-triage-line-79)">────────────────────────────────────────────────────────────────
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1972" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-80)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1972" textLength="183"
clip-path="url(#breeze-pr-auto-triage-line-80)">--answer-triage</text><text
class="breeze-pr-auto-triage-r1" x="231.8" y="1972" textLength="1207.8"
clip-path="url(#breeze-pr-auto-triage-line-80)">Force answer to triage prompts: [d]raft, [c]lose, [r
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1996.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-81)">│</text><text
class="breeze-pr-auto-triage-r6" x="231.8" y="1996.4" textLength="183"
clip-path="url(#breeze-pr-auto-triage-line-81)">(d|c|r|s|q|y|n)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1996.4" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-81)">│</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1996.4" textLength="12 [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="2020.8"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-82)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="2020.8" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-82)">
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="2045.2"
textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-83)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="2045.2" textLength="195.2"
clip-path="url(#breeze-pr-auto-triage-line-83)"> Common options </text><text
class="breeze-pr-auto-triage-r5" x="219.6" y="2045.2" textLength="1220"
clip-path="url(#breeze-pr-auto-triage-line-83)">────────────────────────────────────────────────────────────────
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="2069.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-84)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="2069.6" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-84)">--dry-run</text><text
class="breeze-pr-auto-triage-r7" x="158.6" y="2069.6" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-84)">-D</text><text
class="breeze-pr-auto-triage-r1" x="207.4" y="2069.6" textLength="719.8" [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="2094" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-85)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="2094" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-85)">--verbose</text><text
class="breeze-pr-auto-triage-r7" x="158.6" y="2094" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-85)">-v</text><text
class="breeze-pr-auto-triage-r1" x="207.4" y="2094" textLength="585.6" clip-pa
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="2118.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-86)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="2118.4" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-86)">--help   </text><text
class="breeze-pr-auto-triage-r7" x="158.6" y="2118.4" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-86)">-h</text><text
class="breeze-pr-auto-triage-r1" x="207.4" y="2118.4" tex [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="2142.8"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-87)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="2142.8" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-87)">
</text>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_pr_auto-triage.txt
b/dev/breeze/doc/images/output_pr_auto-triage.txt
index f2d3002dbd2..4bbfb2746b7 100644
--- a/dev/breeze/doc/images/output_pr_auto-triage.txt
+++ b/dev/breeze/doc/images/output_pr_auto-triage.txt
@@ -1 +1 @@
-f32e601513ba3cce3b3f42b5beeae0e5
+5d0f5d66b4acab3d4df1a3667eeda300
diff --git a/dev/breeze/src/airflow_breeze/commands/pr_commands.py
b/dev/breeze/src/airflow_breeze/commands/pr_commands.py
index d1dcee5c863..82403bba909 100644
--- a/dev/breeze/src/airflow_breeze/commands/pr_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/pr_commands.py
@@ -281,6 +281,17 @@ def _resolve_github_token(github_token: str | None) -> str
| None:
return None
+_VIEWER_QUERY = """
+query { viewer { login } }
+"""
+
+
+def _resolve_viewer_login(token: str) -> str:
+ """Resolve the GitHub login of the authenticated user via the viewer
query."""
+ data = _graphql_request(token, _VIEWER_QUERY, {})
+ return data["viewer"]["login"]
+
+
def _graphql_request(token: str, query: str, variables: dict) -> dict:
"""Execute a GitHub GraphQL request. Returns the 'data' dict or exits on
error."""
import requests
@@ -608,11 +619,14 @@ def _fetch_prs_graphql(
created_before: str | None = None,
updated_after: str | None = None,
updated_before: str | None = None,
+ review_requested: str | None = None,
) -> list[PRData]:
"""Fetch a single batch of matching PRs via GraphQL."""
query_parts = [f"repo:{github_repository}", "type:pr", "is:open",
"draft:false"]
if filter_user:
query_parts.append(f"author:{filter_user}")
+ if review_requested:
+ query_parts.append(f"review-requested:{review_requested}")
for label in labels:
query_parts.append(f'label:"{label}"')
for label in exclude_labels:
@@ -1429,6 +1443,13 @@ def _approve_workflow_runs(token: str,
github_repository: str, pending_runs: lis
show_default=True,
help="Only assess PRs that are at least this many commits behind base
branch.",
)
[email protected](
+ "--review-requested",
+ "review_requested",
+ is_flag=True,
+ default=False,
+ help="Only show PRs where review is requested for the authenticated user.",
+)
# --- Pagination and sorting ---
@click.option(
"--batch-size",
@@ -1494,6 +1515,7 @@ def auto_triage(
pending_approval_only: bool,
checks_state: str,
min_commits_behind: int,
+ review_requested: bool,
check_mode: str,
llm_concurrency: int,
llm_model: str,
@@ -1529,6 +1551,12 @@ def auto_triage(
dry_run = get_dry_run()
+ # Resolve --review-requested: resolve to the authenticated user
+ review_requested_user: str | None = None
+ if review_requested:
+ review_requested_user = _resolve_viewer_login(token)
+ get_console().print(f"[info]Filtering PRs with review requested for:
{review_requested_user}[/]")
+
# Split labels into exact (for GitHub search) and wildcard (for
client-side filtering)
from fnmatch import fnmatch
@@ -1555,6 +1583,7 @@ def auto_triage(
created_before=created_before,
updated_after=updated_after,
updated_before=updated_before,
+ review_requested=review_requested_user,
)
# Apply wildcard label filters client-side
diff --git a/dev/breeze/src/airflow_breeze/commands/pr_commands_config.py
b/dev/breeze/src/airflow_breeze/commands/pr_commands_config.py
index 31532e59f23..cd683a7dda4 100644
--- a/dev/breeze/src/airflow_breeze/commands/pr_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/pr_commands_config.py
@@ -45,6 +45,7 @@ PR_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
"--pending-approval-only",
"--checks-state",
"--min-commits-behind",
+ "--review-requested",
],
},
{