Initial POC: Developer Intelligence knowledge graph
- 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
This commit is contained in:
75
refresh_stale.py
Normal file
75
refresh_stale.py
Normal file
@@ -0,0 +1,75 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user