feat: Projects tab, 4-tab dashboard, full knowledge browser
All checks were successful
Build and Deploy DevOpsDash / build-image (push) Successful in 8s
All checks were successful
Build and Deploy DevOpsDash / build-image (push) Successful in 8s
- Add projects router (Redis projects + workcontexts merged)
- Register projects router in main.py
- Extend knowledge router: howtos, agents, skills via MCP proxy
- Extend mcp_client: list/get howtos, agents, skills
- Rewrite dashboard.html: 4 tabs (Taskz/Worklog/Projects/Knowledge)
- Taskz: sidebar board list + Kanban columns with task modal
- Worklog: context/days picker + standup button
- Projects: context filter sidebar + work context display
- Knowledge: 6 sub-tabs (docs/howtos/agents/skills/adrs/memories)
with markdown rendering via marked.js
This commit is contained in:
@@ -54,3 +54,46 @@ async def get_worklog(
|
||||
|
||||
async def get_standup(days: int = 2, context: str = "egmont") -> Dict[str, Any]:
|
||||
return await _call_tool("generate_standup", {"days": days, "context": context})
|
||||
|
||||
|
||||
async def list_knowledge(category: Optional[str] = None, tag: Optional[str] = None) -> Dict[str, Any]:
|
||||
args: Dict[str, Any] = {}
|
||||
if category:
|
||||
args["category"] = category
|
||||
if tag:
|
||||
args["tag"] = tag
|
||||
return await _call_tool("list_knowledge", args)
|
||||
|
||||
|
||||
async def get_knowledge(storage_filename: str) -> Dict[str, Any]:
|
||||
return await _call_tool("get_knowledge", {"storage_filename": storage_filename, "include_metadata": False})
|
||||
|
||||
|
||||
async def list_howtos() -> Dict[str, Any]:
|
||||
return await _call_tool("list_howtos", {})
|
||||
|
||||
|
||||
async def get_howto(filename: str) -> Dict[str, Any]:
|
||||
return await _call_tool("get_howto_content", {"filename": filename})
|
||||
|
||||
|
||||
async def list_agents(domain: Optional[str] = None) -> Dict[str, Any]:
|
||||
args: Dict[str, Any] = {}
|
||||
if domain:
|
||||
args["domain"] = domain
|
||||
return await _call_tool("get_agent", args)
|
||||
|
||||
|
||||
async def get_agent(name: str) -> Dict[str, Any]:
|
||||
return await _call_tool("get_agent", {"name": name})
|
||||
|
||||
|
||||
async def list_skills(domain: Optional[str] = None) -> Dict[str, Any]:
|
||||
args: Dict[str, Any] = {}
|
||||
if domain:
|
||||
args["domain"] = domain
|
||||
return await _call_tool("get_skill", args)
|
||||
|
||||
|
||||
async def get_skill(name: str) -> Dict[str, Any]:
|
||||
return await _call_tool("get_skill", {"name": name})
|
||||
|
||||
Reference in New Issue
Block a user