- SQLite backend with file/repo/relationship entities - tree-sitter Go AST parser for deterministic import detection - Ollama doc generation with concurrent batch processing - MCP server (FastMCP) for Claude Code integration - Merge simulation with staleness cascade - Lazy refresh for stale relationship and repo docs - CLAUDE.md for agent context
76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
"""Refresh all stale documentation — relationships and repo summaries."""
|
|
|
|
import sys
|
|
import os
|
|
|
|
sys.path.insert(0, os.path.dirname(__file__))
|
|
|
|
from db import GraphDB
|
|
from docgen import generate_relationship_doc, generate_repo_doc
|
|
|
|
REPO_DIR = os.environ.get("REPO_DIR", os.path.join(os.path.dirname(__file__), "repos", "target"))
|
|
|
|
|
|
def refresh_stale():
|
|
db = GraphDB()
|
|
|
|
print(f"\n{'='*60}")
|
|
print("Refreshing stale documentation")
|
|
print(f"{'='*60}")
|
|
|
|
stats_before = db.get_stats()
|
|
print(f"\nBefore: {stats_before['stale_relationships']} stale relationships")
|
|
|
|
# Refresh stale relationship docs
|
|
stale_rels = db.get_stale_relationships()
|
|
if stale_rels:
|
|
print(f"\n[1/2] Regenerating {len(stale_rels)} stale relationship docs...")
|
|
for i, rel in enumerate(stale_rels):
|
|
doc = generate_relationship_doc(
|
|
rel["from_file"], rel["from_doc"] or "",
|
|
rel["to_file"], rel["to_doc"] or "",
|
|
)
|
|
db.update_relationship_doc(rel["from_file"], rel["to_file"], doc)
|
|
if (i + 1) % 5 == 0 or (i + 1) == len(stale_rels):
|
|
print(f" Refreshed {i+1}/{len(stale_rels)}")
|
|
else:
|
|
print("\n[1/2] No stale relationships.")
|
|
|
|
# Refresh stale repo docs
|
|
stale_repos = db.get_stale_repos()
|
|
if stale_repos:
|
|
print(f"\n[2/2] Regenerating {len(stale_repos)} stale repo docs...")
|
|
for repo in stale_repos:
|
|
file_docs = db.get_repo_files_docs(repo["name"])
|
|
priority_names = ["echo.go", "router.go", "context.go", "group.go", "main.go", "server.go"]
|
|
entry_files = []
|
|
for name in priority_names:
|
|
for path, doc in file_docs:
|
|
if path.endswith(name) and doc:
|
|
entry_files.append((path, doc))
|
|
break
|
|
|
|
readme_path = os.path.join(REPO_DIR, "README.md")
|
|
readme = ""
|
|
if os.path.exists(readme_path):
|
|
with open(readme_path) as f:
|
|
readme = f.read()
|
|
|
|
repo_doc = generate_repo_doc(readme, entry_files)
|
|
db.update_repo_doc(repo["name"], repo_doc)
|
|
print(f" Refreshed repo: {repo['name']}")
|
|
else:
|
|
print("\n[2/2] No stale repos.")
|
|
|
|
stats_after = db.get_stats()
|
|
print(f"\n{'='*60}")
|
|
print("Refresh complete!")
|
|
print(f" Stale rels: {stats_before['stale_relationships']} → {stats_after['stale_relationships']}")
|
|
print(f"{'='*60}")
|
|
|
|
db.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
refresh_stale()
|