Provide access to all scope files

This commit is contained in:
2026-05-02 17:01:24 +02:00
parent 14fce4f4d6
commit 11f0230775
3 changed files with 99 additions and 15 deletions

View File

@@ -17,12 +17,23 @@ router = APIRouter(include_in_schema=False)
APP_NAME = "Repository Scoping"
def page(title: str, body: str, selected_repository: str | None = None) -> HTMLResponse:
repository_context = (
f'<span class="header-context">{escape(selected_repository)}</span>'
if selected_repository
else ""
)
def page(
title: str,
body: str,
selected_repository: str | None = None,
selected_repository_id: int | None = None,
) -> HTMLResponse:
if selected_repository and selected_repository_id is not None:
repository_context = (
f'<a class="header-context" href="/ui/repos/{selected_repository_id}">'
f"{escape(selected_repository)}</a>"
)
elif selected_repository:
repository_context = (
f'<span class="header-context">{escape(selected_repository)}</span>'
)
else:
repository_context = ""
return HTMLResponse(
f"""
<!doctype html>
@@ -197,7 +208,6 @@ def page(title: str, body: str, selected_repository: str | None = None) -> HTMLR
<nav class="actions">
<a href="/ui/search">Search</a>
<a href="/ui/discovery">Discovery</a>
<a href="/ui/scope">SCOPE</a>
<a href="/docs">API Docs</a>
</nav>
</header>
@@ -307,6 +317,43 @@ def scope_document() -> HTMLResponse:
return page("SCOPE.md", body)
@router.get("/ui/repos/{repository_id}/scope")
def repository_scope_document(
repository_id: int,
service: RegistryService = Depends(get_service),
) -> HTMLResponse:
repository = service.get_repository(repository_id)
checkout = service.ingestion.cached_checkout(repository.url)
if checkout is None:
rendered = (
'<p class="muted">No cached checkout exists for this repository yet. '
"Run analysis first, or use a local repository path.</p>"
)
else:
scope_path = checkout.source_path / "SCOPE.md"
if scope_path.exists():
content = scope_path.read_text(encoding="utf-8")
rendered = f'<pre class="scope-document">{escape(content)}</pre>'
else:
rendered = (
'<p class="muted">No SCOPE.md file was found in this '
"repository checkout.</p>"
)
body = f"""
<h1>SCOPE.md</h1>
<section class="panel stack">
<p class="muted">Canonical scope summary for the {escape(repository.name)} repository.</p>
{rendered}
</section>
"""
return page(
"SCOPE.md",
body,
selected_repository=repository.name,
selected_repository_id=repository.id,
)
@router.get("/ui/discovery")
def discovery_page(service: RegistryService = Depends(get_service)) -> HTMLResponse:
repositories = service.list_repositories()
@@ -701,6 +748,7 @@ def repository_detail(
<div class="actions">
<h1 style="margin-right:auto">{escape(repository.name)}</h1>
<a class="button secondary" href="/ui/repos/{repository_id}/export">Export</a>
<a class="button secondary" href="/ui/repos/{repository_id}/scope">SCOPE</a>
<a class="button secondary" href="/ui">Back</a>
</div>
<p class="muted">{escape(repository.description or '')}</p>
@@ -840,7 +888,12 @@ def repository_detail(
</form>
</section>
"""
return page(repository.name, body, selected_repository=repository.name)
return page(
repository.name,
body,
selected_repository=repository.name,
selected_repository_id=repository.id,
)
@router.get("/ui/repos/{repository_id}/export")
@@ -1296,6 +1349,7 @@ def analysis_run_detail(
f"{repository.name} Run {analysis_run_id}",
body,
selected_repository=repository.name,
selected_repository_id=repository.id,
)
@@ -1462,7 +1516,12 @@ def repository_element_listing(
</table>
</section>
"""
return page(title, body, selected_repository=repository.name)
return page(
title,
body,
selected_repository=repository.name,
selected_repository_id=repository.id,
)
@router.get("/ui/repos/{repository_id}/analysis-runs/{base_analysis_run_id}/diff/{target_analysis_run_id}")
@@ -1519,6 +1578,7 @@ def analysis_run_diff_detail(
f"{diff.repository.name} Change Review",
body,
selected_repository=diff.repository.name,
selected_repository_id=diff.repository.id,
)