# -*- coding: utf-8 -*- """自愈:一台设备都没配对过时,配对必须开着。 用户报的「设置完配对码后,手表连不上,显示'被控端已关闭新设备配对'」 根因链: run_setup() → run_silent(store, None) → allow_pair_minutes=None → store.set("allow_new_pairing", False) → 用户刚设完码,门就锁上了 而且这个 False 已经写进 settings.json 了,光修 run_setup 不够 —— 用户现有的安装里还是 False,重启也不会好。 所以再加一道自愈:**只要一台设备都没配对过,就强制把配对打开。** 配对码仍然是门槛(不知道码连不上),所以不会有安全问题; 第一台配对成功后窗口自动关闭。 """ from __future__ import annotations import sys from pathlib import Path RUN = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\windows" r"\run_agent.py") OLD = ''' # 静默模式下默认**不接受新配对**(防止局域网里任何人接进来)。 # 需要加设备时用 --add-device 临时开一个时间窗。 if allow_pair_minutes: store.set("allow_new_pairing", True) deadline = time.time() + max(1, allow_pair_minutes) * 60 else: store.set("allow_new_pairing", False) deadline = 0.0''' NEW = ''' # 静默模式下默认**不接受新配对**(防止局域网里任何人接进来)。 # 需要加设备时用 --add-device 临时开一个时间窗。 # # 自愈:如果一台设备都还没配对过,就必须把配对打开 —— # 否则用户设完码会永远连不上(报"被控端已关闭新设备配对")。 # 配对码仍然是门槛,所以不影响安全;第一台配对成功后自动关闭。 if not store.device_list(): allow_pair_minutes = max(allow_pair_minutes or 0, FIRST_PAIR_MINUTES) store.set("close_pair_after_first", True) if allow_pair_minutes: store.set("allow_new_pairing", True) deadline = time.time() + max(1, allow_pair_minutes) * 60 else: store.set("allow_new_pairing", False) deadline = 0.0''' CONST_OLD = "# 设完配对码之后留多久给手表来配对\nSETUP_PAIR_MINUTES = 60" CONST_NEW = ("# 设完配对码之后留多久给手表来配对\n" "SETUP_PAIR_MINUTES = 60\n" "# 一台设备都没配对过时,自动开多久的配对窗口(自愈用)\n" "FIRST_PAIR_MINUTES = 120") def main() -> int: text = RUN.read_text(encoding="utf-8") ok = True for old, new, tag in ((OLD, NEW, "自愈:没设备时强制开配对"), (CONST_OLD, CONST_NEW, "FIRST_PAIR_MINUTES 常量")): if old not in text: print(f" [跳过] {tag} —— 锚点没找到") ok = False continue text = text.replace(old, new, 1) print(f" {tag}: OK") if ok: RUN.write_text(text, encoding="utf-8") import ast try: ast.parse(RUN.read_text(encoding="utf-8")) print(" run_agent.py: 语法 OK") except SyntaxError as exc: print(f" run_agent.py: 语法错误 {exc}") ok = False return 0 if ok else 1 if __name__ == "__main__": sys.exit(main())