1 from __future__ import annotations

2

3 from pathlib import Path

4 from typing import Any

5

6

7 def build_file_context(file_path: str, max_lines: int = 50) -> dict[str, Any]:

8 """Build lightweight file context for extraction triggers.

9

10 Returns metadata and a snippet (first N lines) for significance scoring.

11 """

12 p = Path(file_path)

13 meta = {

14 "file_path": str(p),

15 "file_name": p.name,

16 "file_extension": p.suffix,

17 "size": p.stat().st_size if p.exists() else 0,

18 }

19

20 snippet = ""

21 try:

22 if p.exists() and p.is_file():

23 with p.open("r", encoding="utf-8", errors="ignore") as f:

24 lines: list[str] = []

25 for i, line in enumerate(f):

26 if i >= max_lines:

27 break

28 lines.append(line.rstrip("\n"))

29 snippet = "\n".join(lines)

30 except Exception:

31 snippet = ""

32

33 return {"metadata": meta, "snippet": snippet}