initial: hermes-dashboard snapshot (post overview + git integration)

This commit is contained in:
hermes-dashboard
2026-08-17 19:51:51 +08:00
commit 1e5e30ffcb
22 changed files with 2333 additions and 0 deletions

201
config.py Normal file
View File

@@ -0,0 +1,201 @@
"""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
# Managed projects to monitor
MANAGED_PROJECTS: list[ProjectConfig] = [
{"name": "blog-app", "path": "/home/yi/opencode-blog-showcase/blog-app", "gitea_repo": "blog-app"},
{"name": "novel-app", "path": "/home/yi/novel-workspace/novel-app", "gitea_repo": "novel-app"},
{"name": "hermes-dashboard", "path": "/home/yi/hermes-dashboard", "gitea_repo": "hermes-dashboard"},
{"name": "omo-openagent", "path": "/home/yi/.cache/opencode/packages/oh-my-openagent@latest", "gitea_repo": "omo-openagent-config"},
{"name": "omo-config", "path": "/home/yi/.config/opencode", "gitea_repo": "omo-config"},
]
# 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. 标记需要后续呼应的伏笔
## 验收
- [ ] 初稿完成
- [ ] 字数达标
- [ ] 剧情连贯性检查通过
""",
},
]