name: fmode-task-progress description: "任务进度四态上报+成果交付入库:init-tables 初始化 FmodeAgent/AgentTaskStatus/AgentDeliverable 三表,progress 上报 ack→running→done/failed+心跳,deliver 把交付链接上报入库(幂等覆盖),status 查询本 agent/全集群视角。适用:(1) Agent 干活要让平台 App/看板实时可见 (2) 任务有交付物需交付即报 (3) 集群进度巡检。"
装上本技能,你的 Agent 干活进度与成果交付即刻进入 FmodeAgent 平台(App 四 Tab / 看板实时可见)。 来源:FmodeAgent 集群实战验证的「任务进度上报+成果交付上报」能力(agent-status-reporter 家族)。
# 1. 初始化/校验三表(幂等,可重跑)
node skills/fmode-task-progress/scripts/init-tables.mjs
# 2. 任务四态上报
node scripts/progress.mjs ack --agent my-agent --task task-001 --name "课纲修订"
node scripts/progress.mjs running --agent my-agent --task task-001
node scripts/progress.mjs done --agent my-agent --task task-001 --note "已验收"
# 失败时
node scripts/progress.mjs failed --agent my-agent --task task-001 --note "API 403,待充值"
# 3. running 心跳保鲜(30s 无心跳=疑似死亡,调度层会主动查)
node scripts/progress.mjs heartbeat --agent my-agent --task task-001
# 4. 交付即报(有交付物+链接就立即报,每章/每版/每次部署各一条)
node scripts/deliver.mjs --agent my-agent --task task-001 \
--title "课纲 v1.0.6" --url "https://s3.fmode.cn/xxx/index.html" \
--type courseware --project warmup --summary "修订完成已验收"
# 5. 查询
node scripts/status.mjs mine --agent my-agent # 本 agent 最近任务+交付
node scripts/status.mjs all # 全集群(masterKey 视角)
四级解析(parse-client.mjs 统一实现,找不到时报指引退出,绝不猜):
| 级 | 来源 | 场景 |
|---|---|---|
| 1 | 环境变量 PARSE_APP_ID / PARSE_MASTER_KEY(PARSE_SERVER_URL 可覆盖地址) |
CI/容器 |
| 2 | ~/.fmode/config.json → parse 段 {appId, masterKey} |
个人开发机 |
| 3 | future-server/config/config.nova.json → parse 段 |
平台开发机标准位置 |
| 4 | 以上皆无 → 打印配置指引,退出码 2 | —— |
密钥红线:config.nova.json 凭据绝不入 git;本技能脚本零硬编码,凭据只在运行时读取。
| 表 | 作用 | 关键字段 |
|---|---|---|
FmodeAgent |
Agent 注册+心跳 | agentId / soulSummary / containerRef / lastHeartbeat(Date) / status / scope |
AgentTaskStatus |
任务四态 | agentId / taskId / taskName / status(ack|running|done|failed) / startedAt / endedAt / heartbeatAt / resultNote |
AgentDeliverable |
成果 | agentId / taskId / title / project / deliverableType(report|code|courseware|data) / url / summary / deliveredAt(Date) |
数据流:Agent 上报 → Parse 表 → App 四 Tab / 看板(scope 三视角 mine/company/all)。
写 Date 类型字段(lastHeartbeat/startedAt/endedAt/heartbeatAt/deliveredAt)时:
# ✗ 错误:裸字符串 → Parse 报 code=111 schema 不匹配
{"startedAt": "2026-09-12T08:00:00.000Z"}
# ✓ 正确:__type Date 包装
{"startedAt": {"__type": "Date", "iso": "2026-09-12T08:00:00.000Z"}}
实测(2026-09-12,server.fmode.cn/parse):
AgentTaskStatus.startedAt → code=111("Expected Date" 类错误){"__type":"Date","iso":"..."}本技能所有脚本统一走 parse-client.mjs 的 wrapDate(),自己拼 JSON 直连 REST 时必须记得包装。
同类包装:Pointer 字段 {"__type":"Pointer","className":"Company","objectId":"xxx"}。
交付即报:
--delivered-at 补录真实交付时间进度四态+心跳:
| 状态 | 触发 | 记录 |
|---|---|---|
| ack | 接任务回执 | taskName / startedAt |
| running | 开工 | heartbeatAt 保鲜 |
| done | 完成+验收过 | endedAt + resultNote |
| failed | 失败/超时/验收不过 | endedAt + 根因(不掩盖) |
| heartbeat | running 期间每 30s | 只刷 heartbeatAt |
git clone https://git.fmode.cn/fmode/skill-task-progress.git
cp -r skill-task-progress/skills/fmode-task-progress ~/.hermes/skills/
git clone https://github.com/fmodecn/skill-task-progress.git
cp -r skill-task-progress/skills/fmode-task-progress ~/.claude/skills/ # 或 ~/.codex/skills/
复制 skills/fmode-task-progress 到对应技能目录,README 按工具规范并入。
| 症状 | 根因 | 对策 |
|---|---|---|
code=111 schema 错 |
Date 字段裸字符串 | 走 wrapDate()(本技能脚本已内置),手拼 JSON 记得 __type 包装 |
| 凭据报错退出码 2 | 四级链全空 | 按报错指引配 env 或 ~/.fmode/config.json parse 段 |
| 重复成果条目 | 未用幂等覆盖键 | deliver.mjs 按 agentId+taskId+deliverableType upsert,勿绕过 |
| 查询 403 | REST masterKey 不在环境 | 走四级凭据链,勿用过期 sessionToken |