# -*- coding: utf-8 -*- """修 file_pull / 接收文件不能用。 我上一轮加"敏感目录"保护时,把 app_dir()(程序目录)也算成敏感目录。 但**接收目录 received\\ 就在程序目录里面** —— 于是每一个要拉回去的文件 都被判定为"敏感",_resolve_received 返回 None,报"文件不存在"。 用户看到的:手表「接收文件」永远拿不到东西。 修法:接收目录明确豁免 —— 它本来就是给手表传文件用的。 数据目录(配对码/设备令牌)的保护不受影响。 """ from __future__ import annotations import sys from pathlib import Path FEATURES = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\windows" r"\lanremote\features.py") OLD = ''' def is_sensitive(self, path: Path) -> bool: try: resolved = path.resolve() except OSError: return False for folder in self.sensitive_dirs():''' NEW = ''' def is_sensitive(self, path: Path) -> bool: try: resolved = path.resolve() except OSError: return False # 接收目录要豁免!它就在程序目录里面(app_dir()/received), # 如果不豁免,每个要拉回手表的文件都会被当成"敏感目录"挡掉, # 表现为「接收文件」永远拿不到东西、报"文件不存在"。 try: received = Path(self.store.received_dir()).resolve() resolved.relative_to(received) return False except (ValueError, OSError): pass for folder in self.sensitive_dirs():''' # server 那边的 _is_sensitive 也要豁免(它可能不走 features) SRV = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\windows" r"\lanremote\server.py") SRV_OLD = ''' def _is_sensitive(self, path: Path) -> bool: """程序自己的数据目录:配对码、设备令牌都在这儿。""" if self.features is not None:''' SRV_NEW = ''' def _is_sensitive(self, path: Path) -> bool: """程序自己的数据目录:配对码、设备令牌都在这儿。 注意:接收目录必须豁免 —— 它在程序目录里面, 不豁免的话拉文件会全被挡住("文件不存在")。 """ try: received = Path(self.store.received_dir()).resolve() path.resolve().relative_to(received) return False except (ValueError, OSError): pass if self.features is not None:''' def main() -> int: ok = True for path, old, new, tag in ((FEATURES, OLD, NEW, "features.is_sensitive 豁免接收目录"), (SRV, SRV_OLD, SRV_NEW, "server._is_sensitive 豁免接收目录")): text = path.read_text(encoding="utf-8") if old not in text: print(f" [跳过] {tag} —— 锚点没找到") ok = False continue path.write_text(text.replace(old, new, 1), encoding="utf-8") print(f" {tag}: OK") import ast for label, path in (("features.py", FEATURES), ("server.py", SRV)): try: ast.parse(path.read_text(encoding="utf-8")) print(f" {label}: 语法 OK") except SyntaxError as exc: print(f" {label}: 语法错误 {exc}") ok = False return 0 if ok else 1 if __name__ == "__main__": sys.exit(main())