codebee 0.1.83 → 0.1.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,10 @@ README 元数据带回,供老版本在「发现新版本」时展示新版更
6
6
 
7
7
  ## 未发布
8
8
 
9
+ ## v0.1.84(2026-10-05)
10
+
11
+ - **代码评审新增「越范围变更提醒」**:计划锚定了涉及文件的任务,实现轮若动了清单之外的文件,评审员会被点名提醒核对(连带改动属正常、凭空多改要点出)——无人值守任务更难悄悄跑偏。纯提示词指引,不改变通过判定;旧计划/手动任务未锚定文件时不生效。
12
+
9
13
  ## v0.1.83(2026-10-05)
10
14
 
11
15
  - **用量统计模型名不再分裂**:同一模型不同大小写(如 GLM-5.3-Flash 与 glm-5.3-flash)在台账倒序读入时 2:2 平局会随机拆成两行——平局裁断补第三序(大写字母数),统计视图稳定归一。
package/README.md CHANGED
@@ -33,10 +33,9 @@ Trae Agent、OpenClaw……),提供
33
33
  ---
34
34
 
35
35
  <!-- relnotes:start -->
36
- ### 最新版更新内容(v0.1.83)
36
+ ### 最新版更新内容(v0.1.84)
37
37
 
38
- - 用量统计模型名不再分裂:同一模型不同大小写写法稳定归一成一行,不再随台账读入顺序随机拆两行
39
- - 测试面存量红清账六件:建书对账/发布门禁等改版后的滞后断言全部跟上,全量 2143 项零新增红
38
+ - 代码评审新增「越范围变更提醒」:实现轮动了计划锚定文件之外的文件时,评审员会被点名核对——无人值守任务更难悄悄跑偏
40
39
  <!-- relnotes:end -->
41
40
 
42
41
 
@@ -1029,13 +1029,64 @@ def _review_depth_note(diff):
1029
1029
  return ""
1030
1030
 
1031
1031
 
1032
- def _run_review(run_id, task, workdir, reviewer, ev):
1032
+ def _norm_rel(path):
1033
+ """归一成仓库相对 posix 路径:反斜杠转正斜杠、剥 ./ 前缀。"""
1034
+ s = str(path or "").replace("\\", "/").strip()
1035
+ return s[2:] if s.startswith("./") else s
1036
+
1037
+
1038
+ def _plan_scope_files(subtasks):
1039
+ """计划全步骤涉及文件并集(保持出现顺序去重)。计划未锚定 files(旧计划/
1040
+ 手动/快路径)返回空列表——越范围检测无从对照即静默跳过。"""
1041
+ out = []
1042
+ for sub in subtasks or []:
1043
+ for f in (sub or {}).get("files") or []:
1044
+ key = str(f)
1045
+ if key and key not in out:
1046
+ out.append(key)
1047
+ return out
1048
+
1049
+
1050
+ def _scope_note(scope_files, changed_files):
1051
+ """越范围编辑提醒(agent-delegate 借鉴):计划锚定了涉及文件,而实际变更
1052
+ 超出声明清单时,点名请评审员核对是否计划外改动。文件型/目录型声明(以 /
1053
+ 结尾)都按「相等或位于其下」匹配;清单外文件只在提醒里点名,不改 pass
1054
+ 判定语义;计划未锚定文件(changed_files=None)不猜范围不提醒。"""
1055
+ declared = []
1056
+ for f in scope_files or []:
1057
+ s = _norm_rel(f)
1058
+ if s and s not in declared:
1059
+ declared.append(s)
1060
+ if not declared or changed_files is None:
1061
+ return ""
1062
+ outside = []
1063
+ for p in changed_files or []:
1064
+ s = _norm_rel(p)
1065
+ if not s or s in outside:
1066
+ continue
1067
+ if not any(s == d or s.startswith(d if d.endswith("/") else d + "/")
1068
+ for d in declared):
1069
+ outside.append(s)
1070
+ if not outside:
1071
+ return ""
1072
+ return ("\n\n## 越范围变更提醒\n计划声明的涉及文件:%s。本次变更还动了清单之外的:%s"
1073
+ "——请核对这些改动是否任务必需(公共依赖连带属正常,凭空多改要点出);"
1074
+ "若属计划锚定疏漏请如实说明,不要仅因此给 blocker。"
1075
+ % ("、".join("`%s`" % d for d in declared[:10]),
1076
+ "、".join("`%s`" % p for p in outside[:8])))
1077
+
1078
+
1079
+ def _run_review(run_id, task, workdir, reviewer, ev, scope_files=None):
1033
1080
  diff = _git_diff(workdir)
1034
1081
  prompt = (CODE_REVIEW_PROMPT
1035
1082
  .replace("__GOAL__", task["goal"])
1036
1083
  .replace("__VERIFY__", task.get("verify_command") or "(未配置)")
1037
1084
  .replace("__DIFF__", diff or "(无法获取 git diff,请综合任务目标谨慎评审)"))
1038
1085
  prompt += _review_depth_note(diff)
1086
+ if scope_files:
1087
+ from . import gitmod
1088
+ changed = [f.get("path") for f in (gitmod.collect_changes(workdir).get("files") or [])]
1089
+ prompt += _scope_note(scope_files, changed)
1039
1090
  if task.get("context"):
1040
1091
  prompt += "\n\n## 原始背景与附件要求\n" + task["context"]
1041
1092
  res = _run_step(run_id, "review", reviewer, prompt, workdir, readonly=True, ev=ev,
@@ -1654,7 +1705,8 @@ def _run_code(run, task, agents, ev, stats, mode):
1654
1705
  else:
1655
1706
  verify_fail_streak[0] = 0
1656
1707
  # 先让确定性验证落盘,再执行模型评审;终态判断会同时使用两份证据。
1657
- review_json = _run_review(run_id, task, workdir, modelhub.bind_agent(reviewer, difficulty), ev)
1708
+ review_json = _run_review(run_id, task, workdir, modelhub.bind_agent(reviewer, difficulty), ev,
1709
+ scope_files=_plan_scope_files(subtasks))
1658
1710
  return review_json, verify_pass, verify_ran
1659
1711
 
1660
1712
  verify_fail_streak = [0] # gate:verify 连败计数(>=2 轮恢复评审参与诊断)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codebee",
3
- "version": "0.1.83",
3
+ "version": "0.1.84",
4
4
  "description": "CodeBee · 多智能体编排台 — 统一编排本机 AI 编码 CLI(Codex / Claude Code / QwenCode / OpenCode / Aider…):目标→拆解→路由→执行→验证→跨厂商评审→修复→报告。纯 Python 标准库实现,本地 Web UI。",
5
5
  "license": "MIT",
6
6
  "bin": {