Skip to content

fix(BetterGI): 修复合入复查发现的问题 (#498) - #523

Merged
1w1w11w1 merged 8 commits into
AUTO-MAS-Project:devfrom
TCddddd:fix/bettergi-498-issues
Sep 4, 2026
Merged

fix(BetterGI): 修复合入复查发现的问题 (#498)#523
1w1w11w1 merged 8 commits into
AUTO-MAS-Project:devfrom
TCddddd:fix/bettergi-498-issues

Conversation

@TCddddd

@TCddddd TCddddd commented Sep 1, 2026

Copy link
Copy Markdown

Closes #498

基于最新 dev 修复 BetterGI 合入后复查发现的问题:

  • 日志监控改为按日期滚动自动切换当日文件(任务跨零点不再误判超时)
  • 设置会话结束后删除运行时槽位(不再残留到 BGI GUI)
  • 切号脚本缺失仅在上一轮检出也失败时才重建仓库(首次启用不再误删用户已有脚本仓库)
  • MAS 自身已提权时不再重复触发 UAC
  • 多次重试的分步执行报告只取成功轮(不再出现两轮 1/N 重复)
  • 步骤耗时跨零点补一天修正
  • 自定义配置组 enabled 缺失时前后端统一默认启用

注:跨零点日志监控部分与 #510 方案重叠,若 #510 先合入,该部分可忽略。

Sourcery 摘要

修复审查中发现的 BetterGI 集成问题,包括跨午夜监控、权限处理、运行时清理、重试报告、脚本恢复和自定义分组默认值。

错误修复:

  • 通过滚动日志监控并修正跨日期边界的步骤时长,防止跨午夜执行的 BetterGI 任务被错误地判定为超时。
  • 当 MAS 已以提升的权限运行时,避免重复显示 UAC 提示。
  • 设置会话结束后移除 BetterGI 运行时配置槽位;同时在崩溃清理时保留已保存的编辑内容。
  • 防止首次使用时因缺少账号切换脚本而删除现有仓库;仅在重复检出失败后重新构建。
  • 生成分步执行报告时仅使用成功的重试,避免报告轮次重复。
  • 在前端和后端统一将缺失的自定义分组启用值视为已启用。

改进:

  • 集中处理平台权限提升检测,以便应用程序和 BetterGI 任务执行复用。
Original summary in English

Sourcery 总结

修复 BetterGI 集成中与午夜监控、权限、运行时清理、脚本恢复、重试报告和自定义组默认值相关的问题。

错误修复:

  • 修复跨午夜时的 BetterGI 日志监控和步骤耗时计算,避免误报超时。
  • 当 MAS 已经以提升的权限运行时,避免重复弹出 UAC 提示。
  • 设置会话结束后清理 BetterGI 运行时配置槽位,同时在崩溃清理期间保留已保存的编辑内容。
  • 首次使用时避免删除现有脚本仓库,并仅在之前的检出操作失败后重新构建。
  • 生成步骤执行报告时仅使用成功的重试结果,避免重复记录执行轮次。
  • 在前端和后端统一将缺失的自定义组启用值视为已启用。

增强功能:

  • 集中处理平台权限提升检测,以便应用程序和 BetterGI 任务执行复用。
Original summary in English

Sourcery 摘要

修复 BetterGI 集成相关问题,包括跨午夜监控、权限处理、运行时清理、脚本恢复、重试报告和自定义组默认值。

新功能:

  • 添加可配置选项,以管理员权限启动 BetterGI,并提供本地化的界面标签和使用指南。

错误修复:

  • 修复跨午夜时的 BetterGI 日志监控和步骤耗时计算,避免误报超时。
  • 在 MAS 已经以提升权限运行时,避免重复弹出 UAC 提示。
  • 设置会话结束后清理 BetterGI 运行时配置槽位,同时在崩溃清理期间保留已保存的编辑内容。
  • 首次使用时避免删除现有脚本仓库,并且仅在之前的检出操作失败后重新构建仓库。
  • 生成步骤执行报告时仅使用成功的重试结果,避免重复记录执行轮次。
  • 在前端和后端统一将缺少的自定义组启用值视为已启用。

增强功能:

  • 集中处理平台权限提升检测,以便应用程序和 BetterGI 任务执行复用。
Original summary in English

Summary by Sourcery

Fix BetterGI integration issues involving midnight monitoring, privilege handling, runtime cleanup, script recovery, retry reporting, and custom-group defaults.

New Features:

  • Add a configurable option to launch BetterGI with administrator privileges, with localized UI labels and guidance.

Bug Fixes:

  • Fix BetterGI log monitoring and step-duration calculations across midnight to prevent false timeouts.
  • Prevent repeated UAC prompts when MAS is already elevated.
  • Clean up BetterGI runtime configuration slots after settings sessions while preserving saved edits during crash cleanup.
  • Avoid deleting existing script repositories on first use and only rebuild them after a prior checkout failure.
  • Use only the successful retry when generating step execution reports to prevent duplicate rounds.
  • Treat missing custom-group enabled values consistently as enabled across the frontend and backend.

Enhancements:

  • Centralize platform elevation detection for reuse by the application and BetterGI task execution.
Original summary in English
Original summary in English
Original summary in English

@sourcery-ai

sourcery-ai Bot commented Sep 1, 2026

Copy link
Copy Markdown

审查者指南

本 PR 针对 BetterGI 合入后的复查问题进行修复:通过动态日志路径和跨午夜时间修正提升监控与统计准确性,按提权状态启动进程并清理运行时配置,改进切号脚本仓库的渐进式恢复策略,同时修正重试报告及前后端配置组默认值。

BetterGI 按日期滚动日志监控时序图

sequenceDiagram
    participant MAS
    participant LogMonitor
    participant BetterGILog

    MAS->>LogMonitor: start_monitor_file(_build_log_path, start_time)
    LogMonitor->>BetterGILog: read current date log
    Note over LogMonitor,BetterGILog: At midnight, resolve the new daily log path
    BetterGILog-->>LogMonitor: new log lines
    LogMonitor-->>MAS: monitoring continues without false timeout
Loading

BetterGI 运行时槽位清理时序图

sequenceDiagram
    participant MAS
    participant BetterGI
    participant RuntimeSlot

    MAS->>BetterGI: open_process(elevated=not IS_ELEVATED)
    BetterGI-->>MAS: session ends
    MAS->>RuntimeSlot: remove_one_dragon_slot(root_path)
    RuntimeSlot-->>MAS: runtime slot removed
Loading

BetterGI 感知提权状态的进程启动时序图

sequenceDiagram
    participant MAS
    participant ProcessManager
    participant ChildProcess
    participant UAC

    MAS->>MAS: Read IS_ELEVATED
    MAS->>ProcessManager: open_process(elevated=not IS_ELEVATED)
    alt MAS already elevated
        ProcessManager->>ChildProcess: Launch with inherited administrator token
    else MAS not elevated
        ProcessManager->>UAC: Trigger runas elevation
        UAC-->>ChildProcess: Launch elevated process
    end
Loading

BetterGI 切号脚本恢复流程图

flowchart TD
    A[Check switch script directory] --> B{Script directory exists?}
    B -->|Yes| C[Remove stale checkout-failed marker]
    B -->|No| D{Checkout-failed marker exists?}
    D -->|No| E[Create marker and wait for BGI auto-repair]
    D -->|Yes| F[Remove local script repository]
    F --> G[Clear marker and force repository rebuild]
Loading

BetterGI 重试报告选择流程图

flowchart TD
    A[Collect execution runs] --> B{Any successful run?}
    B -->|Yes| C[Select latest successful run]
    B -->|No| D[Select final attempted run]
    C --> E[parse_one_dragon_report]
    D --> E
Loading

BetterGI 自定义配置组启用默认值流程图

flowchart LR
    A[Custom group configuration] --> B{enabled is explicitly false?}
    B -->|Yes| C[Set enabled to false]
    B -->|No| D[Set enabled to true]
Loading

文件级变更

变更 详情 文件
使 BetterGI 日志监控能够跨午夜按日期切换日志文件,并修正跨午夜步骤耗时计算。
  • 将固定日志路径改为动态路径回调,监控器可读取当天日志文件。
  • 跨午夜时为负的步骤时长补加一天。
app/task/BetterGI/AutoProxy.py
app/task/BetterGI/tools/notify.py
完善 BetterGI 进程生命周期与权限处理,避免重复 UAC 和运行时配置残留。
  • 根据 MAS 当前是否已提权决定是否以 runas 启动子进程。
  • 配置会话正常结束或异常退出时清理运行时槽位。
app/task/BetterGI/AutoProxy.py
app/task/BetterGI/ScriptConfig.py
app/utils/platform/__init__.py
调整切号脚本缺失时的仓库恢复策略,避免首次启用误删已有仓库。
  • 首次发现脚本缺失时写入失败标记并等待 BGI 补位。
  • 连续一轮仍缺失时才删除仓库并触发完整重建,脚本恢复后清理标记。
app/task/BetterGI/tools/account_switch.py
修正多次重试的一条龙执行报告选择逻辑。
  • 逐轮解析日志记录,优先使用最近一次成功轮次,否则使用最后一次尝试,避免报告步骤重复。
app/task/BetterGI/AutoProxy.py
统一自定义配置组 enabled 缺省值为启用。
  • 前端仅在 enabled 显式为 false 时禁用配置组,与后端默认行为保持一致。
frontend/src/composables/useBettergiCustomGroups.ts
更新项目版本信息。
  • 调整版本元数据。
res/version.json

可能关联的问题


提示与命令

与 Sourcery 交互

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

自定义使用体验

访问你的控制面板以:

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

获取帮助

Original review guide in English

Reviewer's Guide

本 PR 针对 BetterGI 合入后的复查问题进行修复:通过动态日志路径和跨午夜时间修正提升监控与统计准确性,按提权状态启动进程并清理运行时配置,改进切号脚本仓库的渐进式恢复策略,同时修正重试报告及前后端配置组默认值。

Sequence diagram for BetterGI date-rolling log monitoring

sequenceDiagram
    participant MAS
    participant LogMonitor
    participant BetterGILog

    MAS->>LogMonitor: start_monitor_file(_build_log_path, start_time)
    LogMonitor->>BetterGILog: read current date log
    Note over LogMonitor,BetterGILog: At midnight, resolve the new daily log path
    BetterGILog-->>LogMonitor: new log lines
    LogMonitor-->>MAS: monitoring continues without false timeout
Loading

Sequence diagram for BetterGI runtime slot cleanup

sequenceDiagram
    participant MAS
    participant BetterGI
    participant RuntimeSlot

    MAS->>BetterGI: open_process(elevated=not IS_ELEVATED)
    BetterGI-->>MAS: session ends
    MAS->>RuntimeSlot: remove_one_dragon_slot(root_path)
    RuntimeSlot-->>MAS: runtime slot removed
Loading

Sequence diagram for BetterGI elevation-aware process launch

sequenceDiagram
    participant MAS
    participant ProcessManager
    participant ChildProcess
    participant UAC

    MAS->>MAS: Read IS_ELEVATED
    MAS->>ProcessManager: open_process(elevated=not IS_ELEVATED)
    alt MAS already elevated
        ProcessManager->>ChildProcess: Launch with inherited administrator token
    else MAS not elevated
        ProcessManager->>UAC: Trigger runas elevation
        UAC-->>ChildProcess: Launch elevated process
    end
Loading

Flow diagram for BetterGI switch-script recovery

flowchart TD
    A[Check switch script directory] --> B{Script directory exists?}
    B -->|Yes| C[Remove stale checkout-failed marker]
    B -->|No| D{Checkout-failed marker exists?}
    D -->|No| E[Create marker and wait for BGI auto-repair]
    D -->|Yes| F[Remove local script repository]
    F --> G[Clear marker and force repository rebuild]
Loading

Flow diagram for selecting the BetterGI retry report

flowchart TD
    A[Collect execution runs] --> B{Any successful run?}
    B -->|Yes| C[Select latest successful run]
    B -->|No| D[Select final attempted run]
    C --> E[parse_one_dragon_report]
    D --> E
Loading

Flow diagram for BetterGI custom-group enabled defaults

flowchart LR
    A[Custom group configuration] --> B{enabled is explicitly false?}
    B -->|Yes| C[Set enabled to false]
    B -->|No| D[Set enabled to true]
Loading

File-Level Changes

Change Details Files
使 BetterGI 日志监控能够跨午夜按日期切换日志文件,并修正跨午夜步骤耗时计算。
  • 将固定日志路径改为动态路径回调,监控器可读取当天日志文件。
  • 跨午夜时为负的步骤时长补加一天。
app/task/BetterGI/AutoProxy.py
app/task/BetterGI/tools/notify.py
完善 BetterGI 进程生命周期与权限处理,避免重复 UAC 和运行时配置残留。
  • 根据 MAS 当前是否已提权决定是否以 runas 启动子进程。
  • 配置会话正常结束或异常退出时清理运行时槽位。
app/task/BetterGI/AutoProxy.py
app/task/BetterGI/ScriptConfig.py
app/utils/platform/__init__.py
调整切号脚本缺失时的仓库恢复策略,避免首次启用误删已有仓库。
  • 首次发现脚本缺失时写入失败标记并等待 BGI 补位。
  • 连续一轮仍缺失时才删除仓库并触发完整重建,脚本恢复后清理标记。
app/task/BetterGI/tools/account_switch.py
修正多次重试的一条龙执行报告选择逻辑。
  • 逐轮解析日志记录,优先使用最近一次成功轮次,否则使用最后一次尝试,避免报告步骤重复。
app/task/BetterGI/AutoProxy.py
统一自定义配置组 enabled 缺省值为启用。
  • 前端仅在 enabled 显式为 false 时禁用配置组,与后端默认行为保持一致。
frontend/src/composables/useBettergiCustomGroups.ts
更新项目版本信息。
  • 调整版本元数据。
res/version.json

Possibly linked issues


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

@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.

你好——我已经审阅了你的更改,整体看起来很棒!

Sourcery 评估

需要人工审阅。 如果权限提升检查存在错误,BetterGI 可能会使用非预期的管理员令牌启动,或无法请求所需的 UAC 提权,从而改变子进程的权限边界。如果重试标记被错误触发,代码可能会删除本地脚本仓库;撤销此更改可以阻止后续删除,但无法恢复已经被删除的文件。


Sourcery 对开源项目免费——如果你喜欢我们的审阅,请考虑分享给他人 ✨
帮我变得更有用!请在每条评论上点击 👍 或 👎,我会利用你的反馈来改进审阅结果。
Original comment in English

Hey - I've reviewed your changes and they look great!

Sourcery assessment

Needs a human reviewer. If the elevation check is wrong, BetterGI may launch with an unintended administrator token or fail to request the required UAC elevation, changing the child process's privilege boundary. If the retry marker is triggered incorrectly, the code can remove the local script repository; reverting would stop future deletions but would not restore files already removed.


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@qiyinxi

qiyinxi commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

用四个不同模型分头审了一遍,两位各自在临时目录里实跑了切号恢复和报告取轮的模拟。按改动项给结论:

1. 切号脚本恢复(#498 第 3 项)—— 建议重做

  • 标记方案只是把删仓库推迟了一轮:实测第 1 次调用只写标记,第 2 次调用(下一个用户、或第二天)就 rmtree 整个 Repos/bettergi-scripts-list,用户其他订阅脚本一起没了。account_switch.py:257-262
  • 首轮仍然带着缺失的脚本 --startGroups 启动,_UPDATE_REPO_BEFORE_RUN=False 又不会在 CLI 启动前同步,相对 base 少了唯一的强制手段;而 AutoProxy.py:531-533 推给调度台的仍是「已强制 BGI 启动时重新检出」,与代码不符。
  • 「标记存在」并不等于「上一轮检出失败」:两个用户几分钟内先后切号,B 一次机会都没有就触发删库;ensure_switch_subscriptionAutoProxy.py:505)在 kill_managed_process(L545)之前调用,上一轮 BGI 可能还在后台克隆,这时 rmtree 会打断它。
  • 从未克隆过仓库时 if repo_dir.is_dir() 挡住 rmtree,标记在两个状态间来回翻转,没有任何提示。
  • 标记文件放在 BGI 自己枚举 JS 脚本的 User/JsScript/ 里,BGI 重装即丢;MAS 自有目录有现成模式(one_dragon.py:250 per_user_one_dragon_path 用的 data/{script_id}/...)。
  • 函数 docstring(account_switch.py:231-243)、模块 docstring L32-35、AutoProxy.py:525-526 仍描述旧的「缺失即强制重建」。

一个可行方向:标记只在本次启动 BGI、并且 on_switch_log 观察到脚本缺失导致的失败之后再写,删库前再校验一次脚本仍不存在;或者干脆不删库,缺失时只订阅并等 BGI 后台补位、超时报错。

2. 日志监控两处 hunk(AutoProxy.py:437/612)—— 建议直接丢弃
#510 冲突(#510 已把 _build_log_path 改名为 _resolve_log_file_path 并删除 script_log_path,先合入的话这两行会 AttributeError),而且缺 #510 额外修的「切换后刷新 last_callback_time 基准日期」——不补那一行,BGI 无日期的时间格式在跨零点首行仍会被归到前一天、概率性误判超时。等 #510 合入后 rebase 即可。

3. 会话槽位清理 —— 可以接受
幂等成立,use_mas_config=False 不误删。#498 附带提到的「用户自己有一份『MAS独立配置』会被覆盖再删掉」本 PR 之后仍成立(既有问题,非本 PR 引入)。

4. 提权 —— 可以接受,两条建议
正式运行时 main.py:151 已强制 MAS 提权,已提权的父进程再 runas 本来就不弹 UAC,所以「重复触发 UAC」并不存在;改动的真实效果是提权时改走普通子进程分支(持有句柄),两条分支对 target_process 都做 search_process,无副作用。IS_ELEVATEDmain.py:65is_admin() 是同一个 ctypes 调用,建议 is_admin() 直接返回它。#498 第 4 项真正要定的「非管理员运行时是否给开关」仍未定。

5. 分步报告取轮 —— 可以接受,一条可选
成功即 break,「最后一个 Success 轮」逻辑成立。注释「逐轮解析后优先取成功轮」与代码不符。末轮在打出 一条龙任务执行 前就失败时 parse_one_dragon_report 返回 None,整块分步表会被省略,base 至少还能显示前几轮;可改为回退取最后一个能解析出步骤的轮次。

6. _step_duration 跨零点、前端 enabled 默认值 —— 可以接受(实测 23:59:30→00:00:301分0秒)。

流程

验证(独立 venv,Python 3.12,Windows):pytest tests --collect-only -q 退出码 0(364 项);全量 tests 360 passed / 1 failed,失败的 test_maa_config_overrides.py::test_activity_fight_preserves_native_options 在 dev 上同样失败;ruff check 通过。

总评:第 3-6 项可合,第 2 项让给 #510,第 1 项(切号恢复)需要重做后再合。

@qiyinxi

qiyinxi commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

把上面第 1、2 条和几处小项直接改好了,提到你分支上的 PR:TCddddd#1(三个提交各自独立,可以只取一部分)。

要点:标记改为「本轮 BGI 确已启动并退出、脚本仍缺失」时才写,放在 MAS 自己的 data/{script_id}/ 下;是否删仓库改在杀掉旧 BGI 之后单独判断,首次启用、用户误删、BGI 启动失败都不会在第一轮删 Repos/bettergi-scripts-list。日志监控两处改回固定路径,交由 #510。模拟脚本与全量测试结果写在那个 PR 里。

@1w1w11w1

1w1w11w1 commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

复查小结(#523,基于 #498 逐条核对)

审查范围:origin/dev...63050a30(7 文件,+95/−21)。总体判断:7 项修复大多正确、与 issue 对得上,但有 2 处建议合入前处理、2 处需留意。

Standards(标准轴)

硬违规(建议合入前修改)

  • res/version.json changelog 条目不合规:AGENTS.md 要求一条 PR 一条记录、用一句最简洁的用户可感知的话概括、写症状不写根因。当前条目是枚举内部机制的流水句(「改为按日期滚动自动切换当日文件」「仅在上一轮检出也失败时才重建仓库」「分步执行报告只取成功轮」等)。建议压缩成一句症状,例如:BetterGI专项 修复一条龙跨零点运行被误判超时、重试后执行报告出现两轮重复、以及设置会话结束后 BGI GUI 残留运行时配置槽位的问题

判断项

  • app/utils/platform/__init__.py 新增 _is_elevated()main.py:is_admin() 重复实现同一 IsUserAnAdmin() 检测,且非 Windows 行为分叉(main 返回 True,新代码返回 False)。建议收敛成一个共享 helper。
  • _checkout_failed_marker(root_path) 返回 Path 却命名像动作,建议改为 _checkout_failed_marker_path

Spec(规格轴)

实现风险(建议合入前处理)

  • 崩溃路径删槽位丢编辑:ScriptConfig.on_crash 直接 remove_one_dragon_slot,而快照只在 final_task 且非崩溃时执行;崩溃时用户本轮在 BGI GUI 里的编辑(尚未固化到 per-user 副本)会被直接删除。建议删除前先 _snapshot_one_dragon_config()
  • _step_duration 跨零点 +86400:对乱序/异常数据会把原本被 max(0, total) 夹到 0 的负值报成约 24h。可接受,留意即可。

部分实现

  • elevated 只修了一半:只跳过「MAS 已提权」分支;MAS 非提权时仍弹 UAC,无人值守任务仍可能挂在 search_process(..., 60s) 上,issue 建议的开关未加。
  • item 2 附带:用户已存在的同名「MAS独立配置」被先覆盖再删的窄路径仍未处理。

越界(scope creep):未发现明显越界,7 个改动文件均对应 spec 条目。

验证正确:日志监控改传可调用对象(跨零点切换当日文件)、切号脚本缺失的 marker 重建逻辑(首次启用不误删仓库)、成功轮分步报告、前端 enabled 缺失默认启用与后端对齐——均正确。


以上为两轴独立审查结论(Standards / Spec),供合入前参考。

TCddddd and others added 2 commits September 3, 2026 21:23
…t#498)

- log monitor: pass callable log path so daily-rolling logs switch across midnight
- ScriptConfig: remove runtime slot after config session (final_task & on_crash)
- account_switch: only rebuild repo when previous checkout also failed
- open BetterGI with elevated only when MAS itself is not elevated
- step report: pick success run when retries happened (no duplicated 1/N)
- notify: add one day when step duration crosses midnight
- frontend/backend: unify enabled default for custom groups
@1w1w11w1
1w1w11w1 force-pushed the fix/bettergi-498-issues branch from c288722 to 0d0b724 Compare September 3, 2026 13:25
按 qiyinxi/1w1w11w1 复查意见系统落地 AUTO-MAS-Project#523 剩余修订:

- account_switch: 切号脚本恢复重做。检出失败标记改放 MAS 自有 data/{script_id}/,
  仅当切号结束(BGI 确实启动并退出后)脚本仍缺失才写入;rmtree 中央仓库的判断
  移到杀掉旧 BGI 进程之后单独执行(rebuild_script_repo_if_checkout_failed);
  ensure_switch_subscription 不再删除任何东西。首次启用/用户误删/BGI 启动失败
  都不会在第一轮删掉整个 Repos/bettergi-scripts-list。
- AutoProxy: 杀进程后接入 rebuild、切号结束接入 record_switch_checkout_result;
  分步报告无成功轮时回退取第一个能解析出步骤的轮次,避免末轮失败而整块省略;
  清理不再使用的 script_log_path 死代码。
- LogMonitor: 日志文件跨零点切换时刷新 strptime 基准日期 last_callback_time,
  避免新文件首行被归到 24 小时前而被 check_log 误判超时。
- version.json: changelog 精简为一句并补充 by 署名。

修复经状态机模拟验证通过(首次不删库/记录标记/次轮重建/脚本就绪清标记/误删不删库)。
AUTO-MAS-Project#498 二.4 完整诉求:三处硬编码提权改为受 BetterGIConfig.Run.UseAdmin 控制。

- 后端: BetterGIConfig 新增 Run.UseAdmin(Bool 默认 True,贴近旧行为)。
- AutoProxy 两处与 ScriptConfig 一处 open_process 的 elevated 改为
  use_admin and not IS_ELEVATED:MAS 已提权时即使开启也不重复弹 UAC;
  用户可关闭以在无人值守任务下避免授权弹窗挂起。
- 前端: BetterGIScriptEdit.vue 运行配置区新增开关,i18n 三语词条。
- changelog 并入现有单条。
@1w1w11w1

1w1w11w1 commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

本地验证记录(凭据函数)+ 已上提交的管理员提权开关

tests/AGENTS.md:凭据函数属功能边界测试,测试文件不随 PR 提交,本地运行结果附于 PR 正文。

凭据相关函数本地验证(#498 提到的"凭据函数零测试")

在本地编写并运行脱敏/凭据函数验证:9 passed(pytest 2.64s),测试文件已从工作区清理、未提交。

  • mask_account:手机号 13812345678 → 138******78、邮箱 11abc1@919.com → 11****1@919.com、本地部分过短原样返回、第三方登录(如 apple)原样返回(不误打码)、空值处理
  • resolve_switch_settings:官服/国际服服务器映射、B服 强制「键鼠切换」模式、未知服务器兜底官服
  • write_switch_group / scrub_switch_group:写入明文账号/密码后脱敏把 password 置空、username 还原为打码;配置组缺失时静默返回不崩溃

上一刷新提交 b6d260f2:管理员提权开关

  • 后端 BetterGIConfig.Run.UseAdmin(Bool,默认 True 贴近旧行为)
  • AutoProxy/ScriptConfig 三处提权改为 use_admin and not IS_ELEVATED(MAS 已提权时不重复弹 UAC;用户可关闭以便无人值守任务不挂在授权上)
  • 前端 BetterGIScriptEdit 新增开关 + i18n 三语;oxlintvue-tsc 通过

AUTO-MAS-Project#498 二.2 附带窄路径:用户已存在一份名为「MAS独立配置」的配置(但当前选择其它配置名)时,运行时槽位机制会覆盖该配置,会话结束又删除它,造成用户配置丢失。

- one_dragon: 写槽位前若该位置已存在且非 MAS 占用(无 owner 标记),先把用户配置备份到 data/{script_id}/.mas_slot_backup.json;remove_one_dragon_slot 结束时有备份则恢复原内容,否则删除槽位。owner 标记(.mas_slot_owner)区分「MAS 运行时槽位」与「用户同名配置」,异常残留也能在下轮覆盖后自愈。
- AutoProxy / ScriptConfig: remove_one_dragon_slot 调用补传 script_id。
- 本地验证三场景通过:用户同名配置恢复、普通场景删除、MAS 残留删除。
@1w1w11w1
1w1w11w1 merged commit 374bc3e into AUTO-MAS-Project:dev Sep 4, 2026
2 checks passed
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.

3 participants