Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
722ebc7
feat(BetterGI): 新增更好的原神脚本专项适配,支持原生 GUI 直控与一条龙任务
TCddddd Aug 19, 2026
670eb89
feat(BetterGI): 重构用户配置界面,新增一条龙配置组与游戏配置
TCddddd Aug 20, 2026
305a291
fix(BetterGI): 一条龙配置组改为开关语义,关闭组保留定义而非删除
TCddddd Aug 21, 2026
daf7099
style(BetterGI): 调整脚本页游戏配置区块位置,用户页任务配置标题与文案
TCddddd Aug 21, 2026
8c5eef0
feat(BetterGI): 新增一条龙队伍与战斗策略字段及下拉选项
TCddddd Aug 21, 2026
4de9239
feat(BetterGI): 新增自定义配置组管理与「一条龙名称」改名
TCddddd Aug 21, 2026
5dee068
style(BetterGI): 任务配置组按钮居左,自定义配置组头部与 UID 提示优化
TCddddd Aug 22, 2026
288a46a
fix(BetterGI): 独立配置覆盖前备份/结束后还原、切号后脱敏凭据
TCddddd Aug 25, 2026
d752d86
refactor(BetterGI): 拆分用户编辑页,抽出自定义配置组与原生 GUI 会话 composable
TCddddd Aug 25, 2026
b84e1f7
merge: 同步 upstream/dev (v5.4.0) 到 feat/bettergi-adapter
TCddddd Aug 25, 2026
7c130c8
refactor(BetterGI): 切换账号改用 BetterGI 脚本仓库订阅机制,移除 MAS 内置冻结副本
TCddddd Aug 25, 2026
3d3720f
fix(BetterGI): 修正一条龙完成判定,避免在多任务进度中途提前强杀 BetterGI
TCddddd Aug 25, 2026
205b086
feat(BetterGI): 切换账号脚本仓库渠道固定为 CNB(cnb.cool) 镜像
TCddddd Aug 25, 2026
8218e65
feat(BetterGI): 新增更好的原神脚本专项适配,支持原生 GUI 直控与一条龙任务
TCddddd Aug 19, 2026
0e774f7
feat(BetterGI): 重构用户配置界面,新增一条龙配置组与游戏配置
TCddddd Aug 20, 2026
4affab4
fix(BetterGI): 一条龙配置组改为开关语义,关闭组保留定义而非删除
TCddddd Aug 21, 2026
29da459
style(BetterGI): 调整脚本页游戏配置区块位置,用户页任务配置标题与文案
TCddddd Aug 21, 2026
207e4ae
feat(BetterGI): 新增一条龙队伍与战斗策略字段及下拉选项
TCddddd Aug 21, 2026
99c3851
feat(BetterGI): 新增自定义配置组管理与「一条龙名称」改名
TCddddd Aug 21, 2026
50c14d6
style(BetterGI): 任务配置组按钮居左,自定义配置组头部与 UID 提示优化
TCddddd Aug 22, 2026
2e580e7
fix(BetterGI): 独立配置覆盖前备份/结束后还原、切号后脱敏凭据
TCddddd Aug 25, 2026
b20ecd8
refactor(BetterGI): 拆分用户编辑页,抽出自定义配置组与原生 GUI 会话 composable
TCddddd Aug 25, 2026
b1f0946
refactor(BetterGI): 切换账号改用 BetterGI 脚本仓库订阅机制,移除 MAS 内置冻结副本
TCddddd Aug 25, 2026
26e3110
fix(BetterGI): 修正一条龙完成判定,避免在多任务进度中途提前强杀 BetterGI
TCddddd Aug 25, 2026
32e1a17
feat(BetterGI): 切换账号脚本仓库渠道固定为 CNB(cnb.cool) 镜像
TCddddd Aug 25, 2026
26d959d
feat(BetterGI): 切换账号期间转述脚本仓库下载/更新进展到调度台
TCddddd Aug 25, 2026
51f4b99
feat(BetterGI): 误删/初次使用脚本缺失时强制 BGI 重建并重新下载
TCddddd Aug 25, 2026
d702b00
feat(BetterGI): 切队配置错误给出明确报错(战斗队伍名未找到)
TCddddd Aug 25, 2026
c64c9cb
feat(BetterGI): 通用战斗队伍同时作用于首领讨伐/地脉花/幽境危战
TCddddd Aug 25, 2026
e435943
feat(BetterGI): 通用战斗策略同样作用于秘境/地脉花/幽境危战
TCddddd Aug 25, 2026
272ff87
fix(BetterGI): 仅以「一条龙和配置组任务结束」判整条完成,修复切换账号配置组误判成功而中途杀进程
TCddddd Aug 26, 2026
247614f
fix(BetterGI): 移除 [ERR] 进程级误判,恢复任务级异常跳过语义,避免跑得完的一条龙被强杀
TCddddd Aug 26, 2026
697d006
feat(BetterGI): 用户独立配置落到 MAS 专属槽位,BGI 同名一条龙实配全程零接触
TCddddd Aug 26, 2026
c614a3d
fix(BetterGI): 独立配置快照改读 MAS 槽位 + 自定义配置组下拉读槽位
TCddddd Aug 26, 2026
a76281b
fix(BetterGI): 修复缓存缺失时种子退化 + 新增配置名下拉端点
TCddddd Aug 27, 2026
220595c
feat(BetterGI): 任务配置 UI 引导 + 一条龙名称下拉必填
TCddddd Aug 27, 2026
5870c64
Merge branch 'feat/bettergi-adapter' of https://github.com/TCddddd/AU…
TCddddd Aug 28, 2026
7f42110
fix(BetterGI): 修复 PR 审查 9 处问题
TCddddd Aug 28, 2026
4d3180e
fix(core): 用 LazyProxy 修复模块级 __getattr__ 下 Config/System 裸名 NameError
TCddddd Aug 31, 2026
8bf37c7
feat(BetterGI): 统计通知加入一条龙分步执行报告 + 失败可见提示 + 冻结预更新
TCddddd Aug 31, 2026
b212ee3
Merge branch 'dev' of github.com:AUTO-MAS-Project/AUTO-MAS into feat/…
TCddddd Aug 31, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 123 additions & 0 deletions app/api/scripts.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
from fastapi.responses import FileResponse

from app.core import Config
from app.models.config import BetterGIConfig as RuntimeBetterGIConfig
from app.models.config import HSRConfig as RuntimeHSRConfig
from app.models.config import MaaFWConfig as RuntimeMaaFWConfig
from app.models.config import OkNteConfig as RuntimeOkNteConfig
Expand Down Expand Up @@ -62,6 +63,15 @@ def _hsr_script_config(script_id: str):
return script_config


def _bettergi_script_config(script_id: str):
"""Resolve a BetterGI script and reject cross-type IDs before domain access."""

script_config = Config.ScriptConfig[uuid.UUID(script_id)]
if not isinstance(script_config, RuntimeBetterGIConfig):
raise TypeError("脚本配置类型错误, 不是 BetterGI 类型")
return script_config


def _hsr_user_config(script_config: RuntimeHSRConfig, user_id: str):
user_config = script_config.UserData[uuid.UUID(user_id)]
return user_config
Expand Down Expand Up @@ -145,6 +155,7 @@ def _maafw_update_source_config(script_config: RuntimeMaaFWConfig) -> dict[str,
"OkwwConfig": OkwwConfig,
"OkNteConfig": OkNteConfig,
"HSRConfig": HSRConfig,
"BetterGIConfig": BetterGIConfig,
}
USER_BOOK = {
"MaaConfig": MaaUserConfig,
Expand All @@ -156,6 +167,7 @@ def _maafw_update_source_config(script_config: RuntimeMaaFWConfig) -> dict[str,
"OkwwConfig": OkwwUserConfig,
"OkNteConfig": OkNteUserConfig,
"HSRConfig": HSRUserConfig,
"BetterGIConfig": BetterGIUserConfig,
}


Expand Down Expand Up @@ -1133,6 +1145,117 @@ async def get_hsr_stage_options_api(
)


@router.get(
"/bettergi/strategies",
tags=["BetterGI"],
summary="获取 BetterGI 自动战斗策略选项",
response_model=ComboBoxOut,
status_code=200,
)
async def get_bettergi_strategies_api(scriptId: str) -> ComboBoxOut:
"""返回 BetterGI 可用自动战斗策略:内置「根据队伍自动选择」+ ``{RootPath}/User/AutoFight/*.txt`` 文件名。"""

try:
script_config = _bettergi_script_config(scriptId)
root = Path(script_config.get("Info", "RootPath")).expanduser()
from app.task.BetterGI.tools import one_dragon

names = one_dragon.list_auto_boss_strategies(root)
data = [ComboBoxItem(label=n, value=n) for n in names]
return ComboBoxOut(
code=200,
status="success",
message=f"共 {len(data)} 个自动战斗策略选项",
data=data,
)
except Exception as e:
return ComboBoxOut(
code=400 if isinstance(e, (ValueError, KeyError, TypeError, RuntimeError))
else 500,
status="error",
message=f"{type(e).__name__}: {str(e)}",
data=[],
)


@router.get(
"/bettergi/one-dragon/custom-groups",
tags=["BetterGI"],
summary="获取 BetterGI 一条龙自定义配置组",
response_model=BetterGICustomGroupsOut,
status_code=200,
)
async def get_bettergi_custom_groups_api(
scriptId: str, configName: str = "", useMasConfig: bool = False
) -> BetterGICustomGroupsOut:
"""返回指定一条龙配置里的自定义配置组(非内置 8 组)及其启用状态,供前端表格自动加载。

``useMasConfig=True``(用户独立配置)时改读 MAS 运行时槽位「MAS独立配置」:独立模式的
per-user 配置物化在槽位而非 {configName} 实配,读槽位才能列到用户刚在 BGI GUI 里往
独立配置添加的自定义组。
"""

try:
script_config = _bettergi_script_config(scriptId)
root = Path(script_config.get("Info", "RootPath")).expanduser()
from app.task.BetterGI.tools import one_dragon

read_name = (
one_dragon.launch_slot_name()
if useMasConfig
else one_dragon.resolve_config_name(configName)
)
items = one_dragon.list_custom_groups(root, read_name)
data = [BetterGICustomGroupOut(**item) for item in items]
return BetterGICustomGroupsOut(
code=200,
status="success",
message=f"共 {len(data)} 个自定义配置组",
data=data,
)
except Exception as e:
return BetterGICustomGroupsOut(
code=400 if isinstance(e, (ValueError, KeyError, TypeError, RuntimeError))
else 500,
status="error",
message=f"{type(e).__name__}: {str(e)}",
data=[],
)


@router.get(
"/bettergi/one-dragon/configs",
tags=["BetterGI"],
summary="获取 BetterGI 一条龙配置名列表",
response_model=ComboBoxOut,
status_code=200,
)
async def get_bettergi_one_dragon_configs_api(scriptId: str) -> ComboBoxOut:
"""返回 BetterGI 可选一条龙配置名:{RootPath}/User/OneDragon/*.json 文件名(默认配置置顶)。"""

try:
script_config = _bettergi_script_config(scriptId)
root = Path(script_config.get("Info", "RootPath")).expanduser()
from app.task.BetterGI.tools import one_dragon

names = one_dragon.list_one_dragon_configs(root)
data = [ComboBoxItem(label=n, value=n) for n in names]
return ComboBoxOut(
code=200,
status="success",
message=f"共 {len(data)} 个一条龙配置",
data=data,
)
except Exception as e:
return ComboBoxOut(
code=400 if isinstance(e, (ValueError, KeyError, TypeError, RuntimeError))
else 500,
status="error",
message=f"{type(e).__name__}: {str(e)}",
data=[],
)


@router.get(
"/hsr/capabilities",
tags=["HSR"],
Expand Down
11 changes: 9 additions & 2 deletions app/core/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
OkwwConfig,
OkNteConfig,
HSRConfig,
BetterGIConfig,
HSRUserConfig,
MaaPlanConfig,
MaaEndPlanConfig,
Expand All @@ -62,6 +63,7 @@
GeneralUserConfig,
OkwwUserConfig,
OkNteUserConfig,
BetterGIUserConfig,
GlobalConfig,
CLASS_BOOK,
PLAN_BOOK,
Expand Down Expand Up @@ -739,6 +741,7 @@ async def add_script(
"Okww",
"OkNte",
"HSR",
"BetterGI",
],
script_id: str | None = None,
) -> tuple[
Expand All @@ -751,7 +754,8 @@ async def add_script(
| MaaFWConfig
| OkwwConfig
| OkNteConfig
| HSRConfig,
| HSRConfig
| BetterGIConfig,
]:
"""添加脚本配置"""

Expand Down Expand Up @@ -1051,7 +1055,8 @@ async def add_user(
| MaaFWUserConfig
| OkwwUserConfig
| OkNteUserConfig
| HSRUserConfig,
| HSRUserConfig
| BetterGIUserConfig,
]:
"""添加用户配置"""

Expand Down Expand Up @@ -1088,6 +1093,8 @@ async def add_user(
uid, config = await script_config.UserData.add(MaaFWUserConfig)
elif isinstance(script_config, HSRConfig):
uid, config = await script_config.UserData.add(HSRUserConfig)
elif isinstance(script_config, BetterGIConfig):
uid, config = await script_config.UserData.add(BetterGIUserConfig)
else:
raise TypeError(f"不支持的脚本配置类型: {type(script_config)}")

Expand Down
3 changes: 3 additions & 0 deletions app/core/task_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
OkNteConfig,
HSRConfig,
MaaFWConfig,
BetterGIConfig,
)

# 延迟加载 System,避免 app.services 初始化期间触发循环导入;
Expand Down Expand Up @@ -407,6 +408,8 @@ async def _run_main_task(self):
task_item = task.M9AManager(script_item)
elif isinstance(script_config, HSRConfig):
task_item = task.HSRManager(script_item)
elif isinstance(script_config, BetterGIConfig):
task_item = task.BetterGIManager(script_item)
elif isinstance(script_config, MaaFWConfig):
task_item = task.MaaFWEmbeddedManager(script_item)
else:
Expand Down
Loading
Loading