{"94d230f73e7f": {"id": "94d230f73e7f", "name": "春考选题-文章抓取", "prompt": "在服务器上抓取微信公众号最新文章，然后推送到企微群。\n\n步骤：\n1. cd /home/agentuser/project/scripts\n2. 设置环境变量：export DEEPSEEK_API_KEY=$(grep DEEPSEEK_API_KEY ../.env | cut -d= -f2) && export QW_WEBHOOK_URL=$(grep QW_WEBHOOK_URL ../.env | cut -d= -f2-) && export WE_MP_RSS_AK=$(grep WE_MP_RSS_AK ../.env | cut -d= -f2) && export WE_MP_RSS_SK=$(grep WE_MP_RSS_SK ../.env | cut -d= -f2)\n3. 运行 python3 -c \"\nimport os, sys\nsys.path.insert(0, '.')\nfrom utils import send_qw_markdown\nfrom fetch_articles import main as fetch_main\n\n# Step 1: Fetch\nfetch_main()\n\n# Step 2: Check pending articles\nfrom utils import load_pending\npending = load_pending()\narticles = pending.get('articles', [])\nnew_articles = [a for a in articles if not a.get('processed')]\n\nif not new_articles:\n    print('No new articles to push')\nelse:\n    # Push each new article\n    count = 0\n    for art in new_articles[:5]:  # max 5 per run\n        title = art.get('title', '无标题')\n        url = art.get('url', '')\n        source = art.get('source', '未知来源')\n        summary = art.get('summary', '')[:200]\n        content = f'## 📰 {title}\\n> 来源：{source}\\n\\n{summary}\\n\\n[阅读原文]({url})'\n        if send_qw_markdown(content):\n            art['processed'] = True\n            count += 1\n            print(f'Pushed: {title[:40]}')\n    \n    from utils import save_pending\n    save_pending(pending)\n    print(f'Total pushed: {count}/{len(new_articles)}')\n\" 2>&1\n\n不用问我任何问题，直接执行。", "schedule": {"kind": "interval", "minutes": 120, "display": "every 120m"}, "deliver": "origin", "last_run_at": "2026-06-22T14:15:39.021781+08:00", "last_status": "ok"}, "eba217dfc155": {"id": "eba217dfc155", "name": "we-mp-rss 登录状态巡检", "prompt": "运行 check_werss_login.py 检查登录状态。脚本会自动处理企微群通知。你只需根据脚本输出做出响应即可——如果 logged_in=true 无需动作，false 时脚本已发企微群通知，你在回复中简单确认即可。", "schedule": {"kind": "cron", "expr": "0 9 * * *", "display": "0 9 * * *"}, "deliver": "origin", "last_run_at": "2026-06-22T09:00:12.176586+08:00", "last_status": "ok"}, "218c1e953f63": {"id": "218c1e953f63", "name": "选题日报", "prompt": "你是广东春季高考（3+证书考试）内容编辑。每天早上分析 we-mp-rss 数据库最近 36 小时文章，生成选题日报直接推送。\n\n步骤：\n1. 查询数据库：复制 ~/project/we-mp-rss-data/db.db 到 /tmp/，查询最近 36 小时文章（articles JOIN feeds，取 title/url/source/publish_time），关库\n2. 加载 ~/project/config/exam_calendar.json，提取未来 14 天内节点（按 days_left 排序）\n3. 分析趋势 + 结合考试日历，推荐 3-5 个选题\n\n输出格式（字节数 ≤4000）：\n📊 今日概况\n[2-3句纯文本]\n\n🔥 值得追的选题\n> 选题1：<选题名>\n> 为什么：<1句>\n> 切入：角度1 / 角度2 / 角度3\n> 参考：<来源>《<标题>》\n\n> 选题2：...\n\n💡 可储备\n> 选题名 — <1句话>\n\n⚠️ 注意\n<结合考试日历的提醒>\n\n全自动执行，不问我任何问题。没有文章就说\"📭 近 36 小时无新文章\"即可。", "schedule": {"kind": "cron", "expr": "0 9 * * *", "display": "0 9 * * *"}, "deliver": "wecom_callback:TuKeXin,wecom_callback:CaoXiaoFen", "last_run_at": "2026-06-22T09:07:31.834699+08:00", "last_status": "ok"}, "472ca7495b44": {"id": "472ca7495b44", "name": "热点雷达", "prompt": "检测 we-mp-rss 数据库中最近 3 小时文章，判断不同公众号（广东中职菌、中职生）是否在同追一个热点话题。\n\n步骤：\n1. 复制 ~/project/we-mp-rss-data/db.db 到 /tmp/，查询最近 3 小时文章（articles JOIN feeds，取 id/title/url/source/publish_time）\n2. 如果文章 < 2 篇 → 静默退出，不输出任何内容\n3. 对比不同来源的标题，找共同话题：不同来源标题有 ≥2 个共同有意义关键词 → 候选\n4. 去重：同一组文章ID可能形成多对，合并\n5. 判断是否真的同追一个事件，去重（查 ~/project/state/hot_radar_sent.json 避免重复推送）\n\n输出格式（有热点才推，没热点什么都不说）：\n🚨 热点预警\n\n**话题名**\n>判断依据\n> [来源1] [文章标题](文章链接)\n> [来源2] [文章标题](文章链接)\n\n推送后更新 ~/project/state/hot_radar_sent.json 记录已推送的文章ID集合。\n\n全自动，不问我任何问题。没热点就静默。", "schedule": {"kind": "cron", "expr": "*/30 8-22 * * *", "display": "*/30 8-22 * * *"}, "deliver": "origin", "last_run_at": "2026-06-22T15:30:32.978678+08:00", "last_status": "ok"}, "533d92e64b59": {"id": "533d92e64b59", "name": "gdcjgk-每日发布", "prompt": "你是广东春季高考信息网(gdcjgk.net)的内容编辑。基于 we-mp-rss 数据库最新文章，自动完成每日文章发布。\n\n## 执行步骤\n\n### 1. 提取选题\n复制数据库: cp ~/project/we-mp-rss-data/db.db /tmp/db.db\n查询最近36小时文章:\nsqlite3 /tmp/db.db \"SELECT a.id, a.title, a.url, a.publish_time, f.mp_name as source, datetime(a.publish_time, 'unixepoch', 'localtime') as ptime_str FROM articles a JOIN feeds f ON a.mp_id=f.id WHERE a.publish_time > strftime('%s', 'now', '-36 hours') ORDER BY a.publish_time DESC\"\n\n### 2. 选题评分（≥7分才入选）\n对每篇候选文章评分：\n- 信息增量 0-5分（文章提供的考生/家长需要的新信息量）\n- 时效性 0-3分（与当前考试时间线的关联度，对照考试日历 ~/project/config/exam_calendar.json）\n- 可改写性 0-2分（能否改写成适合gdcjgk.net受众的原创内容）\n总分 ≥7 分才入选。候选不足5篇就宁缺毋滥少发。\n\n### 3. 撰写文章（800-1000字，严格遵守gdcjgk-style-guide）\n对每个入选选题撰写原创文章：\n- 标题：按gdcjgk-style-guide标题公式（数字型/问答型/时效型）\n- 正文：HTML格式，h2+lead+source结构\n- 必须标注信息来源\n- 关键数据加粗\n- 禁止标题党、禁止空泛框架、禁止无来源信息\n\n### 4. 选择栏目和缩略图\n栏目ID: 3+证书报考=227, 依学考报考=294, 辅导培训=176, 广东政策=198\n缩略图: 从 ~/.hermes/data/image_library.json 随机选一张匹配主题的\n\n### 5. 发布草稿到 CMS\n对每篇文章:\ncurl -s -X POST \"https://gdcjgk.net/addons/cms/api/index\" \\\n  -d \"channel_id={ID}&title={标题}&content={HTML内容}&description={摘要}&status=draft\"\n\n### 6. 通知审核\n生成审核通知（企微Markdown，≤4096 bytes），包含每篇文章的标题、栏目、后台编辑链接。\n\n格式参考gdcjgk-style-guide的「企微群推送（审核通知）」。\n\n## 重要规则\n- 全自动执行，不问我任何问题\n- 没有合格选题就说「📭 今日无可发布选题」即可\n- 宁缺毋滥，绝不降低质量标准凑数\n- 每篇文章写完后自检：标题准确性、数据出处、栏目匹配度", "schedule": {"kind": "cron", "expr": "0 10 * * *", "display": "0 10 * * *"}, "deliver": "wecom_callback:TuKeXin,wecom_callback:CaoXiaoFen", "last_run_at": "2026-06-22T10:10:23.022379+08:00", "last_status": "ok"}}