Files
LWLT-AIBOT/archive/project-history/2026-08-22/task_plan-pre-compression-source-region-rule.md
T

16 KiB
Raw Blame History

项目文件治理计划

当前任务:AgentBus 通讯测试(已完成)

  • 目标: 检查面板与 AgentBus 的实时双向通信,不主动发送新测试消息。
  • 结果: health/ready、api/status 正常;4 个渠道均 connected/session_ready;日志见 4 次握手、1 次入站、2 次出站、0 次断线或本地发送失败。

2026-08-20 — ERP 会话待机保活(已完成)

  • 目标: 在已有且允许访问的 ERP 标签页中,以固定周期发送带 Cookie 的只读请求,减少服务端因长期无请求而失效;不刷新页面、不新开标签、不干扰执行中的业务任务。

阶段

  • 设计并实现 chrome.alarms 定时器、现有标签页限定、执行中跳过、会话响应检测、状态记录和用户开关。
  • 增加定向静态回归,递增扩展版本并同步平台最低版本、mapping 和源码版本断言。
  • 生成版本化 ZIP/发布清单并运行项目规定完整验证。

当前边界与决策

  • 保活只作用于 https://lwlt.hisy.cc 已存在标签页,默认约 5 分钟一次,首次延迟约 1 分钟;电脑/浏览器休眠导致的 alarm 延迟不宣称可覆盖。
  • 页面侧使用 GET /System/Mainlt.asp、credentials=include、cache=no-store;不使用 tabs.reload(),不调用任何 ERP 保存接口,不改变 DOM 或业务 operation。
  • erpAutomationEnabled=false、用户关闭“ERP 待机保活”、无 ERP 标签页、权限缺失或插件有执行中任务时跳过;失败只记录状态并在插件面板提示,不自动登录或绕过权限。
  • archive/ 只保存旧发布物,当前源码和 dist/release-manifest.json 为活动规则与交付入口。

当前任务:AgentBus 无受理/处理中/结果消息但任务成功的链路诊断

  • 状态: 诊断完成;只读检查,不修改业务源码,不重试任务,不发送外部消息,不重启或部署。
  • 目标: 从任务创建、状态事件、回复路由、AgentBus listener 和持久化 outbox 逐段确认为什么任务可成功而三类 AgentBus 消息均未到达,并区分设计行为、运行时配置/连接问题与代码缺口。

阶段

  • 读取治理规则、活动 planning 文件和当前工作区状态,确认不覆盖既有未提交改动。
  • 通过业务登记定位 AgentBus/当前业务契约,读取相关 Skill、Schema、mapping 和实现代码。
  • 追踪 accepted、processing、result 三类事件的生成、路由、持久化和发送条件,核对测试覆盖。
  • 结合现有日志/证据边界收敛根因;如缺少任务 ID 或运行时渠道快照,明确需要的最小补充证据。
  • 更新计划、发现和进度并给出只读诊断结论;不执行外部发送或任务重试。

当前边界与决策

  • “任务成功”与“AgentBus 消息送达”分开判断;不能仅凭任务终态推断渠道发送成功。
  • 不读取 .env 或其他秘密配置,不主动访问/发送 AgentBus,不重启控制面;仅检查非秘密配置样例、源码、测试和已有证据。
  • archive/ 只作追溯,当前源码、契约和活动测试优先。

错误记录

错误 处理
登记表链接的 agent设计规范/businesses/confirmation_export.md 不存在 不重复查找该路径;改用当前登记表、business-behavior-registry.md、lwlt-confirmation Skill、AgentBus 契约、Schema/mapping 与控制面实现核对
首次合并计划更新时把 findings 内容误放到 task_plan.md 匹配块,补丁未应用 已确认没有文件被修改;拆分为仅更新阶段状态和错误记录的补丁,不重复原匹配方式
直接调用 bundled Node 的 --run check:repo 时其脚本子进程找不到 node 改用 bundled Node 与其 node/bin、fallback bin 一起加入本次命令的 PATH;不修改环境文件或持久化 shell 配置

诊断结论

  • processing 消息不是当前协议的一部分;AgentBus 只发送一次 task.progress(status=accepted) 和一次终态 task.result。
  • 任务成功与 AgentBus 送达解耦。手工来源或没有 channel_id/入站 frame 路由的任务不会生成 AgentBus delivery;AgentBus 入站任务则必须经过 accepted durable delivery,之后才会生成 result delivery。
  • 若该任务确实来自 AgentBus 且 accepted/result 都没有,根因只能继续在任务发生时的 source/channel_id、agentbus_deliveries 状态或 listener 日志中区分;当前没有该任务 ID,不能把历史断点唯一归因给某个渠道或 WebSocket 错误。
  • 本次只读探针显示当前 4 个启用渠道均 connected=true、session_ready=true;这是当前状态,不是该历史任务发生时的证据。
  • 最新现场日志已定位到 TASK-20260819102429-R13bn8w:入站为 AgentBus,accepted 与 completed result 均出现 outbound_durable_delivery_sent,且 AgentBus 服务端随后返回 accepted/delivered 确认帧;控制面未出现该任务对应的发送失败或断线。
  • 因此本轮诊断边界已从控制面收敛到 AgentBus 网关向微信适配器/会话的下游投递或展示;不改本地发送逻辑,不重试外部消息。

当前任务:confirmation_export Chrome host 权限阻断修复

  • 状态: 修复完成;两次用户任务均未写入 ERP,未重试、未部署。
  • 目标: 找出 Cannot access contents of the page. Extension manifest must request permission to access the respective host. 的实际触发路径,修复 confirmation_export 的受控浏览器执行并保持未知 host fail-closed;补充回归门禁、递增扩展版本并同步版本化制品。

阶段

  • 读取两份日志、活动 planning 文件、业务登记和当前工作区状态,确认两次失败均为同一权限错误。
  • 核对 Chrome manifest、ERP tab/redirect/frame 注入路径和当前测试覆盖,确定最小修复边界。
  • 实施权限/注入修复及回归测试;同步扩展版本、mapping、平台最低版本、ZIP 和发布清单。
  • 运行项目规定验证并记录结果;不执行真实 ERP 重试、写入、外部发送、重启或部署。

当前边界与决策

  • 只处理 confirmation_export 浏览器执行前门禁与扩展发布同步;不重试用户给出的两个任务。
  • 只允许当前登记的 ERP host/经验证重定向 host;不为规避错误而开放任意网站权限。
  • 无法唯一确认页面 host、frame 或扩展版本时继续阻断,不伪造导出成功。

错误记录

错误 处理
agent设计规范/businesses/confirmation_export.md 不存在,登记表中的链接为悬空入口 改用 business-behavior-registry.md、lwlt-confirmation Skill、Schema、mapping 和实现源码继续核对,并保留该治理缺口记录
对 https://lwlt.hisy.cc/System/Mainlt.asp 的只读 HEAD/重定向探测连接超时 不重复外部探测;转为基于本地 manifest、注入路径和测试夹具定位,真实 host 仍以浏览器运行时明确拒绝为准
默认 shell 没有 node 命令,首次语法检查未启动 使用 workspace bundled Node 绝对路径重跑;不修改 PATH 或环境文件

当前实现摘要

  • background.js:chrome.permissions.contains 前检、批准 ERP origin/tab 复核、同源导航竞态一次重试、脚本注入错误结构化并 fail-closed。
  • LianSyn-platform/app.js:桥接状态展示 ERP 页面权限;权限不可用时不再自动 claim/handoff 新任务。
  • 发布:扩展 0.5.137,ZIP SHA-256 6c00c6e8240fad80bc8fbe8e932dfaf22ad32e494c957717c2d7537785f09fd5;check:repo 9/9 已通过。

最终验证

  • check、test:control-plane 66/66、test:legacy 215/215、build、git diff --check:通过。
  • 定向 operation plan:40/40;生命周期契约:47/47;check:repo:9/9。
  • 未执行真实 ERP 任务重试、ERP 写入、外部发送、控制面重启或部署;浏览器 live host 因只读网络探测超时未进行实时复测。

当前任务:visitor-list XLSX 转换失败修复

  • 状态: 修复完成;未重试该 ERP 任务、未写入 ERP、未向 AgentBus 外发原始 XLS。
  • 目标: 找出 visitor_xlsx_conversion_failed:conversion_failed 的实际根因,确保 HTML-in-XLS 能生成可校验的真实 XLSX;转换失败时继续保持 fail-closed,不回传手机无法打开的原始 XLS。

阶段

  • 读取用户日志、活动 planning 文件和当前工作区状态,确认最终状态为 blocked。
  • 核对 convertDocumentToXlsx()、调用方和 LibreOffice 运行环境,使用脱敏 fixture 重现失败。
  • 实施最小修复并增加覆盖转换失败/成功与 AgentBus 可见性门禁的回归测试。
  • 运行项目规定验证;在用户已授权范围内重启面板并验证 live/ready 与 AgentBus 状态。

当前边界

  • 只处理文件转换与交付契约;不重试原任务,不提交 ERP 写入,不发送外部业务消息。
  • 原始 ERP .xls 只能作为平台源归档;游客信息对 AgentBus/微信仍只允许真实 .xlsx。

错误记录

错误 处理
首次脱敏 LibreOffice 复现脚本在 bundled Node 24 下同时使用 CommonJS require 与顶层 await,触发 ERR_AMBIGUOUS_MODULE_SYNTAX,尚未执行转换 改用纯 ESM import 形式重跑,不重复该脚本形态
bundled macOS LibreOffice 将 HTML 输入按 Writer/Web 文档加载后直接导出 Calc XLSX 时收到 SIGABRT,输出目录只留下锁文件和临时文件 先比较保留 .xls 扩展名、HTML→ODS→XLSX 等不同导入路径;不把崩溃当作可交付结果

当前任务:散拼母团创建写后回查假阴性修复

  • 状态: 修复与版本化交付完成;不重提 ERP 创建请求,未执行真实 ERP 写入、重试或部署。用户授权后已重启控制面并通过健康检查。
  • 目标: 当 shared_plan_create 已收到 ERP 成功响应但精确团号回查暂未命中时,通过清空列表筛选、有限只读重试和按日期兜底回查正确收敛结果,避免把真实成功误报为 erp_result_uncertain。

已确认决策

  • 任一 ERP 返回团号未命中即进入恢复回查,不再只按“返回团号数少于日期数”判断。
  • 每次精确回查显式清空客户、产品、领队和状态等非目标筛选;允许有限次数延迟重查。
  • 精确回查仍未完整命中时,按请求日期逐日唯一核验;任何歧义或缺失继续保持 execution_uncertain。
  • 全过程只读回查,禁止再次调用 SubmitInfoForm() 或 POST /System/DAT/plan.asp。

阶段

  • 读取项目约束、活动 planning 文件、业务登记、业务页、Skill、Schema、mapping、日志与当前实现。
  • 实现精确团号回查的筛选清理与有限只读重试。
  • 修正按日期兜底触发条件并保留严格唯一门禁。
  • 增加回归测试,覆盖“ERP 返回完整团号但首次列表回查为空”的成功收敛与持续缺失阻断。
  • 递增扩展版本,同步平台最低版本、mapping、版本化 ZIP 和发布清单。
  • 运行定向测试及项目规定完整验证并记录结果。

错误记录

错误 处理
首次打包命令把扩展目录到项目 dist/ 的相对路径写成 ../../../dist,ZIP 未创建 已确认正确路径为 ../../dist;不复用错误命令,改用正确显式目标重新打包
完整验证首次运行在控制面测试 confirmation export preserves visitor Excel while converting other types 失败:测试桩未生成 .xlsx 输出 已确认该测试与控制面游客 XLSX 并行改动在本任务开始前已存在:当前转换器要求 .xlsx,测试桩仍只写 team.pdf。为保留未确认的游客交付策略,本轮不修改;其余控制面 60/60 通过
legacy 全量测试发现一处转义正则仍断言旧扩展版本 0.5.134 该断言属于本次版本同步范围;定位后改为 0.5.135 并重跑 legacy,不重复错误断言
最终哈希复核脚本在命令替换中直接调用 node,当前 shell PATH 未持久注入 bundled Node check:repo 与 git diff --check 已先通过;哈希复核改用 bundled Node 绝对路径单独重跑,不重复 PATH 假设

最终验证

  • check:repo:9/9 通过;check、build、git diff --check:通过。
  • 定向回查:14/14;生命周期回查门禁:1/1;legacy:214/214。
  • 控制面:60/61;唯一失败是本轮未改动的游客 XLSX 测试桩与其并行实现不一致。
  • 控制面重启后:/health/live、/health/ready、数据库、Schema 和迁移均正常;4 个 AgentBus 渠道全部连接并完成 session-ready。未触发 ERP 任务重试。

当前任务:visitor-list AgentBus XLSX 交付

  • 状态: 已实施并完成定向回归;保留原始 ERP .xls 归档,生成真实 .xlsx,AgentBus/微信只返回 .xlsx。未写入 ERP、未重试、未重启、未部署。
  • 目标: 修复 HTML-in-XLS 在手机/微信上的兼容性,同时不丢失 ERP 原始源证据,并让 AgentBus 对游客信息只发送移动端可打开的 XLSX。

阶段

  • 读取治理规则、活动 planning 文件和工作区状态。
  • 从用户日志确认 Visitor.xls 的文件名、MIME、字节数和 SHA-256。
  • 对照历史 ERP 实时源响应证据确认游客名单是 HTML-in-XLS,而非标准 BIFF/OLE .xls。
  • 核对插件 arrayBuffer/base64、控制面 native 分支、OSS 写入和下载响应均保持源字节。
  • 用户确认“源 .xls 归档 + 真实 .xlsx 交付”,并明确 AgentBus 返回 XLSX。
  • 增加 XLSX 转换器、双附件元数据和 AgentBus/回执可见性过滤;转换失败时阻断原始 XLS 外部交付。
  • 增加转换器、任务准备、回执和 AgentBus 回归测试;同步当前 Skill、Schema、mapping、插件提示和运营模板。
  • 完成表格产物结构验证及项目门禁验证。

当前结论

  • 用户日志中的源文件为 9,377 字节,声明 application/vnd.ms-excel; Charset=UTF-8,文件名为 LW-260816Z-A Visitor.xls。
  • 历史实时采集记录显示 /System/Business/orders_Visitor.asp 返回 application/vnd.ms-excel,但首字节为 HTML 文档头,属于 HTML-in-XLS wrapper;桌面 Excel 可兼容解析,手机 Office/微信通常按扩展名与真实签名拒绝。
  • 插件用 response.arrayBuffer() 读取并计算 SHA/base64;控制面 visitor-list 分支沿用同一字节、文件名和 MIME;OSS 设置附件 disposition,因此当前证据不支持传输过程损坏。
  • 仅改扩展名或 MIME 不能修复;移动端兼容需要真实 .xlsx(保留表格语义)或 PDF。生成派生文件改变了此前“游客信息保持 ERP 原生 Excel”的外部交付约束;经用户确认后改为“原始 XLS 仅平台归档,AgentBus/微信只交付 XLSX”。

既已完成的相关实施

  • confirmation_export 现按类型交付:visitor-list 保留源 XLS 并生成真实 XLSX,AgentBus/微信只返回 XLSX;其余类型继续转 PDF,转换失败回退源文件。
  • 已同步控制面、Skill、输出契约、Schema、mapping、插件提示、测试、版本化 Skill/扩展 ZIP、运营 DOCX 和发布清单。
  • 散拼子单导出二次查询已移除固定“收客中”过滤,仍保留母团/子单/ddid/tid 唯一核验。

最终验证

  • check:repo 9/9、check、控制面 66/66、legacy 214/214、build、git diff --check 全部通过。
  • lwlt-confirmation Skill 官方 quick_validate.py 通过;运营 DOCX 15 页逐页渲染检查通过;扩展 0.5.136 ZIP 与发布清单哈希通过。

归档与约束

  • 本文件超限前的完整版本已冻结于 visitor 移动端诊断前计划;更早快照见同目录 README。
  • 保留工作区既有未提交改动;不读取、复制或输出秘密配置;真实 ERP 写入、外部发送、重启和部署需用户另行明确授权。