三个周报 Workflow 与 weekly_report 路由入口

面向开发与验收。目标是可独立运行、可组合、可恢复的代码 Workflow。腾讯周报在每周五下午整理约 100 字进度,个人周报维护飞书记录,小组周报只读微信并生成汇总。实现已通过代码审查与隔离测试;已安装版本的总入口、部分完成状态和恢复行为已验证;微信真实消息读取仍未完成。

来源周次与历史稿件

执行周次不等于材料发生周次。原生 memory 候选保留发言者类型和来源日期,可信 Owner 原始记录优先,同类来源按本周日期降序;模型选择原文时以较晚的事实修订解决冲突,保留未被推翻的独立进展。聊天中的历史示例不能因导入时间被标为本周。自动取材不读取 Workflow 检查点,也不把生成报告附带的 sources.json 再当作原始证据;有原文引用链的导出来源只用于审计。恢复入口拒绝已标记失效的检查点。用户指出旧稿周次错误时保留原始文件和审计记录,标记该次执行失效,重新检索实际本周证据;缺少材料返回等待状态,不重新发布旧稿。

腾讯稿件的内容要求

取材时区分实际研究工作、组会讨论栏目和未来计划。只有本周实际动作、发现、结果和当前问题进入稿件;讨论当前研究方向、会议议程和行政安排不算研究进展。有具体决策或发现时引用该事实,而不是会议本身。优先保留同周原始记录中的方法、对象和观察结果,较晚修订只替代冲突事实,不丢弃未被推翻的具体细节。生成不机械复述主题列表,不添加“完成、验证有效、取得提升”等无证据状态。材料仅有主题名称且不能描述实际动作时,返回具体缺失问题;材料有动作而未给结果时保留动作,不编造结果。独立核验同时检查来源支持和汇报内容范围。自动取材第一次选择发现材料只有简短进展时,可提出最多三个主题检索词;代码限定在同一周的 memory 中补查,合并去重后进行第二次来源选择。选择总计最多两次模型调用,补查结果及已消耗预算进入检查点,恢复不重复检索。每轮上下文仍限制 30 条、18 KB。优化、投稿、验证等已明确记录的动作足以生成简短稿件,模型清单、指标等缺失属于可选细节,不是阻止成稿的条件;只有完全没有可用动作或有无法消解的核心事实冲突时才请求补充。本周实际进行的论文调研和复现尝试属于工作进展;保留支持的调研结论,并明确区分论文报告与个人复现结果。单纯主题相似的外部资料不证明本人开展了该工作。稿件固定以本周进展:开头,使用编号动作句;不写“未提供模型、无数据”等缺失元信息,不将未记录指标改写为实验没有数据,不使用比喻或口号。

微信窗口读取

读取器绑定微信的唯一主窗口、PID 与进程启动身份。全过程采用 GUI Harness 的 MacWindow/window_session:后台窗口截图、窗口所属辅助功能控件和进程级互斥;不打开、激活、置顶窗口,不使用全屏截图、剪贴板或按进程投递键鼠事件。每次操作重验窗口及控件归属。只有原生 AXSearchField 能接收群名,只有与精确群名及 OCR 位置一致的 AXPress 控件能选择群,翻页只能作用于消息区域内支持辅助功能翻页的控件。任何不支持的操作均返回可恢复状态,不能自动切换到前台操作。

没有 Accessibility 窗口与截图匹配时,GUI Harness 以只截图方式绑定微信窗口;微信可能只暴露一个没有位置和尺寸的应用元素。这样的窗口没有控件:辅助功能读取器找不到节点,报告 SEARCH_UNAVAILABLE,由视觉读取器接手该群。视觉读取器只读取当前已显示的会话,不对该窗口搜索、选择或翻页。标题核实为该群时,保留这一页并返回 READY,window_controls 为 unavailable,覆盖说明写明只读取了一页可见内容、无法翻到更早消息;标题未核实时,返回 CAPTURE_ONLY_GROUP_NOT_SHOWN 及原因,不持久化任何内容。窗口拒绝的后台动作报告为 BACKGROUND_ACTION_UNAVAILABLE,不当作已执行。

截图必须来自 ScreenCaptureKit 的 desktop-independent window。截图中的群标题核实前不持久化内容;消息必须有页面内日期和指定成员归属。每次最多十二页,不推断完整历史。透明截图、缺少可操作控件、窗口改变、并发占用分别留下明确原因与恢复参数。失败说明不要求用户置顶,也不将截图无内容误判为系统权限缺失。

本机微信主窗口的现有调用返回完全透明图像,真实消息采集尚未验收;这与窗口是否激活分开记录。Apple 已将 NSWindow.SharingType.none 标为旧常量,不依赖它判断当前捕获能力。后台窗口操作已完成规格审查;质量审查发现的截图异常清理同时在共享适配器修复,取消或窗口验证失败不留下未返回的临时截图。最终验证与安装状态单独记录。

目录组织

workflow/weekly_report/ 集中存放 weekly_report 总入口、personal_weekly_report 个人周报、group_weekly_report 小组汇报和 tencent_weekly_report 腾讯汇报四个独立 Git 包。workflow/_reports/ 保存共享取材、输出、检查点和微信读取模块;它不是可调用 Workflow。入口名称、独立版本和报告输出位置不因目录分组改变。目录发现支持一层分类目录,拒绝符号链接及重复入口,加载仍要求来源授权。迁移保留 Git 历史并重新登记移动后的授权路径。旧共享模块导入通过兼容别名保留,以便历史快照继续运行。

Abilities 中 weekly_report 是可展开分类文件夹,下面直接显示 weekly_report、personal_weekly_report、group_weekly_report、tencent_weekly_report 四个可调用入口。总入口采用 weekly_report 名称,个人入口采用 personal_weekly_report;旧 report 名称不再展示。已授权外部源码目录的函数必须按所属目录建立 UI 路径,不能错误地只相对安装目录计算。内部支持模块不进入列表。

Agent 路由与原始请求

weekly_report 调用 agent 判断本次请求要执行个人、小组、腾讯中的哪一项或哪几项。Agent 结合完整语义、否定和可用上下文判断,不按关键词或冒号切分。代码只校验目标枚举并调用所选公开 Workflow,将原始请求逐字传递,不摘要、不截断、不添加只生成草稿等限制。目标仍不明确时询问用户。

总入口直接调用 agent、personal_weekly_report、group_weekly_report、tencent_weekly_report。steps/routing.py 只保存 Agent 提示文本,不判断语义。总入口没有共同周次、检查点或完成状态;子 Workflow 各自管理材料、操作、输出和恢复。单一结果原样返回,多项结果仅添加类型标签。明确 requests JSON 仍可直接寻址子 Workflow。旧总入口检查点不再恢复,需使用子 Workflow 的恢复参数。

原话传递与调用图验收

个人、腾讯、小组各自只解释原始请求中属于自己的要求。腾讯自然语言入口通过模型理解周次和用户提供的进展,原话独立保存在 user_request 并传入后续模型上下文;材料仅允许原文片段。小组提取后保留完整 user_request,在后续资料选择时继续使用。微信及腾讯始终不发送消息。调用图将 workflows.* 导入对应到实际注册路径,不因分类文件夹改变而漏掉子调用。

使用样例可观察结果
写个人周报,腾讯只是参考,小组不用只选择个人,子入口收到完整原话
个人与腾讯都做,不做小组仅调用两项,各自收到相同完整原话
三个都做三项均执行,无共同周期或共同恢复状态
整理一下,且上下文无法确定对象询问,不擅自调用

会话连续执行、重试与超时

同一会话的新轮次从当前分支已记录的工具发现状态恢复 schema,仍与当前允许工具集合取交集;其他会话与兄弟分支不能继承。审批恢复继续使用现有执行检查点,不重新发现工具,也不扩大权限。工具发现状态随轮次释放 ContextVar,避免跨执行泄漏。

小组请求解释由只读 Agent 使用记忆检索、目录查找与文件读取先确定源群及有序成员名单,避免缺参时尚未查找资料就退出。用户提供的群、名单和周次优先;不从资料中的命令执行操作,无法唯一确定时保留缺项,不推测群或成员。该阶段不提供消息发送、写文件、Shell、浏览器操作或递归周报工具。请求解释使用现有 response_format 合约和结构化输出修正重试,不另写 JSON 重试循环。调用显式允许 prompt fallback,未验证原生 schema 能力的提供商也可生成 JSON,再由 Runtime 本地校验与修正;不伪造提供商能力。llm 的调用次数允许合约声明的一次修正,仍共享 Runtime 原有请求预算和总超时。模型格式错误属于模型失败,保留原文重试参数,不以缺少用户资料代替。

个人和小组模型请求不再强制 90 秒期限,继承 Runtime 的部署超时设置;浏览器操作已有的独立期限及不确定提交不重试规则保持有效。验收覆盖普通聊天调用、原文传递、小组与个人独立执行、腾讯及双项组合。普通聊天失败不能用函数入口补测宣称通过。

个人字段生成使用只读检索 Agent,根据原始请求检索本周记忆和本地资料,直接返回六个命名字段;不以说明将检索资料代替实际字段。字段由 JSON Schema 校验,完整报告要求本周工作和下周计划非空,局部修改只返回请求变更的字段。使用 prompt fallback 与 Runtime 的一次格式修正;修正只发生在生成阶段,无法确认的外部写入不重放。结构化材料输入仍由既有来源核验决定是否保存。

结构化 Agent 的正常工具轮次由 max_iterations 管理,成功完成工具调用的一轮不消耗失败重试预算。模型格式修正与失败请求仍共用既有重试预算,不因正常工具调用重新增加重试次数;所有轮次都检查取消与部署期限。纯 llm 调用的修正预算保持不变。

记忆 search、grep、get、browse 属于只读安全工具,保留 memory.read 权限与显式 deny/ask 规则,不因内层执行无法交互审批而默认拒绝。个人操作选择和来源核验、腾讯的请求解释、来源选择、生成、修订、核验均声明结构化输出合约;格式问题由 Runtime 修正,修正耗尽返回模型等待状态,不伪装成用户缺资料。腾讯请求解释继承部署超时,后续模型阶段已有的 180 秒期限保持有效。

实现状态

会话工具恢复、结构化修正及超时修复处于实施验证阶段。此前真实验收暴露小组模型格式失败、个人 90 秒超时及聊天未调用,尚不能认定整个流程正常。

代码改动需通过公开入口请求保真测试、子入口上下文测试、静态调用图接口测试、独立规格与质量审查、完整测试和本地 App 验收。阶段测试不能替代真实来源读取或外部提交成功的证据。