From c8a61068899572721f367894c94334c8f4d6f5f0 Mon Sep 17 00:00:00 2001 From: WhiteElephantIsNotARobot <257136373+WhiteElephantIsNotARobot@users.noreply.github.com> Date: Wed, 28 Jan 2026 14:11:40 +0000 Subject: [PATCH 1/5] fix(server.py): include all reviews in PR context when triggered by review Previously, when triggered by a review or review_comment, only the specific review that triggered the bot was included in reviews_history. This caused the PR context to not contain review information as expected. Now, all reviews are included in the timeline and truncated according to the smart truncation algorithm (3 new, 1 old ratio), which matches the expected behavior described in issue #49. Fixes #49 Co-Authored-By: Claude (mimo-v2-flash) --- server.py | 44 ++++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/server.py b/server.py index 248705e..0af313d 100644 --- a/server.py +++ b/server.py @@ -640,34 +640,26 @@ def build_rich_context( for item in truncated_items: # 根据触发类型决定包含哪些历史 trigger_type = trigger_node.type if trigger_node else None - - # 如果是review或review_comment触发,采用test_context.py的更精确过滤逻辑 + + # 如果是review或review_comment触发,包含所有review和review_comment(按时间线截断) if trigger_type in ["review", "review_comment"]: - # 基于test_context.py修复:只保留与当前review相关的项目 - trigger_review_id = trigger_node.review_id if trigger_node.review_id else trigger_node.id - + # 包含所有review(按时间线截断,而不是只包含当前review) if item.type == "review": - # 只包含当前触发的review(test_context.py的精确过滤) - if item.id == trigger_review_id: - reviews_history.append({ - "id": item.id, - "user": item.user, - "body": item.body, - "state": item.state, - "submitted_at": item.created_at - }) - logger.info(f"Including review {item.id} for review {trigger_review_id}") - elif item.type == "review_comment" and item.review_id: - # 只保留与当前review相关的评论 - if item.review_id == trigger_review_id: - review_comments_batch.append({ - "id": item.id, - "user": item.user, - "body": item.body, - "path": item.path, - "diff_hunk": item.diff_hunk - }) - logger.info(f"Including review comment {item.id} for review {trigger_review_id}") + reviews_history.append({ + "id": item.id, + "user": item.user, + "body": item.body, + "state": item.state, + "submitted_at": item.created_at + }) + elif item.type == "review_comment": + review_comments_batch.append({ + "id": item.id, + "user": item.user, + "body": item.body, + "path": item.path, + "diff_hunk": item.diff_hunk + }) # 对于review触发,不保留普通comment(基于test_context.py逻辑) else: # 普通触发(comment):只处理comment和review,不处理review_comment From a7c51332c787670a7df4afd1ed201236e3493d8f Mon Sep 17 00:00:00 2001 From: WhiteElephantIsNotARobot <257136373+WhiteElephantIsNotARobot@users.noreply.github.com> Date: Wed, 28 Jan 2026 14:29:19 +0000 Subject: [PATCH 2/5] fix(server.py): include review comments when triggered by comment When triggered by a comment (not review/review_comment), now includes: - comments_history (existing) - reviews_history (existing) - review_comments_batch (NEW - was previously excluded) This ensures that when @ mentioning in a comment, the bot receives the latest batch of review information including inline code reviews. Fixes the issue where comment triggers didn't include review_comments. Co-Authored-By: Claude (mimo-v2-flash) --- server.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/server.py b/server.py index 0af313d..dee2bf1 100644 --- a/server.py +++ b/server.py @@ -662,7 +662,8 @@ def build_rich_context( }) # 对于review触发,不保留普通comment(基于test_context.py逻辑) else: - # 普通触发(comment):只处理comment和review,不处理review_comment + # 普通触发(comment):处理comment、review和review_comment + # 这样在comment中@时也能包含最新批次的review信息 if item.type == "comment": comments_history.append({ "id": item.id, @@ -679,6 +680,14 @@ def build_rich_context( "state": item.state, "submitted_at": item.created_at }) + elif item.type == "review_comment": + review_comments_batch.append({ + "id": item.id, + "user": item.user, + "body": item.body, + "path": item.path, + "diff_hunk": item.diff_hunk + }) if comments_history: context.comments_history = comments_history From 04c152575daa5dee0123e38d3011258b9fe1a924 Mon Sep 17 00:00:00 2001 From: WhiteElephantIsNotARobot <257136373+WhiteElephantIsNotARobot@users.noreply.github.com> Date: Wed, 28 Jan 2026 15:19:33 +0000 Subject: [PATCH 3/5] fix(server.py): ensure review batches are not truncated MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Review batches (reviews_history, review_comments_batch) now use the original timeline_items instead of truncated_items - This ensures complete preservation of review information - Only comments_history uses the truncated timeline (3:1 ratio) - Works for both comment trigger and review/review_comment trigger Fixes requirement: "review批次确保不截断,尽量完整保留" Co-Authored-By: Claude (mimo-v2-flash) --- server.py | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/server.py b/server.py index dee2bf1..3ddcb53 100644 --- a/server.py +++ b/server.py @@ -627,7 +627,7 @@ def build_rich_context( # 分离评论历史(基于test_context.py修复review触发过滤逻辑) if timeline_items: logger.info(f"Applying smart truncation to {len(timeline_items)} timeline items (max: {CONTEXT_MAX_CHARS} chars)") - # 智能截断 + # 智能截断(仅用于评论历史) truncated_items, is_truncated = truncate_context_by_chars(timeline_items, CONTEXT_MAX_CHARS) context.is_truncated = is_truncated logger.info(f"Truncation result: {len(truncated_items)} items selected (truncated: {is_truncated})") @@ -637,14 +637,16 @@ def build_rich_context( reviews_history = [] review_comments_batch = [] - for item in truncated_items: - # 根据触发类型决定包含哪些历史 - trigger_type = trigger_node.type if trigger_node else None + # 获取触发类型 + trigger_type = trigger_node.type if trigger_node else None - # 如果是review或review_comment触发,包含所有review和review_comment(按时间线截断) - if trigger_type in ["review", "review_comment"]: - # 包含所有review(按时间线截断,而不是只包含当前review) - if item.type == "review": + # review批次使用原始timeline_items确保完整保留(不截断) + if trigger_type in ["review", "review_comment"]: + # review/review_comment触发:精确过滤,只保留与当前review相关的项目 + trigger_review_id = trigger_node.review_id if trigger_node.review_id else trigger_node.id + + for item in timeline_items: + if item.type == "review" and item.id == trigger_review_id: reviews_history.append({ "id": item.id, "user": item.user, @@ -652,7 +654,8 @@ def build_rich_context( "state": item.state, "submitted_at": item.created_at }) - elif item.type == "review_comment": + logger.info(f"Including review {item.id} for review {trigger_review_id}") + elif item.type == "review_comment" and item.review_id and item.review_id == trigger_review_id: review_comments_batch.append({ "id": item.id, "user": item.user, @@ -660,10 +663,10 @@ def build_rich_context( "path": item.path, "diff_hunk": item.diff_hunk }) - # 对于review触发,不保留普通comment(基于test_context.py逻辑) - else: - # 普通触发(comment):处理comment、review和review_comment - # 这样在comment中@时也能包含最新批次的review信息 + logger.info(f"Including review comment {item.id} for review {trigger_review_id}") + else: + # comment触发:使用truncated_items处理评论,使用原始timeline_items处理review批次 + for item in truncated_items: if item.type == "comment": comments_history.append({ "id": item.id, @@ -672,7 +675,10 @@ def build_rich_context( "created_at": item.created_at, "type": item.type }) - elif item.type == "review": + + # review批次使用原始timeline_items确保完整保留(不截断) + for item in timeline_items: + if item.type == "review": reviews_history.append({ "id": item.id, "user": item.user, @@ -680,7 +686,7 @@ def build_rich_context( "state": item.state, "submitted_at": item.created_at }) - elif item.type == "review_comment": + elif item.type == "review_comment" and item.review_id: review_comments_batch.append({ "id": item.id, "user": item.user, From 9636d6ca21a953e1348ddf3d0aaedc22e423a63d Mon Sep 17 00:00:00 2001 From: WhiteElephantIsNotARobot <257136373+WhiteElephantIsNotARobot@users.noreply.github.com> Date: Wed, 28 Jan 2026 15:32:32 +0000 Subject: [PATCH 4/5] fix(server.py): only include latest review batch in comment trigger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 comment 触发时,只保留最新一次 review 及其相关的 review comments(最新批次),而不是所有历史 reviews。 修改内容: 1. 在 comment 触发分支中,记录最新一次 review 的 ID 2. 只添加与最新 review 相关的 review comments 3. 确保 review 批次不截断,但只包含最新批次 行为对比: | 触发类型 | comments_history | reviews_history | review_comments_batch | |---------|------------------|-----------------|----------------------| | comment | 截断 (3:1) | **最新一次 review** | **最新 review 的 comments** | | review/review_comment | 不包含 | 精确过滤 (当前review) | 精确过滤 (当前review) | Fixes requirement: "最新批次"指最新一次review下的所有条目 --- server.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/server.py b/server.py index 3ddcb53..5cd2448 100644 --- a/server.py +++ b/server.py @@ -677,8 +677,12 @@ def build_rich_context( }) # review批次使用原始timeline_items确保完整保留(不截断) + # 只保留最新一次 review 及其相关的 review comments(最新批次) + latest_review_id = None for item in timeline_items: if item.type == "review": + # 找到最新一次 review(按时间顺序,最后一个是最新) + latest_review_id = item.id reviews_history.append({ "id": item.id, "user": item.user, @@ -686,14 +690,18 @@ def build_rich_context( "state": item.state, "submitted_at": item.created_at }) - elif item.type == "review_comment" and item.review_id: - review_comments_batch.append({ - "id": item.id, - "user": item.user, - "body": item.body, - "path": item.path, - "diff_hunk": item.diff_hunk - }) + + # 只保留与最新 review 相关的 review comments + if latest_review_id: + for item in timeline_items: + if item.type == "review_comment" and item.review_id == latest_review_id: + review_comments_batch.append({ + "id": item.id, + "user": item.user, + "body": item.body, + "path": item.path, + "diff_hunk": item.diff_hunk + }) if comments_history: context.comments_history = comments_history From 274592d5742b6e1449a0dbd88fe72b6ea6a121bb Mon Sep 17 00:00:00 2001 From: WhiteElephantIsNotARobot <257136373+WhiteElephantIsNotARobot@users.noreply.github.com> Date: Wed, 28 Jan 2026 16:32:04 +0000 Subject: [PATCH 5/5] fix(server.py): only include latest review batch in comment trigger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正 comment 触发时的逻辑:只保留最新一次 review 及其相关的 review comments 而不是添加所有 review(之前错误地在循环中直接添加了所有 review) Co-Authored-By: Claude (mimo-v2-flash) --- server.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/server.py b/server.py index 5cd2448..700f53e 100644 --- a/server.py +++ b/server.py @@ -683,13 +683,18 @@ def build_rich_context( if item.type == "review": # 找到最新一次 review(按时间顺序,最后一个是最新) latest_review_id = item.id - reviews_history.append({ - "id": item.id, - "user": item.user, - "body": item.body, - "state": item.state, - "submitted_at": item.created_at - }) + + # 只添加最新一次 review + if latest_review_id: + for item in timeline_items: + if item.type == "review" and item.id == latest_review_id: + reviews_history.append({ + "id": item.id, + "user": item.user, + "body": item.body, + "state": item.state, + "submitted_at": item.created_at + }) # 只保留与最新 review 相关的 review comments if latest_review_id: