Commit Graph

71 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
76c873694e test: guard against redundant kanban reload after atomic update
Co-authored-by: cft0808 <41196455+cft0808@users.noreply.github.com>
2026-03-03 15:10:23 +00:00
copilot-swe-agent[bot]
037bbbd7a6 fix: avoid redundant kanban file rewrite after atomic update
Co-authored-by: cft0808 <41196455+cft0808@users.noreply.github.com>
2026-03-03 15:08:38 +00:00
copilot-swe-agent[bot]
c93f95ee4d Initial plan 2026-03-03 15:06:24 +00:00
cft0808
7670460bde fix: install.sh 安装前自动备份已有 Agent 数据,防止覆盖用户配置
问题:社区反馈安装时覆盖了已有自定义 Agent(如龙虾角色)的 SOUL.md
修复:
- 新增 backup_existing() 步骤,安装前自动备份所有 workspace 到 ~/.openclaw/backups/
- create_workspaces() 覆盖 SOUL.md 前先备份旧文件为 .bak
- 备份包含:workspace 目录、openclaw.json、agents 注册信息
- 输出恢复命令提示,方便用户回滚
2026-03-02 23:07:25 +08:00
cft0808
cac40c122f chore: fix docker-compose image name to match docker build 2026-03-02 07:30:05 +08:00
cft0808
29fae3fb25 feat(ui): implement remote skills management panel 2026-03-02 07:28:15 +08:00
cft0808
709e163932 feat: 添加远程 Skills 资源管理功能
新增远程 skill 管理系统,支持从 GitHub/HTTPS URL 获取:
- API 端点: add-remote-skill, remote-skills-list, update-remote-skill, remove-remote-skill
- CLI 工具: scripts/skill_manager.py (add-remote, list-remote, update-remote, remove-remote, import-official-hub)
- 文档: remote-skills-guide.md 和 remote-skills-quickstart.md
- 功能: 安全验证、YAML 校验、版本管理、多渠道操作
2026-03-02 06:21:28 +08:00
cft0808
b28e665ff2 docs: 添加任务分发流转完整架构文档 + 更新README
- 新增 docs/task-dispatch-architecture.md (9500+ 字,为什么三省六部如此强大的完整剖析)
- 包含业务+技术双重架构、API文档、故障处理、使用案例、对标对比
- 更新 README.md 导航栏、项目结构、新增深入了解部分
2026-03-02 06:11:33 +08:00
cft0808
5bf2aa6c62 fix: 天下要闻采集后自动刷新
根因: refreshNews() 用固定 setTimeout(45s) 等待采集完成,
期间无轮询反馈,用户看不到更新。loadAll() 5秒轮询
也不包含 loadMorning(),在要闻页面停留不会自动刷新。

修复:
- refreshNews: 采集前记录旧时间戳,采集后每5秒轮询API
  检测 generated_at 是否变化,一旦检测到更新立即刷新
  页面并提示成功(最长2分钟超时)
- loadAll: 在天下要闻 tab 且不在采集轮询中时,随5秒
  周期自动刷新要闻数据
2026-03-01 15:47:45 +08:00
cft0808
1691ac1a2e feat: 推进后自动派发Agent + Todo详情展开
1. 自动流转机制:
   - 新增 dispatch_for_state() 函数,根据状态自动匹配并派发 Agent
   - handle_advance_state() 手动推进后自动派发对应 Agent(不再只改状态)
   - handle_review_action() 准奏/封驳后自动派发下一环节 Agent
   - 每个状态对应针对性的派发消息(含任务ID+标题+上下文)
   - 后台异步派发,带2次重试 + Gateway 存活检测

2. Todo 子任务详情功能:
   - kanban_update.py cmd_todo() 新增 detail 参数(--detail 标志)
   - 前端 todo-item 支持点击展开/收起详情
   - 有详情的 todo 显示 ▶ 展开箭头,点击展开显示产出内容

3. Agent SOUL 文件更新:
   - 中书省/尚书省/六部(工兵户礼刑)均添加 todo --detail 命令说明
   - 指引Agent在完成子任务时上报具体产出详情
2026-03-01 14:58:22 +08:00
cft0808
b7ad34a8d1 fix: 修复任务卡住根因 — agent ID main→taizi + 派发重试
根因分析:
1. dispatch_to_agent 使用 --agent main,但 main 未注册到 Gateway
   → 每次派发静默失败: Unknown agent id "main"
2. LLM provider 偶发超时导致单次派发丢失
3. 僵尸 openclaw-agent 进程残留

修复:
- dispatch_to_agent: --agent main → --agent taizi(Gateway 注册名)
- wake_agent: 移除 taizi→main 映射,直接使用 agent_id
- _STATE_AGENT_MAP: Taizi 映射从 main 改为 taizi
- _AGENT_DEPTS: 移除重复的 main 条目
- dispatch_to_agent: 增加最多3次重试(指数退避 5s/10s)
- wake_agent: 增加最多2次重试
- 分离 TimeoutExpired 异常处理,日志更明确
2026-03-01 14:42:57 +08:00
cft0808
df13cbdfd8 feat: Agent 在线状态检测 + 唤醒 + 前置校验
server.py:
- 新增 get_agents_status(): 检测 Gateway 进程/probe + 各 Agent 状态
  - 读取 sessions.json 判断最后活跃时间 → running/idle/offline/unconfigured
  - 检测 openclaw-agent 进程、workspace 是否存在
  - Gateway HTTP probe (ws://127.0.0.1:18789)
- 新增 wake_agent(): 通过 openclaw agent --agent 发送唤醒消息
- 新增 /api/agents-status GET 端点
- 新增 /api/agent-wake POST 端点
- dispatch_to_agent 前置 Gateway 存活检查

dashboard.html:
- 省部调度 Tab 新增 Agent 状态面板
  - 12个 Agent 卡片,实时显示在线状态 (绿/黄/灰/红)
  - Gateway 状态指示器
  - 单个唤醒按钮 + 全部唤醒按钮
  - 运行中/待命/离线/未配置 汇总统计
- 切换到省部调度 Tab 自动加载状态
- 下旨前前置检测 Gateway 是否在线,不在线时警告
2026-03-01 13:40:57 +08:00
cft0808
3272b2639f feat: 五项功能增强 — 数据补全/阶段耗时/Todos进度/Done回顾/资源上报
server.py:
- get_task_activity 返回 taskMeta (title/state/org/output/block/priority等)
- 新增 _compute_phase_durations: 各阶段停留时长 + 总耗时
- 新增 _compute_todos_summary: 完成率汇总 (total/completed/percent)
- 新增 _compute_todos_diff: 连续 todos 快照差异 (changed/added/removed)
- progress/todos 条目保留 state/org 快照
- resourceSummary 汇总 tokens/cost/elapsed

kanban_update.py:
- cmd_progress 新增 tokens/cost/elapsed 可选参数
- CLI 解析 --tokens/--cost/--elapsed 标志
- 资源数据有值才写入 progress_log

dashboard.html:
- Done/Cancelled 任务显示"执行回顾"(单次拉取不轮询)
- 阶段耗时时间线条形图 + 总耗时
- Todos 进度条 (百分比 + 三色条)
- 资源消耗汇总卡片 (tokens/cost/elapsed)
- Todos diff 高亮: 新增🆕/完成/变更↻/删除🗑
2026-03-01 13:15:21 +08:00
cft0808
b7bf616f06 refactor: 全面安全加固与代码优化 - TOCTOU竞态修复/CORS/XXE/SSRF/路径遍历/Docker加固 2026-03-01 12:59:24 +08:00
cft0808
5af9a581f4 fix: 修复get_task_activity逻辑问题 - agent归属判定优先状态映射
- agent_id不再被progress_log最后一条记录无条件覆盖
- 仅当状态映射无法确定agent时才降级使用最后上报者
- related_agents始终包含当前负责agent
- dashboard/kanban_update多处增量改进
2026-03-01 09:02:51 +08:00
cft0808
f6191381b4 fix: 中书省SOUL增加项目路径+角色定位,修复flow覆盖now字段的bug
1. zhongshu SOUL.md: 增加项目仓库路径说明(agent workspace无.git)
2. zhongshu SOUL.md: 明确中书省只负责'规划'不负责'执行'
3. kanban_update.py: cmd_flow()不再覆盖now字段(now由progress/state/done管理)
2026-02-27 23:32:22 +08:00
cft0808
a5befd26c5 fix: 实时动态改为展示Agent自报进展,移除session日志抓取
- get_task_activity() 完全重写:只展示 flow_log + now(progress) + todos
- 不再从Agent session JSONL中抓对话日志(消除驴唇不对马嘴问题)
- 前端新增 flow/progress/todos 三种条目渲染
- 创建任务默认now改为'等待中书省接旨'(不再用套话'正在规划')
2026-02-27 23:09:50 +08:00
cft0808
88ef18076b feat: Agent自主进展上报 - progress命令 + 移除被动日志抓取
核心变更:
- kanban_update.py: 新增 progress 命令,Agent可主动上报当前思考/计划/进展
  - now_text 更新看板动态,todos_pipe 解析为计划清单
  - 支持 (completed) / 🔄(in-progress) 状态标记
- sync_from_openclaw_runtime.py: 移除 agent_activity_map 被动抓取逻辑
  - JJC任务的now字段不再从会话日志中抓取,改由Agent主动上报
  - 仅保留JJC任务合并逻辑,不做activity映射
- 10个Agent SOUL.md: 全部新增「📡 实时进展上报」章节
  - 每个Agent都有具体的上报时机和命令示例
  - 中书省最详尽(6个步骤的完整progress示例)
  - 六部各有领域特定的上报示例

架构转变: 被动日志抓取 → Agent主动self-report
2026-02-27 22:57:23 +08:00
cft0808
8574607c93 fix: 补全detect_official映射 + 自动同步scripts到workspace 2026-02-27 22:09:08 +08:00
cft0808
ef4b31439f docs: 明确12-agent口径(11业务角色+1兼容角色) 2026-02-27 21:51:29 +08:00
cft0808
8ad2b512c3 fix: 对齐文档与OpenClaw实现链路(安装/同步/统计)
- install.sh: workspace与agent注册补齐太子/吏部/早朝
- sync_agent_config.py: 增加__main__入口,修正taizi映射,兼容model对象结构
- sync_officials_stats.py: 兼容model对象结构,修复TypeError,太子ID改为taizi并保留main兼容
- README_EN.md: 修正Quick Start里旧的9-workspace描述
2026-02-27 21:49:58 +08:00
cft0808
f194c6b9e1 fix: 修复CI中test_kanban和test_server失败
- test_kanban: 标题'测试任务'(4字)被_MIN_TITLE_LEN=6拒绝,改为更长标题
- test_server: healthz在空数据下返回degraded是正常行为,放宽断言
2026-02-27 21:40:10 +08:00
cft0808
3505486e74 fix: 重构E2E测试为标准pytest格式 — 解决SystemExit崩溃
原测试在模块级别直接执行逻辑并sys.exit(),
pytest import时触发SystemExit导致INTERNALERROR。

重构:
- 每个测试场景独立为 test_* 函数(9个)
- 用 pytest fixture autouse 做 backup/restore
- 每个测试用独立ID避免互相依赖
- 保留 __main__ 入口支持直接运行
2026-02-27 21:37:40 +08:00
cft0808
a6fd9b9b95 fix: CI测试 FileExistsError — 移除git中的遗留data符号链接
根因:'data' 被git跟踪为符号链接(指向旧路径 /Users/bingsen/clawd/junjichu-v2/data),
CI clone后变成普通文件,mkdir报FileExistsError。

修复:
1. git rm --cached data,从版本控制移除
2. .gitignore 追加 data 条目
3. 测试代码:若 data 路径存在但不是目录,先 unlink 再 mkdir
2026-02-27 21:34:14 +08:00
cft0808
6bd643f3e8 fix: E2E测试兼容CI环境 — data目录不存在时自动创建空文件
CI环境没有 data/tasks_source.json(被gitignore),
模块加载时 read_text() 直接报 FileNotFoundError。
现在先 mkdir + 写入空 [] 再备份。
2026-02-27 21:30:54 +08:00
cft0808
24a4e2cd4e feat: 首页添加演示视频 — Demo 区域视频优先展示
- README.md/README_EN.md: Demo 区域改为视频优先 + GIF 折叠备用
- 新增 docs/Agent_video_Pippit_20260225121727.mp4(37MB)
2026-02-27 21:25:32 +08:00
cft0808
5dc38232e4 assets: 重新截图全部11张面板 + 重录demo GIF
- 11张截图反映最新看板UI(12部制、太子分拣、数据清洗等)
- demo.gif 重新录制(3.2MB,9个场景)
- screenshots/README.md 更新截图清单与自动化命令
2026-02-27 21:22:41 +08:00
cft0808
e75bda0f3d docs: 全面更新文档 — 十二部制 + 太子分拣 + 数据清洗 + E2E测试
- README.md/README_EN.md: Agent 数量 9→12, 架构图增加太子分拣层+吏部,
  角色表扩展(太子/吏部/早朝官), 权限矩阵增加太子列,
  状态机增加分拣步骤, 项目结构更新行数和新目录
- ROADMAP.md: Phase 1 九部制→十二部制, 新增4项已完成里程碑
- CONTRIBUTING.md: 项目结构表更新行数, 增加kanban_update.py和tests,
  测试章节增加E2E测试命令
- docs/getting-started.md: 入口Agent切换为太子, 任务流增加分拣步骤,
  安装清单9→12 agents
2026-02-27 21:18:54 +08:00
cft0808
a95eec05fe fix: remark也剥离下旨前缀 + 添加端到端测试(17/17) 2026-02-27 21:01:08 +08:00
cft0808
64c53829c5 fix: 根治旨意脏标题问题 — 太子SOUL严格化+kanban深度清洗
根因:太子Agent把飞书原始消息(含文件路径/Conversation元数据)直接
粘贴为任务标题/备注,还会自造术语如'自动预建'

修复:
1. 太子 SOUL.md — 加入严格标题规则(6条禁令+正反例),强制自己用
   中文概括而不是粘贴原文
2. kanban_update.py — _sanitize_title() 增加文件路径剥离、URL剥离、
   全角括号前缀匹配、系统元数据清洗;新增 _sanitize_remark() 对
   flow_log remark 同样清洗;_is_valid_task_title() 增加文件路径
   检测拒绝;_MIN_TITLE_LEN 10→6
3. 中书省 SOUL.md — 补充反脏数据规则

数据清理:
- 删除 JJC-20260227-004(文件路径标题)
- 修正 JJC-20260227-002 Zhongshu→Cancelled(已有取消流但状态未同步)
2026-02-27 20:58:21 +08:00
cft0808
81bb9c771f fix: 防止重复创建旨意任务 + 清理脏标题
问题:太子和中书省各调 kanban create 创建了两个相同任务
(JJC-002 和 JJC-004),且标题带'传旨:'前缀和元数据。

修复:
- zhongshu SOUL: 如果太子已提供任务ID,直接用 state 更新,
  不重复 create
- kanban_update.py: create 禁止覆盖 Done/Cancelled 状态的
  任务,提示用新ID
- _sanitize_title(): 新增剥离'传旨:'/'下旨:'前缀
- server.py: handle_create_task 同步添加前缀清理
- 清理了重复的 JJC-004 和垃圾 JJC-005
2026-02-27 20:28:42 +08:00
cft0808
5d3359dbf4 feat: 活跃任务展示 Agent 最新工作动态
当任务处于活跃状态(中书/门下/尚书/执行中等)但无精确匹配的活动
记录时,自动展示该 Agent 最新一轮对话段的实时动态。

- 新增 get_agent_latest_segment(): 读取 Agent 最新 session 的
  最后一条 user 消息起的对话内容
- 三级匹配策略: task_id精确 → 关键词匹配 → Agent最新对话段
- API 返回 activitySource 字段标识来源
  (task/keyword/agent_latest)
- Dashboard 显示黄色提示横幅区分 Agent 最新活动 vs 任务精确活动
2026-02-27 20:17:03 +08:00
cft0808
0c8ed57ee1 fix: 实时动态面板 — 关键词+对话段匹配替代盲目fallback
问题:任务的实时动态面板显示了其他对话/任务的活动(如 HEARTBEAT、早朝简报)。
根因:task_id 未匹配时,fallback 盲目返回 agent 最近全部活动。

修复:
- 新增 _extract_keywords():从任务标题提取 2-4 字中文词+英文词作为关键词
- 新增 get_agent_activity_by_keywords():
  1. 按关键词找到匹配的 session 文件
  2. 在 session 内按 user 消息分割对话段
  3. 只返回关键词匹配度最高的对话段内的活动
- 删除盲目 fallback(get_agent_activity(task_id=None))
- OC-* 任务直接读其关联的 session 文件
2026-02-27 20:11:51 +08:00
cft0808
e1314fb2e5 fix: 看板综合修复 — Pipeline/标题/kanban脚本/实时动态 2026-02-27 19:58:32 +08:00
cft0808
4791f4bfc9 fix: 实时活动面板修复 — 补全 Next/Pending 状态映射
- _STATE_AGENT_MAP 新增 Next(从org推断) 和 Pending(默认zhongshu)
- _ORG_AGENT_MAP 新增 中书省/门下省/尚书省 映射
- _STATE_FLOW 新增 Pending→Taizi 和 Next→Doing 推进路径
- _STATE_LABELS 补全 Pending/Next
- 修复 state=='Doing' 才走 org 推断的限制, 扩展到 Next 状态
2026-02-27 19:38:20 +08:00
cft0808
fe7c06ca00 fix: 修复任务卡住 — 三省改用 subagent 链式调用
根因:中书省收到门下省准奏后,没有转发给尚书省就结束了。
流程断在中书→尚书这一环,外加模型频繁超时导致打转。

修复:
1. 中书省 SOUL:
   - 强制 4 步流程(接旨→门下审议→尚书执行→回奏)
   - 改 sessions_send 为 subagent 调用(同步等结果)
   - 加防卡检查清单:门下准奏后必须立即调尚书省
   - 精简指令(减少超时)

2. 门下省 SOUL:
   - 明确标注 subagent 角色(直接返回结果)
   - 精简审议结论(200字以内)
   - 去掉 sessions_send 引用

3. 尚书省 SOUL + dispatch SKILL:
   - 明确标注 subagent 角色
   - 简化为:分析→调用六部subagent→汇总返回
   - 去掉旧的五步流转协议

已验证:zhongshu→menxia(准奏)→shangshu(执行)→返回 全链路17秒内完成
2026-02-27 00:47:51 +08:00
cft0808
11f15db16f feat: 添加吏部(libu_hr) + 自动部署所有 SOUL.md
1. 吏部 agent:
   - 新建 agents/libu_hr/SOUL.md (人事/培训/Agent管理)
   - 注册到 openclaw.json (shangshu.allowAgents += libu_hr)
   - 添加到 sync_agent_config/sync_officials_stats/server.py/dashboard.html
   - 更新尚书省 dispatch SKILL.md 部门能力索引
   - 所有六部 SOUL.md 中'吏部暂空'→'吏部(libu_hr)负责人事/培训'

2. 自动 SOUL.md 部署:
   - sync_agent_config.py 新增 deploy_soul_files()
   - 每次同步自动将项目 agents/xxx/SOUL.md → workspace soul.md
   - 处理 taizi→main 名称映射
   - 只在内容变更时写入,确保 sessions 目录存在
   - 修复: xingbu 缺 sessions dir, main 缺 workspace

完整阵容 11 个: 🤴太子 + 三省(📜📍📮) + 六部(📝💰⚔️⚖️🔧👔) + 📰钦天监
2026-02-27 00:17:31 +08:00
cft0808
19886035d4 fix: 补全太子(main)+钦天监(zaochao) agent 配置
- 部署 agents/taizi/SOUL.md → ~/.openclaw/agents/main/SOUL.md
  太子之前在裸跑,没有任何指令/人设
- sync_agent_config.py: ID_LABEL 新增 main, 补充 EXTRA_AGENTS 逻辑
  处理不在 openclaw.json agents list 中的 agent (main=默认, zaochao=独立)
- sync_officials_stats.py: OFFICIALS 列表加入 main(太子)
- dashboard.html: _agentLabels 加入 zaochao
- agent_config.json: 8→10 agents, officials_stats: 9→10
2026-02-27 00:03:35 +08:00
cft0808
21ffb94335 fix: 活动面板按任务ID过滤 + 派发改走太子Agent
问题1: 实时动态面板显示所有对话,不是该任务的也在
  - get_agent_activity() 新增 task_id 参数,过滤内容含任务ID的条目
  - get_task_activity() 搜索所有相关Agent的session(从flow_log推断)
  - 跨多个session文件搜索(最近3个),按时间排序
  - 前端显示agent来源标签(中书省/门下省/太子等)

问题2: 模板旨意派发后依然卡住
  - dispatch_to_agent 改为发送给 main agent(太子)而非zhongshu
  - 太子是入口Agent,走正常流程: 太子→中书省→门下省→尚书省
  - 消息明确标注'看板已有记录,请勿重复创建'避免重复建任务
2026-02-26 23:48:43 +08:00
cft0808
b6ad8d1646 feat: 实时动态面板 + 模板旨意自动派发
1. 自动派发: 模板创建旨意后自动发送给中书省 Agent 执行
   - handle_create_task 添加 dispatch_to_agent() 后台线程
   - 通过 openclaw agent CLI 触发 zhongshu agent

2. 实时动态 API:
   - GET /api/task-activity/<task_id> 获取任务关联 Agent 活动
   - GET /api/agent-activity/<agent_id> 获取 Agent 最新活动
   - 从 ~/.openclaw/agents/<id>/sessions/*.jsonl 读取
   - 解析 assistant/tool_use/toolResult/user 消息

3. Dashboard 实时动态面板:
   - 任务详情模态框底部显示 Agent 实时活动日志
   - 每 4 秒自动刷新, 类似 VS Code Copilot 实时输出
   - 图标区分: 🤖助手 💭思考 🔧工具 结果 📥用户
   - 自动检测活跃状态(5分钟内有活动=绿灯)
   - 关闭模态框自动停止轮询
2026-02-26 23:23:04 +08:00
cft0808
434ba2ebc0 fix: 任务创建时org应为中书省而非模板执行部门
- server.py: handle_create_task 创建时 org 固定为中书省
  模板执行部门改存 targetDept 供尚书省派发参考
- kanban_update.py: cmd_create 根据 STATE_ORG_MAP 推导 org
  cmd_state 更新状态时自动同步 org 字段
- dashboard.html: executeTemplate 传 org=中书省, targetDept=模板部门
- 修复已有任务 JJC-20260226-011 数据(兵部→中书省)
2026-02-26 23:05:30 +08:00
cft0808
8a639991f8 fix: 修复dashboard.html JS语法错误导致页面空白
模板字面量中 ${ } 表达式缺少闭合花括号,导致整个 script 块无法执行
2026-02-26 22:57:52 +08:00
cft0808
3b87c30efa refactor: 严格三省六部制流程 - 新增太子分拣+门下回传中书
- 新增 agents/taizi/SOUL.md: 太子角色负责分拣飞书消息
- 重写 zhongshu SOUL.md: 接收太子需求起草方案送门下审议
- 重写 menxia SOUL.md: 审议后封驳结果回传中书省
- 重写 shangshu SOUL.md: 接收准奏方案分派六部汇总回太子
- 重写五部 SOUL.md: 全部改用 CLI 命令
- dashboard/server/kanban 新增 Taizi 状态支持

完整流程: 皇上-太子(分拣)-中书(起草)-门下(审议)-尚书(派发)-六部(执行)-尚书(汇总)-太子(回奏)-皇上
2026-02-26 22:48:47 +08:00
cft0808
f26127af75 fix: 修复任务流程卡住问题 — SOUL.md 全面改用 CLI 命令
根因:SOUL.md 中的内联 Python 用 pathlib.Path(__file__) 定位路径,
但 Agent 运行时 __file__ 不是 SOUL.md 路径,导致看板更新静默失败,
任务永远卡在 Zhongshu 状态。

修复:
- zhongshu/SOUL.md: 所有看板操作改用 kanban_update.py CLI 命令
- menxia/SOUL.md: 封驳/准奏操作改用 CLI 命令
- shangshu/SOUL.md: Doing/Review/Done 操作改用 CLI 命令
- 三个 SOUL.md 均加 ⚠️ 警告提示禁止自行读写 JSON
- server.py: 新增 /api/advance-state 手动推进接口
- dashboard.html: 新增「 推进到下一步」按钮(解卡用)
2026-02-26 22:10:24 +08:00
cft0808
d8a935196c fix: 防止闲聊被误建为旨意任务
- SOUL.md 增加旨意vs闲聊判定规则(最高优先级)
- kanban_update.py 增加标题质量校验(最短10字、垃圾词过滤、纯标点拒绝)
- server.py create-task API 增加同样校验
- 清理21条垃圾/重复JJC任务(否/?/开启了么/11条重复传旨调研等)
2026-02-26 21:57:36 +08:00
cft0808
b8d06a3972 feat: 完成全部剩余功能修复 (P0-P3)
P0:
- 圣旨模板下旨真正创建任务: 新增 POST /api/create-task
  前端 executeTemplate 改为 API 调用(降级仍可剪贴板复制)

P1:
- morning-config POST 字段校验: 检查 categories/keywords/feishu_webhook 类型
- 早报幂等锁支持 --force 强制采集: 看板手动刷新默认 force=true
- sync_agent_config 补全 Copilot 模型列表(6个)

P2:
- utils.py 公共函数抽取: read_json/now_iso/validate_url/safe_name
- refresh_live_data.py 改用 utils.read_json 消除重复定义
- apply_model_changes 回滚标记: 失败时 rolledBack=true 写入日志+前端展示
- 早报日期 API 兼容 YYYY-MM-DD 自动转换 + 格式校验
- Request logging: log_message 改为只记录 4xx/5xx 错误请求
- 飞书 Webhook URL 校验: 限制 https + open.feishu.cn 域名

P3:
- 御批模式基础实现: Review/Menxia 状态显示准奏/封驳按钮
  新增 POST /api/review-action(approve推进/reject退回中书省+轮次+1)
  前端 reviewAction() + 变更日志回滚标记显示
2026-02-26 21:42:13 +08:00
cft0808
ff9ae7937f fix: 批量修复 P0-P2 功能缺陷
P0 修复:
- server.py 使用 file_lock 原子读写 tasks_source.json,防止并发数据丢失
- todayDone 统计改为按日期过滤,不再统计所有 Done 任务
- save_tasks() 的 Popen 加异常捕获

P1 修复:
- 模型列表动态化:优先从后端 knownModels 获取,不再纯硬编码
- 省部调度 Tab 补充钦天监 (zaochao) 部门
- 小任务筛选补充 刑部/门下省/钦天监 按钮
- 官员数据在 loadLive 时提前加载,省部调度不再显示'待配置'
- Docker demo 数据补全 tasks_source.json + morning_brief.json

P2 修复:
- 奏折复制补充 开始/完成时间、总耗时、磋商轮次
- /healthz 增强:检查 data 目录可写、tasks 文件可读
- metrics 新增 totalDone 字段区分总完成数和今日完成数
2026-02-26 21:21:58 +08:00
cft0808
efd36ab729 feat: 添加 Copilot 模型配置 + 旨意看板归档功能
模型配置:
- 新增 Copilot 系列模型 (Claude Sonnet 4, Claude Opus 4.5, GPT-4o, Gemini 2.5 Pro, o3-mini)
- 新增 github-copilot/claude-opus-4.6 模型

旨意看板归档:
- 看板顶部新增筛选栏: 进行中 / 已归档 / 全部
- Done/Cancelled 状态自动归入归档视图
- 支持单条归档/取消归档操作
- 支持一键归档所有已完成任务
- 归档卡片虚线边框半透明展示
- Tab 徽章仅统计活跃旨意数

其他:
- agents SOUL.md 更新
- 脚本健壮性改进 (file_lock, refresh, sync)
2026-02-26 21:09:05 +08:00
cft0808
a4417abb56 feat: killer README hooks, Demo GIF, ROADMAP.md, examples/ with 3 use cases
- Rewrite README/README_EN opening with cognitive conflict hook
- Add 门下省 review mechanism callout (collapsible)
- Record 30s Demo GIF (800px, 4.6MB) via Playwright
- Create standalone ROADMAP.md with Phase 1/2/3 structure
- Add examples/: competitive analysis, code review, weekly report
- Add Star History chart
- Restructure inline Roadmap into phases
- Add examples reference section in both READMEs
2026-02-25 00:29:39 +08:00
cft0808
3cbc624f94 docs: update all 11 dashboard screenshots + README references 2026-02-25 00:13:50 +08:00