Files
hermes-dashboard/config.py
hermes-dashboard c0cbd683f4 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
2026-08-17 20:00:37 +08:00

209 lines
6.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Configuration for hermes-dashboard.
All values can be overridden via environment variables (HERMES_DASHBOARD_* prefix).
"""
import os
from typing import TypedDict
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# Database paths
KANBAN_DB_PATH = os.environ.get(
"HERMES_DASHBOARD_KANBAN_DB",
"/home/yi/.hermes/kanban.db"
)
# Gitea configuration
GITEA_API_URL = os.environ.get("HERMES_DASHBOARD_GITEA_URL", "http://localhost:3000/api/v1")
GITEA_TOKEN_PATH = os.environ.get(
"HERMES_DASHBOARD_GITEA_TOKEN_PATH",
"/home/yi/gitea/.admin_token"
)
# Worker SOUL.md path
SOUL_MD_PATH = os.environ.get(
"HERMES_DASHBOARD_SOUL_MD",
"/home/yi/.hermes/profiles/omo-pm/SOUL.md"
)
# Config file paths
OPENCODE_CONFIG_PATH = "/home/yi/.config/opencode/opencode.jsonc"
OMO_CONFIG_PATH = "/home/yi/.omo/omo.jsonc"
# Server port
PORT = int(os.environ.get("HERMES_DASHBOARD_PORT", "8092"))
# Flask secret key
SECRET_KEY = os.environ.get("FLASK_SECRET_KEY", "dev-hermes-dashboard-secret-change-me")
class ProjectConfig(TypedDict):
"""Type definition for managed project configuration."""
name: str
path: str
gitea_repo: str
color: str
# Managed projects to monitor
MANAGED_PROJECTS: list[ProjectConfig] = [
{"name": "blog-app", "path": "/home/yi/opencode-blog-showcase/blog-app", "gitea_repo": "blog-app", "color": "#4a9eff"},
{"name": "novel-app", "path": "/home/yi/novel-workspace/novel-app", "gitea_repo": "novel-app", "color": "#9e4aff"},
{"name": "hermes-dashboard", "path": "/home/yi/hermes-dashboard", "gitea_repo": "hermes-dashboard", "color": "#ff9e4a"},
{"name": "omo-openagent", "path": "/home/yi/.cache/opencode/packages/oh-my-openagent@latest", "gitea_repo": "omo-openagent-config", "color": "#4aff9e"},
{"name": "omo-config", "path": "/home/yi/.config/opencode", "gitea_repo": "omo-config", "color": "#ff4a9e"},
]
# Docs directories scanned by /docs (browser-readable documentation center)
DOCS_DIRS: list[str] = [
"/home/yi/novel-workspace/docs",
"/home/yi/opencode-blog-showcase/docs",
]
# Dispatch templates for kanban task creation
DISPATCH_TEMPLATES: list[dict] = [
{
"name": "fix-csrf-blog-app",
"description": "修复 blog-app 的 CSRF token 验证问题",
"default_body": """## 背景
blog-app 在 POST 请求时 CSRF token 验证失败,导致用户无法提交表单。
需要检查 token 生成和验证逻辑是否一致。
## 任务
1. 检查 `security.py` 中 `validate_csrf()` 的实现
2. 确认前端表单是否正确传递 `csrf_token` 字段
3. 检查 session 配置是否正确
4. 添加单元测试覆盖 CSRF 场景
## 验收
- [ ] POST 请求能正常通过 CSRF 验证
- [ ] 无效 token 返回 403
- [ ] 测试覆盖率 > 80%
""",
},
{
"name": "refactor-module",
"description": "重构指定模块,提升代码质量和可维护性",
"default_body": """## 背景
目标模块代码复杂度高,需要重构以降低维护成本。
当前存在重复逻辑、过长函数、缺少类型注解等问题。
## 任务
1. 分析模块依赖关系,画出调用图
2. 提取公共逻辑到 utils/helper 模块
3. 添加完整的类型注解和 docstring
4. 拆分超过 250 行的函数
5. 确保所有现有测试通过
## 验收
- [ ] 无函数超过 250 行
- [ ] 所有函数有类型注解
- [ ] 现有测试全部通过
- [ ] 代码审查通过
""",
},
{
"name": "research-npm-package",
"description": "调研 npm 包的功能、API 和集成方案",
"default_body": """## 背景
需要评估目标 npm 包是否适合集成到当前项目。
重点关注 API 设计、bundle size、维护状态。
## 任务
1. 查阅官方文档,总结核心 API
2. 检查 GitHub 仓库star 数、最近提交、issue 处理速度
3. 对比同类替代方案(至少 2 个)
4. 写一个最小集成 demo
5. 记录潜在的 breaking changes 风险
## 验收
- [ ] 输出调研报告Markdown 格式)
- [ ] 包含 API 示例代码
- [ ] 明确推荐/不推荐及理由
- [ ] demo 可运行
""",
},
{
"name": "fix-omo-task",
"description": "修复 omo-pm worker 任务执行异常",
"default_body": """## 背景
omo-pm 在执行某类任务时出现异常退出或结果不符合预期。
需要排查 worker 日志和任务状态。
## 任务
1. 查看 `~/.hermes/logs/` 下相关日志
2. 检查 kanban.db 中失败任务的 status 和 result 字段
3. 复现问题场景
4. 定位根因并修复
5. 添加回归测试
## 验收
- [ ] 问题任务能正常完成
- [ ] 日志无异常堆栈
- [ ] 回归测试通过
""",
},
{
"name": "daily-blog-post",
"description": "生成并发布每日博客文章",
"default_body": """## 背景
每日博客更新任务,需要生成一篇高质量文章并发布到 blog-app。
## 任务
1. 从主题列表选择一个话题
2. 撰写文章800-1500 字)
3. 生成配图(如有需要)
4. 通过 blog-app API 发布
5. 验证文章页面可访问
## 验收
- [ ] 文章已发布且可访问
- [ ] 无错别字和格式问题
- [ ] 标签分类正确
""",
},
{
"name": "security-audit",
"description": "对项目进行安全审计,检查常见漏洞",
"default_body": """## 背景
定期安全审计,确保项目没有明显的安全漏洞。
重点关注 OWASP Top 10 中的常见风险。
## 任务
1. 检查 SQL 注入风险(参数化查询)
2. 检查 XSS 风险(输出编码)
3. 检查认证/授权逻辑
4. 检查敏感信息泄露(日志、错误信息)
5. 检查依赖包已知漏洞
6. 输出安全审计报告
## 验收
- [ ] 审计报告包含发现和建议
- [ ] 高危问题已修复
- [ ] 中低危问题有修复计划
""",
},
{
"name": "novel-chapter-draft",
"description": "起草小说新章节",
"default_body": """## 背景
继续小说创作,完成新章节的初稿。
需要保持与前文风格一致,推进剧情发展。
## 任务
1. 回顾上一章内容和伏笔
2. 规划本章剧情节点
3. 撰写初稿3000-5000 字)
4. 检查人物对话是否符合人设
5. 标记需要后续呼应的伏笔
## 验收
- [ ] 初稿完成
- [ ] 字数达标
- [ ] 剧情连贯性检查通过
""",
},
]