Skip to content

feat(BetterGI): 一条龙执行层改为单次启动,按左栏队列顺序执行 - #768

Open
TCddddd wants to merge 6 commits into
AUTO-MAS-Project:devfrom
TCddddd:feat/bettergi-execution-single-launch-v2
Open

TCddddd wants to merge 6 commits into
AUTO-MAS-Project:devfrom
TCddddd:feat/bettergi-execution-single-launch-v2

Conversation

@TCddddd

@TCddddd TCddddd commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

摘要

  • 一条龙执行层改为「切段 + 一次 --startGroups」:按左栏队列顺序把执行层切成若干段,在同一个 BetterGI 进程里顺序执行,省掉一次冷启动,执行顺序也真正听队列。
  • 修复关掉战斗行后仍漏跑到原生一条龙的问题:原生副本的剔除门控改为按 Plan 归属(plan_combat_bases)判断,而不是「是否存在启用项」——界面关掉的行不再悄悄回退到原生副本执行。
  • 修复执行层跑完战斗/自定义项后整轮结果误显示为「未开始运行」的问题:执行层现在会写运行记录,连带恢复历史日志、「统计信息」通知、分步报告与掉落统计。
  • 属用户可见变更,已按 changelog.d/ 规范登记碎片。

说明:本分支基于最新 dev 重做,包含 #766(首领必填校验)的改动——_missing_config_reasons 等辅助函数由该 PR 引入,本分支的「必填配置缺失判负」逻辑依赖它;#766 合入后本 PR 的对应部分会自动从 diff 中消失(GitHub 按 merge-base 计算)。

验证:py_compile 通过;pytest tests/task/test_bettergi_combat_scope.py tests/task/test_bettergi_one_dragon_read_failure.py 8 passed;python scripts/changelog.py check 通过。实机验证待补。

Sourcery 总结

将 BetterGI 一条龙执行层整合为按队列顺序单次启动,并完善任务归属、运行记录和配置缺失时的失败反馈。

新功能:

  • 按左栏队列顺序将战斗与自定义任务组织为执行段,并通过单次 BetterGI 启动按顺序执行。

问题修复:

  • 修复已配置但关闭的战斗项回退到原生一条龙执行的问题。
  • 修复执行层完成后运行结果显示为未开始运行,且缺少历史日志、统计通知、分步报告和掉落统计的问题。
  • 将必填配置缺失明确标记为执行失败,并向用户展示缺失原因。

改进:

  • 统一自定义项配置解析与执行层段生成逻辑,并清理运行异常后残留的临时配置组。

测试:

  • 新增与战斗任务归属及启停状态相关的测试。

杂项:

  • 新增用户可见的变更记录。
Original summary in English

Summary by Sourcery

将 BetterGI 一条龙执行层整合为按队列顺序单次启动,并完善任务归属、运行记录和配置缺失的失败反馈。

New Features:

  • 按左栏队列顺序将战斗与自定义任务组织为执行段,并通过单次 BetterGI 启动顺序执行。

Bug Fixes:

  • 修复已配置但关闭的战斗项回退到原生一条龙执行的问题。
  • 修复执行层完成后运行结果显示为未开始运行且缺少历史日志、统计通知、分步报告和掉落统计的问题。
  • 将必填配置缺失明确标记为执行失败并向用户展示缺失原因。

Enhancements:

  • 统一自定义项配置解析与执行层段生成逻辑,并清理运行异常后残留的临时配置组。

Tests:

  • 新增战斗任务归属与启停状态相关测试。

Chores:

  • 新增用户可见变更记录。
Original summary in English

- main.js 新增战斗步骤必填项前置校验:缺 bossName 时不进 BGI,改打
  MAS_STEP_MISSING_CONFIG 标记并跳过该步,避免落回 AutoBossParam 无参构造
  读取 BGI 全局 autoBossConfig 的旧首领
- AutoProxy 识别该标记判负,并把「自动首领讨伐:未选择首领」推到调度台与日志
原先战斗 4 项(MAS一条龙)与自定义配置组(MAS-{短id}-自定义配置组N)分两次
启动 BetterGI,各自杀进程、启动、监控、收尾;队列顺序也无法跨越这两批。

现改为「切段 + 一次 --startGroups」:
- one_dragon_bridge.build_execution_segments 按左栏队列顺序把执行层切成若干「段」,
  write_execution_groups 每段写一个配置组文件,再由一次
  `--startGroups <段1 段2 ...>` 顺序跑完(BGI 的 OnStartMultiScriptGroupWithNamesAsync
  按传入顺序 foreach 执行)。
- 战斗 4 项整体一段(内部仍由 main.js 按 Plan 编排,保留树脂耗尽短路等批次语义),
  插在队列中第一个被接管的战斗项处;js/pathing/keymouse 类与相邻项合并成段
  (其组级 config 由 MAS 合成、无用户语义);
  scriptgroup 类独立成段 —— BGI 的 Pathing/Shell 项目只读**组级** config
  (ScriptGroupProject.Run 用 GroupInfo.Config.PathingConfig),合并会丢掉
  用户配置组的队伍/自动拾取等设置,故必须保真。
- one_dragon 新增 resolve_custom_group,把「自定义项 → 可执行配置组」的解析
  统一到一处,materialize_user_script_groups 与切段共用,消除重复分支。
- 执行层接管时不再逐项物化,改为把这些项的名字并进 exclude_task_names 从原生
  副本剔除;段组文件与历史残留由 _restore_one_dragon_config /
  cleanup_leftover_execution_groups 清理。
- 删除已被取代的 write_one_dragon_group / remove_one_dragon_group 与
  _run_plan_custom,_run_plan_combat 泛化为 _run_execution_layer(等待所有段的
  执行结束标记)。
- 原生副本剔除战斗组的门控从 plan_mode(是否存在启用项)改为 use_execution_layer +
  Plan 归属:全部战斗行都关掉时 plan_mode 为假,原来战斗项会整体落回原生副本照跑,
  与界面「已关」不符(2026-09-12 实机排障)
- 新增 one_dragon_plan.plan_combat_bases():只看归属(Plan 中配过实例)不看启停,
  与 build_combat_steps() 的分工是「谁负责」与「这次跑谁」
- Plan 中没有实例的战斗组仍留在原生副本,宁可多跑一次也不静默丢任务
- 同步 step-enabled 接口与前端服务层文档:enabled=false 的语义是「本次不跑」,
  不是「退回原生一条龙跑」
- 补单测 tests/task/test_bettergi_combat_scope.py(4 例)
_run_execution_layer 跑完 BetterGI 后不写 log_record:战斗/自定义项全部由执行层完成、
原生一条龙又无启用任务时,整轮结果显示「未开始运行」(UserItem.result 对空记录的兜底),
并且不写历史日志、不发「统计信息」通知、分步报告与掉落统计无数据可解析。

改为执行层启动时新建 log_record 并把执行层日志写进去,收尾按成败写入状态(成功用项目
契约 "Success!",失败写具体原因:命中致命日志 / 进程在结束标记前退出 / 空闲超时 /
执行异常 / 必填配置缺失);同时把 log_start_time / cur_user_log 指向它,使执行层阶段的
on_crash 异常写入与「运行异常」通知也能生效。没有需要接管的段时不建记录。
本 PR 重建到当前 dev 后按新规范登记:碎片固定用 changelog.d/,不再改
CHANGELOG.md 与 res/version.json(重做时已从提交里剔除这两处生成物改动)。

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @TCddddd, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 4 days by commenting @sourcery-ai review. Upgrade to get a review now.

@sourcery-ai

sourcery-ai Bot commented Sep 14, 2026

Copy link
Copy Markdown

审查者指南

本 PR 将 BetterGI 一条龙执行层改为按左栏队列切段、单次启动并顺序执行,同时按 Plan 归属修正战斗项剔除逻辑,补齐执行层运行记录与结果统计链路,并将必填配置缺失从静默跳过改为可见失败。

单次启动 BetterGI 执行流程时序图

sequenceDiagram
    participant AutoProxyTask
    participant one_dragon_bridge
    participant BetterGI
    participant LogMonitor
    participant RunRecord

    AutoProxyTask->>one_dragon_bridge: build_execution_segments()
    one_dragon_bridge-->>AutoProxyTask: execution segment groups in queue order
    AutoProxyTask->>one_dragon_bridge: write_execution_groups()
    AutoProxyTask->>BetterGI: open_process(--startGroups, group_names...)
    BetterGI->>BetterGI: execute segments sequentially
    BetterGI-->>LogMonitor: 配置组执行结束 / MAS_STEP_FAIL / MAS_STEP_MISSING_CONFIG
    LogMonitor->>RunRecord: update content and status
    LogMonitor-->>AutoProxyTask: all groups completed or fatal condition
    AutoProxyTask->>BetterGI: run native one-dragon tasks
Loading

Plan 归属和已禁用战斗项流程图

flowchart TD
    A[Plan contains combat instance] --> B[plan_combat_bases]
    B --> C[Exclude combat base from native one-dragon]
    C --> D{Queue row enabled}
    D -->|Yes| E[build_combat_steps]
    E --> F[Include in execution segment]
    D -->|No| G[Do not execute]
    H[Plan has no combat instance] --> I[Leave combat base in native one-dragon]
Loading

文件级变更

变更 详细信息 文件
将 BetterGI 执行层重构为按左栏队列切分执行段,并通过一次进程启动按顺序运行战斗与自定义项。
  • 新增战斗段、相邻自定义项合成段及独立配置组段的切分规则。
  • 为每个执行段生成临时配置组,并一次性传入多个 --startGroups 参数。
  • 统一自定义项配置解析逻辑,支持用户副本、录制、脚本、路径和现有配置组回退。
  • 在异常或强杀场景清理执行层临时配置组。
app/task/BetterGI/AutoProxy.py
app/task/BetterGI/tools/one_dragon.py
app/task/BetterGI/tools/one_dragon_bridge.py
调整战斗项归属和禁用语义,防止已关闭的 Plan 行回退到原生一条龙执行。
  • 新增按 Plan 是否配置过实例计算战斗组归属,独立于实例启用状态。
  • 原生副本剔除所有已由 Plan 配置过的战斗基组;仅未配置的战斗组保留原生回退。
  • 更新接口注释,明确 Plan 开关关闭表示本次不执行。
app/api/scripts.py
app/task/BetterGI/AutoProxy.py
app/task/BetterGI/tools/one_dragon_plan.py
frontend/src/api/services/BetterGiService.ts
frontend/src/api/services/Service.ts
tests/task/test_bettergi_combat_scope.py
为执行层建立独立运行记录并完善结果、日志和统计链路。
  • 创建并维护执行层 LogRecord,使历史日志、统计通知、分步报告和掉落统计能够读取执行层输出。
  • 按所有执行段完成标记判定成功,区分可跳过的步骤失败、致命日志、进程退出和空闲超时。
  • 统一写入 Success! 或具体失败原因,并在执行层失败时继续原生一条龙日常阶段。
app/task/BetterGI/AutoProxy.py
增加战斗步骤必填配置校验,避免配置缺失时静默跳过并误报成功。
  • 在 MASOneDragon 执行前校验自动首领讨伐的 bossName。
  • 输出包含步骤名和用户可读原因的缺失配置标记。
  • AutoProxy 解析标记并将执行层判负,同时推送明确提示。
app/task/BetterGI/AutoProxy.py
res/templates/BetterGI/MASOneDragon/main.js
changelog.d/fix-bettergi-autoboss-missing-name.fix.md
登记用户可见变更并覆盖战斗归属回归场景。
  • 新增执行层单次启动及首领配置缺失的 changelog 碎片。
  • 增加全关、部分启用、后缀实例及异常输入的 Plan 归属测试。
changelog.d/feat-bettergi-execution-single-launch.change.md
tests/task/test_bettergi_combat_scope.py

提示和命令

与 Sourcery 交互

  • 触发新的审查: 在 pull request 中评论 @sourcery-ai review
  • 继续讨论: 直接回复 Sourcery 的审查评论。
  • 根据审查评论生成 GitHub issue: 回复审查评论,请 Sourcery 根据该评论创建 issue。你也可以在审查评论中回复 @sourcery-ai issue,以根据该评论创建 issue。
  • 生成 pull request 标题: 在 pull request 标题的任意位置写入 @sourcery-ai,即可随时生成标题。你也可以在 pull request 中评论 @sourcery-ai title,以随时重新生成标题。
  • 生成 pull request 摘要: 在 pull request 正文中需要生成摘要的位置写入 @sourcery-ai summary,即可在指定位置随时生成 PR 摘要。你也可以在 pull request 中评论 @sourcery-ai summary,以随时重新生成摘要。
  • 生成审查者指南: 在 pull request 中评论 @sourcery-ai guide,以随时重新生成审查者指南。
  • 解决所有 Sourcery 评论: 在 pull request 中评论 @sourcery-ai resolve,以解决所有 Sourcery 评论。如果你已经处理完所有评论并不想再看到它们,这一功能会很有用。
  • 忽略所有 Sourcery 审查: 在 pull request 中评论 @sourcery-ai dismiss,以忽略所有现有的 Sourcery 审查。如果你想从新的审查开始,这一功能尤其有用——别忘了评论 @sourcery-ai review 以触发新的审查!

自定义你的体验

访问你的控制面板以:

  • 启用或禁用审查功能,例如 Sourcery 生成的 pull request 摘要、审查者指南等。
  • 更改审查语言。
  • 添加、删除或编辑自定义审查说明。
  • 调整其他审查设置。

获取帮助

Original review guide in English

Reviewer's Guide

本 PR 将 BetterGI 一条龙执行层改为按左栏队列切段、单次启动并顺序执行,同时按 Plan 归属修正战斗项剔除逻辑,补齐执行层运行记录与结果统计链路,并将必填配置缺失从静默跳过改为可见失败。

Sequence diagram for the single-launch BetterGI execution flow

sequenceDiagram
    participant AutoProxyTask
    participant one_dragon_bridge
    participant BetterGI
    participant LogMonitor
    participant RunRecord

    AutoProxyTask->>one_dragon_bridge: build_execution_segments()
    one_dragon_bridge-->>AutoProxyTask: execution segment groups in queue order
    AutoProxyTask->>one_dragon_bridge: write_execution_groups()
    AutoProxyTask->>BetterGI: open_process(--startGroups, group_names...)
    BetterGI->>BetterGI: execute segments sequentially
    BetterGI-->>LogMonitor: 配置组执行结束 / MAS_STEP_FAIL / MAS_STEP_MISSING_CONFIG
    LogMonitor->>RunRecord: update content and status
    LogMonitor-->>AutoProxyTask: all groups completed or fatal condition
    AutoProxyTask->>BetterGI: run native one-dragon tasks
Loading

Flow diagram for Plan ownership and disabled combat tasks

flowchart TD
    A[Plan contains combat instance] --> B[plan_combat_bases]
    B --> C[Exclude combat base from native one-dragon]
    C --> D{Queue row enabled}
    D -->|Yes| E[build_combat_steps]
    E --> F[Include in execution segment]
    D -->|No| G[Do not execute]
    H[Plan has no combat instance] --> I[Leave combat base in native one-dragon]
Loading

File-Level Changes

Change Details Files
将 BetterGI 执行层重构为按左栏队列切分执行段,并通过一次进程启动按顺序运行战斗与自定义项。
  • 新增战斗段、相邻自定义项合成段及独立配置组段的切分规则。
  • 为每个执行段生成临时配置组,并一次性传入多个 --startGroups 参数。
  • 统一自定义项配置解析逻辑,支持用户副本、录制、脚本、路径和现有配置组回退。
  • 在异常或强杀场景清理执行层临时配置组。
app/task/BetterGI/AutoProxy.py
app/task/BetterGI/tools/one_dragon.py
app/task/BetterGI/tools/one_dragon_bridge.py
调整战斗项归属和禁用语义,防止已关闭的 Plan 行回退到原生一条龙执行。
  • 新增按 Plan 是否配置过实例计算战斗组归属,独立于实例启用状态。
  • 原生副本剔除所有已由 Plan 配置过的战斗基组;仅未配置的战斗组保留原生回退。
  • 更新接口注释,明确 Plan 开关关闭表示本次不执行。
app/api/scripts.py
app/task/BetterGI/AutoProxy.py
app/task/BetterGI/tools/one_dragon_plan.py
frontend/src/api/services/BetterGiService.ts
frontend/src/api/services/Service.ts
tests/task/test_bettergi_combat_scope.py
为执行层建立独立运行记录并完善结果、日志和统计链路。
  • 创建并维护执行层 LogRecord,使历史日志、统计通知、分步报告和掉落统计能够读取执行层输出。
  • 按所有执行段完成标记判定成功,区分可跳过的步骤失败、致命日志、进程退出和空闲超时。
  • 统一写入 Success! 或具体失败原因,并在执行层失败时继续原生一条龙日常阶段。
app/task/BetterGI/AutoProxy.py
增加战斗步骤必填配置校验,避免配置缺失时静默跳过并误报成功。
  • 在 MASOneDragon 执行前校验自动首领讨伐的 bossName。
  • 输出包含步骤名和用户可读原因的缺失配置标记。
  • AutoProxy 解析标记并将执行层判负,同时推送明确提示。
app/task/BetterGI/AutoProxy.py
res/templates/BetterGI/MASOneDragon/main.js
changelog.d/fix-bettergi-autoboss-missing-name.fix.md
登记用户可见变更并覆盖战斗归属回归场景。
  • 新增执行层单次启动及首领配置缺失的 changelog 碎片。
  • 增加全关、部分启用、后缀实例及异常输入的 Plan 归属测试。
changelog.d/feat-bettergi-execution-single-launch.change.md
tests/task/test_bettergi_combat_scope.py

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

本分支为自洽而包含了 AUTO-MAS-Project#766 的提交(执行层判负逻辑依赖它引入的 _missing_config_reasons),
但「一条 PR 恰好一个碎片」,重复登记会被 CI 判失败。故此处移除该碎片:它在 AUTO-MAS-Project#766 里保留。
待 AUTO-MAS-Project#766 合入后,本分支 rebase 到新的 dev 即可让这段重复代码一并消失。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant