feat: project overview + timeline + docs center
- services/task_project_linker.py: task<->project mapping (title keywords + workspace_path) - routes/pages.py: /timeline, /docs, /docs/<path>, enhanced /projects/<name> and /tasks/<id> - templates: timeline.html, docs.html, doc_view.html (new), project_detail.html + task_detail.html (overhauled) - config.py: DOCS_DIRS + ProjectConfig color - base.html: Timeline + Docs nav links
This commit is contained in:
@@ -6,6 +6,7 @@ import subprocess
|
||||
from typing import Any
|
||||
|
||||
import config
|
||||
from services import task_project_linker
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -159,3 +160,20 @@ def get_project_detail(name: str) -> dict[str, Any]:
|
||||
info["status_porcelain"] = status_porcelain
|
||||
|
||||
return info
|
||||
|
||||
|
||||
def get_project_tasks(name: str) -> list[dict[str, Any]]:
|
||||
"""Tasks linked to a project (via task_project_linker)."""
|
||||
return task_project_linker.link_project_tasks(name)
|
||||
|
||||
|
||||
def get_project_commits_in_window(
|
||||
name: str,
|
||||
start_ts: int | None = None,
|
||||
end_ts: int | None = None,
|
||||
limit: int = 20,
|
||||
) -> list[dict[str, Any]]:
|
||||
"""Commits for a project, optionally within a time window."""
|
||||
return task_project_linker.link_project_commits(
|
||||
name, limit=limit, since_ts=start_ts, until_ts=end_ts
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user