AssetIWeave 网页记录同步修复技术报告
大约 2 分钟
AssetIWeave 网页记录同步修复技术报告
日期:2026-06-30
问题现象
网页记录浏览界面点击“同步”后,记录库没有拉取网页端的最新消息。同步结果更像是在重复读取已有的本地标准化输出,而不是先执行网页采集脚本刷新数据。
影响范围
- 影响入口:网页记录浏览页的同步功能。
- 影响对象:声明了
web_recordscapability 的网页 adapter。 - 不影响普通 Session 同步:普通对话来源仍走
read_session读取路径,不需要执行网页 harvester。
根因
后端同步流程只在 ConversationSource.location 目录下查找 harvester.json:
run_conversation_harvester_for_source(&source)但网页记录的实际配置通常是:
- adapter 安装目录:
~/.assetiweave/conversation-adapters/<site-web>/ - harvester manifest:
~/.assetiweave/conversation-adapters/<site-web>/harvester.json - source location:
~/.assetiweave/conversation-adapters/<site-web>/output/normalized
也就是说,source 指向 adapter 产出的标准化数据目录,而不是采集脚本目录。原实现会在 output/normalized/harvester.json 查找 manifest,找不到就静默跳过采集,随后直接读取旧的 normalized 文件,因此网页端新增消息不会进入记录库。
修复方案
修复后,网页记录同步会按以下顺序执行采集:
- 优先从 adapter manifest 所在目录查找并执行
harvester.json。 - 如果 adapter 目录没有 harvester,则回退到原来的 source location 查找逻辑。
- harvester 成功执行后,再调用 adapter 的
read_session读取刷新后的 normalized 数据。
关键改动:
src-tauri/src/backend/conversations/harvester.rs- 新增
run_conversation_harvester_for_adapter_source。 - 新增 adapter manifest 目录解析。
- 将目录内执行逻辑提取为
run_conversation_harvester_in_dir,返回是否实际执行了 harvester。
- 新增
src-tauri/src/backend/application/conversation_adapters.rs- web record 同步路径改为调用 adapter-aware harvester 入口。
src-tauri/src/backend/conversations/mod.rs- 导出新的 adapter-aware harvester 入口。
回归测试
新增测试:
backend::conversations::harvester::tests::adapter_manifest_directory_harvester_runs_for_normalized_output_source测试覆盖的目录结构:
adapter-root/
conversation-adapter.json
harvester.json
scripts/harvest.sh
output/normalized/测试验证:source 指向 output/normalized 时,同步前仍会执行 adapter 根目录下的 harvester,并刷新 normalized 输出。
验证命令
已执行并通过:
cargo fmt --all -- --check
cargo test adapter_manifest_directory_harvester_runs_for_normalized_output_source
cargo test harvester
cargo test sync_record_kind_filters_session_and_web_sources_by_adapter_capability
cargo test --workspace风险与后续建议
本次修复保持了 source location 兜底逻辑,因此旧的“harvester.json 放在 source 目录”用法仍然可用。
后续建议在网页 adapter 安装/导入流程中显式校验:当 adapter 声明 web_records 时,如果 source location 指向 output/normalized,应提示 harvester manifest 位于 adapter 根目录,并在同步失败时把 harvester 执行目录写入错误信息,便于排查脚本路径问题。