"""从文本/Cursor 回复中解析本地截图路径。""" from __future__ import annotations import re from pathlib import Path import env_config IMAGE_SUFFIXES = (".png", ".jpg", ".jpeg", ".webp") def _project_cwd() -> Path: raw = env_config.env("CURSOR_CWD", r"d:\LY\test\tech") or r"d:\LY\test\tech" return Path(raw).resolve() def _resolve_candidate(raw: str, cwd: Path) -> Path | None: cleaned = raw.strip().strip("`\"'[]()") if not cleaned or cleaned.startswith("http"): return None path = Path(cleaned) if not path.is_absolute(): path = cwd / path try: resolved = path.resolve() except OSError: return None if resolved.is_file() and resolved.suffix.lower() in IMAGE_SUFFIXES: return resolved return None def find_image_paths(text: str) -> list[Path]: cwd = _project_cwd() seen: set[Path] = set() found: list[Path] = [] patterns = [ r"(?:保存(?:至|到)|saved\s+to|screenshot\s*[::])\s*([^\s\n\]]+\.(?:png|jpe?g|webp))", r"([A-Za-z]:\\[^\s\n\]]+\.(?:png|jpe?g|webp))", r"([^\s\n\]]+\.(?:png|jpe?g|webp))", ] for pattern in patterns: for match in re.finditer(pattern, text, re.IGNORECASE): path = _resolve_candidate(match.group(1), cwd) if path and path not in seen: seen.add(path) found.append(path) return found def strip_fake_image_markdown(text: str) -> str: text = re.sub(r"^\s*\[图片\]\s*$", "", text, flags=re.MULTILINE) text = re.sub(r"\n{3,}", "\n\n", text) return text.strip()