P1:区分人类 / Agent 工时并记录可评估的工作里程碑
背景
EchoLog 同时面向人和 AI Agent,但目前 records.source=cli|web|api 只表示写入渠道,不能回答:
- 这段工作是人类完成,还是 Agent 完成?
- 人与 Agent 各投入多久,是否并行?
- 一个阶段完成时具体交付了什么,有哪些 commit / Issue / 测试可以证明?
- 后续遇到同类工作时,应该如何根据历史数据估算工作量?
因此需要把“执行者工时”和“里程碑成果”一起建模。只记录时间不够,只记录完成摘要也无法分析投入。
目标
- 分别记录 human 与 agent 的有效工作区间,并关联稳定身份与具体会话。
- 正确表达人机并行、多个 Agent 并行和人机交接,不重复计算墙钟时间。
- 在阶段性完成时记录“完成了哪些工作”、验证结果和成果证据。
- 用相似历史里程碑的投入区间辅助后续工作量估算,但不生成单一生产力分数。
调研结论
关键语义
source 不等于 actor
- 保留
source=cli|web|api 表示写入渠道。
- 新增
actorType=human|agent|unknown 表示实际执行者。
actorId 是稳定身份,例如 sc、codex。
sessionId 是一次具体会话/线程,不与 actorId 混用。
- 一条时间记录只有一种 actor;人机协作由同一根任务下多条可重叠记录表示,不使用含糊的
hybrid。
- 历史数据回填
unknown,不根据 source 猜测。
必须区分的时间指标
humanActiveSeconds:人类有效区间并集。
agentAccumulatedSeconds:所有 Agent 各自运行时间之和,表示计算投入。
agentWallSeconds:全部 Agent 区间并集,表示现实墙钟时间。
humanAgentOverlapSeconds:人与 Agent 同时工作的交集。
elapsedSeconds:从最早开始到里程碑完成的端到端历时。
多个 Agent 并行 30 分钟可以是 60 分钟 accumulated、30 分钟 wall;两者必须同时展示,不能只报一个“总工时”。
里程碑模型
里程碑是一等实体,不等同于普通 note,至少包含:
- 标题、完成摘要、完成时间、关联项目与根任务;
- “完成了哪些工作”的结构化条目;
- 验证状态和质量/影响说明;
- 阻塞、返工、交接等补充信息;
- 可选事前估算或规模标签;
- 创建时的人类/Agent/重叠/历时工时快照;
- 证据列表:
commit | issue | pr | test | doc | artifact | url。
首版一个里程碑关联一个根任务,并聚合其后代记录;以后若确有需求,再扩展多根任务关联,避免重复计时。
候选数据字段
records 扩展
actor_type human | agent | unknown
actor_id nullable stable identity
session_id nullable session/thread id
initiated_by nullable delegator identity
milestones / milestone_evidence
milestones:
id, title, summary, project, root_record_id, completed_at
created_by_actor_type, created_by_actor_id
verification_status, impact, quality_notes, blockers, rework_notes
estimate_seconds/size, effort_snapshot
milestone_evidence:
milestone_id, kind, ref, label, status, metadata
产品范围
API / Core
- records 创建、补录、编辑、过滤支持 actor 字段。
- summary 按 actor 聚合,并计算 accumulated / wall / overlap / elapsed。
- 增加 milestones 与 evidence 的创建、查询接口。
- pause 仍从有效区间扣除;父子任务继续作为里程碑聚合边界。
CLI / Agent
el start "实现缓存" --actor agent --actor-id codex --session <session-id> --parent <root-id>
el log --actor agent
el milestone add --record <root-id> --title "完成缓存层" \
--summary "完成读写缓存、失效策略和回归测试" \
--evidence commit:<sha> --evidence test:"pnpm test"
el milestone show <id>
- CLI 人工启动默认 human;API 默认 unknown;Agent 集成必须显式传 actor。
- JSON 输出透传完整 actor、session、milestone 和 effort 数据。
Web / 报告
- 活跃与历史记录显示“人 / Agent / 未知”及 actor 名称。
- 同一任务用双轨时间线展示人类、Agent 和重叠区间。
- 里程碑卡片展示完成事项、证据、验证结果和五种时间指标。
- 日报增加“今日里程碑”和“人机协作投入”。
- 历史估算按项目、标签、任务类型或规模查找相似里程碑,展示 P50/P80 与样本数,不只展示平均值。
隐私与边界
- 默认只记录会话元数据、时长、摘要和成果引用。
- 不默认保存 prompt、模型回复、推理过程或完整工具参数;内容采集必须显式 opt-in。
- 不把 token、工时、提交数或代码行数单独用作生产力评价。
- 不把 Agent 运行时间直接换算为“节省了多少人类时间”。
建议拆分
验收标准
实施顺序
优先完成 actor 数据契约和时间算法,再实现里程碑,最后接 Web 与估算。开始开发前将本 Issue 拆成可独立验收的 Trellis/GitHub 子任务。
P1:区分人类 / Agent 工时并记录可评估的工作里程碑
背景
EchoLog 同时面向人和 AI Agent,但目前
records.source=cli|web|api只表示写入渠道,不能回答:因此需要把“执行者工时”和“里程碑成果”一起建模。只记录时间不够,只记录完成摘要也无法分析投入。
目标
调研结论
关键语义
source 不等于 actor
source=cli|web|api表示写入渠道。actorType=human|agent|unknown表示实际执行者。actorId是稳定身份,例如sc、codex。sessionId是一次具体会话/线程,不与 actorId 混用。hybrid。unknown,不根据 source 猜测。必须区分的时间指标
humanActiveSeconds:人类有效区间并集。agentAccumulatedSeconds:所有 Agent 各自运行时间之和,表示计算投入。agentWallSeconds:全部 Agent 区间并集,表示现实墙钟时间。humanAgentOverlapSeconds:人与 Agent 同时工作的交集。elapsedSeconds:从最早开始到里程碑完成的端到端历时。多个 Agent 并行 30 分钟可以是 60 分钟 accumulated、30 分钟 wall;两者必须同时展示,不能只报一个“总工时”。
里程碑模型
里程碑是一等实体,不等同于普通 note,至少包含:
commit | issue | pr | test | doc | artifact | url。首版一个里程碑关联一个根任务,并聚合其后代记录;以后若确有需求,再扩展多根任务关联,避免重复计时。
候选数据字段
records 扩展
milestones / milestone_evidence
产品范围
API / Core
CLI / Agent
Web / 报告
隐私与边界
建议拆分
验收标准
实施顺序
优先完成 actor 数据契约和时间算法,再实现里程碑,最后接 Web 与估算。开始开发前将本 Issue 拆成可独立验收的 Trellis/GitHub 子任务。