feat: TODO DB迁移+no_agent执行器+阻塞升级机制
- 创建 mofin.db → todos 表(id/title/status/priority/fix_action/retry机制) - 创建 self_todo_executor.py:no_agent脚本,纯代码逻辑 - 有fix_action→执行→验证→标记completed - 无fix_action→标记blocked→输出通知 - 失败重试3次→超限标blocked - 新blocked项首次输出后缓存不重复 - 修改 morning_health_check: - TODO写入DB取代JSON(sqlite3,无row_factory依赖) - 去重:含completed查重 - 输出阻塞TODO列表 - 替换cron:LLM cron(2h间距) → no_agent(10min间距) - 修复:deliver=origin两任务改为local - 清理:废弃todo.json退役
This commit is contained in:
@@ -12,6 +12,8 @@ from datetime import datetime
|
||||
|
||||
BASE = Path("/home/hmo/MoFin")
|
||||
DB_PATH = BASE / "data" / "mofin.db"
|
||||
# 记录已报告过的blocked ID,避免重复推送
|
||||
REPORTED_BLOCKED_PATH = Path("/home/hmo/.hermes/profiles/position-analyst/home/.cache/executor_reported_blocked.json")
|
||||
|
||||
|
||||
def get_conn():
|
||||
@@ -76,6 +78,8 @@ def main():
|
||||
return
|
||||
|
||||
results = []
|
||||
newly_blocked = [] # [(id, title)] 新阻塞的,需要推送给Dad/知微
|
||||
|
||||
for row in rows:
|
||||
todo_id = row["id"]
|
||||
title = row["title"]
|
||||
@@ -102,6 +106,7 @@ def main():
|
||||
"note=?, updated_at=CURRENT_TIMESTAMP WHERE id=?",
|
||||
(retry_count, f"重试{retry_count}次仍失败: {output}", todo_id)
|
||||
)
|
||||
newly_blocked.append((todo_id, title))
|
||||
results.append(("⛔", f"{title}: 已阻塞({output[:60]})"))
|
||||
else:
|
||||
cur.execute(
|
||||
@@ -137,11 +142,30 @@ def main():
|
||||
"updated_at=CURRENT_TIMESTAMP WHERE id=?",
|
||||
(todo_id,)
|
||||
)
|
||||
newly_blocked.append((todo_id, title))
|
||||
results.append(("⛔", f"{title}: 无修复命令,已阻塞"))
|
||||
|
||||
conn.commit()
|
||||
|
||||
conn.close()
|
||||
|
||||
# 记录新报告过的blocked ID
|
||||
try:
|
||||
REPORTED_BLOCKED_PATH.parent.mkdir(parents=True, exist_ok=True)
|
||||
reported = json.loads(REPORTED_BLOCKED_PATH.read_text()) if REPORTED_BLOCKED_PATH.exists() else []
|
||||
# 过滤出尚未报告过的blocked项
|
||||
unreported_blocked = [(tid, t) for tid, t in newly_blocked if tid not in reported]
|
||||
if unreported_blocked:
|
||||
# 有未报告的阻塞项 → 输出直通知微
|
||||
print()
|
||||
print("⛔ 需知微处理(已阻塞,无自动修复方案):")
|
||||
for tid, t in unreported_blocked:
|
||||
print(f" #{tid} {t[:70]}")
|
||||
# 标记已报告
|
||||
reported.extend([tid for tid, _ in unreported_blocked])
|
||||
REPORTED_BLOCKED_PATH.write_text(json.dumps(reported[-200:], ensure_ascii=False))
|
||||
except:
|
||||
pass
|
||||
|
||||
elapsed = time.time() - start
|
||||
if results:
|
||||
|
||||
Reference in New Issue
Block a user