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:
@@ -21,6 +21,8 @@ MEMORY_KEY_PREFIX = "devops-mcp:memory:"
|
||||
PROJECT_KEY_PREFIX = "devops-mcp:projects:"
|
||||
PROJECT_INDEX_KEY = "devops-mcp:projects:_index"
|
||||
|
||||
WORKCONTEXT_KEY_PREFIX = "devops-mcp:workcontext:"
|
||||
|
||||
|
||||
def get_redis() -> redis.Redis:
|
||||
url = os.environ.get("REDIS_URL", "redis://localhost:6379")
|
||||
@@ -130,3 +132,19 @@ def list_projects(r: redis.Redis, context: Optional[str] = None) -> List[Dict[st
|
||||
continue
|
||||
projects.append(proj)
|
||||
return projects
|
||||
|
||||
|
||||
def list_workcontexts(r: redis.Redis) -> List[Dict[str, Any]]:
|
||||
keys = r.keys(f"{WORKCONTEXT_KEY_PREFIX}*")
|
||||
contexts = []
|
||||
for key in keys:
|
||||
raw = r.get(key)
|
||||
if raw:
|
||||
try:
|
||||
ctx = json.loads(raw)
|
||||
ctx["path"] = key[len(WORKCONTEXT_KEY_PREFIX):]
|
||||
contexts.append(ctx)
|
||||
except json.JSONDecodeError:
|
||||
pass
|
||||
contexts.sort(key=lambda c: c.get("saved_at", ""), reverse=True)
|
||||
return contexts
|
||||
|
||||
Reference in New Issue
Block a user