移植自 mac-agent-os 的 mediacrawler_adapter:不起子进程、不开页面,用浏览器里那份
登录态直接调抖音 Web 接口。产物键名照抄 store/douyin,所以 ingest 那条链路一个字不用改。
**目前能用的(真环境实测,非推断)**:
profile/other : 200, 7075 字节 —— 博主主页指标(粉丝/获赞/作品数/昵称)
aweme/detail : 200, 45425 字节 —— 单条作品详情(含点赞/评论/收藏/分享)
**目前不能用的:作品列表 `aweme/post`。** 两个互相独立的原因:
1. 这个接口被抖音单独升级成了真校验:不带 x-tt-argus 回 403「Uifid Not Found」,
带上 dummy 值回 200 + **空 body**。也就是说「头在不在」骗得过,「真校验」过不了。
同一套头打 profile/other 和 aweme/detail 都是通的 —— 抖音是挑着接口加保护的,
挑中的恰好是「批量拉作品列表」这个最敏感的动作。
2. 改走页面截获也不行:CDP 浏览器打开博主主页会落到「验证码中间页」(当天大量探测的
代价,过几小时要重测)。
所以现在的边界是:**已知作品的指标刷新能做,自动发现新作品做不了**。
**排查中控住变量后得到的两条事实**(都写进注释了):
· `Accept` / `Accept-Language` / `Referer` 才是主页接口能返回真数据的原因 —— 只有
UA+client hints+Cookie 时是 200 但仅 121 字节的空壳,补上这三个头变 7074 字节。
(我先前猜的 sec-ch-ua 不是关键。)
· 因此 UA 与 client hints 必须**成套地取自同一个浏览器**,所以 BrowserIdentity 一次
从 CDP 取齐 cookie + UA + hints,而不是各自写死。
「200 + 空 body 必须当场报错」也是刻意写死的:放过去它会在下游变成「这个博主没作品」,
把一次失败伪装成一条正常结果 —— 爬虫那条路正是这么栽的,还被翻译成「账号被封」。
测试 +11:cookie 解析、请求头成套性(含 uifid 缺失/回退)、产物键名与 store 对齐、
以及 _get 的三条失败路径(空 body / 403 带网关原话 / 正常返回)。
10 KiB
10 KiB
AgentOS 修复方案与落地清单
版本: 1.0 | 基于 2026-06-21 审计报告 按优先级排列,每项含:耗时 / 风险 / 前置依赖
第一步:Git 仓库减肥(P0,立刻做)
1.1 诊断:先看什么东西在吃空间
# 进入仓库
cd ~/workbuddy-agent-os/agent-sync
# 1. 看总大小
du -sh .git # .git 目录大小(预估 400MB)
du -sh . # 工作树大小(预估 600MB)
# 2. 找最大的文件(被 git 追踪的)
git rev-list --objects --all | \
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | \
awk '/^blob/ {print $3, $4}' | \
sort -rn | head -20
# 3. 看哪些大文件类型在 git 索引里
git ls-files | grep -E '\.(png|jpg|jpeg|gif|svg|ico|pdf)$'
git ls-files | grep -E '\.(so|dylib|a|o)$'
git ls-files | grep -E '(profiles|cache|chroma|node_modules)'
预期发现: 大文件来源通常是:
- 浏览器 Profile 文件夹(曾未加 .gitignore 时被提交过)
- 截图 .png 文件(dashboard、matrix screenshots)
- ChromaDB SQLite 文件
- Python .so 编译文件
- longcat 浏览器缓存
1.2 更新 .gitignore(排除所有不该进 Git 的东西)
在现有 .gitignore 末尾追加:
# ────── v4.2.0 新增排除项 ──────
# 图片文件(截图、素材,不入库)
*.png
*.jpg
*.jpeg
*.gif
*.svg
*.ico
*.webp
# ChromaDB 数据(各机独立)
chroma.sqlite3
**/chroma/
# 前端构建产物
node_modules/
dist/
build/
# ML 模型文件
*.pth
*.bin
*.onnx
*.npy
*.npz
# 运行时数据目录
cross_machine/data/
# Matrix 截图
05_tools/07_matrix/screenshots/
# AVE 输出
09_ave/output/
09_ave/cache/
# 系统报告归档
reports/
# Dashboard 前端产物
05_tools/10_dashboard/frontend/node_modules/
05_tools/10_dashboard/frontend/dist/
1.3 从 Git 追踪中移除已在大文件(不删文件,只删追踪)
# 对每一类已追踪的大文件执行 git rm --cached
# 1. 移除所有图片文件(如果被追踪过)
git rm --cached -r --ignore-unmatch 05_tools/07_matrix/screenshots/
git rm --cached -r --ignore-unmatch 05_tools/10_dashboard/*.png
git ls-files | grep -E '\.(png|jpg|jpeg|gif)$' | xargs -r git rm --cached
# 2. 移除浏览器 Profile(如果被追踪过)
git rm --cached -r --ignore-unmatch 05_tools/07_matrix/profiles/
git rm --cached -r --ignore-unmatch 05_tools/05_crawl/longcat/profiles/
# 3. 移除 ChromaDB 数据
git rm --cached -r --ignore-unmatch 04_memory/vector_db/
git ls-files | grep chroma | xargs -r git rm --cached
# 4. 移除运行时数据
git rm --cached -r --ignore-unmatch cross_machine/data/
git rm --cached -r --ignore-unmatch 04_memory/cross_machine/data/
# 5. 移除旧的迁移目录
git rm --cached -r --ignore-unmatch 07_migration/
# 6. 提交本次清理
git commit -m "chore(git): 清理已追踪的大文件,更新 .gitignore v4.2.0"
1.4 重写 Git 历史以永久删除大文件(可选但推荐)
⚠️ 这一步会改变 commit hash,所有机器需要重新 clone。 但如果 1.3 步提交后,远程仓库大小仍然不变,就必须做这一步。 因为历史 commit 中仍然保留着大文件——.gitignore 和 git rm 只影响未来。
方案 A:使用 git filter-repo(推荐)
# 安装 git-filter-repo
pip install git-filter-repo
# 在全新 clone 上操作(不要在原仓库,防止意外)
cd /tmp
git clone ~/workbuddy-agent-os/agent-sync agentos-clean
cd agentos-clean
# 删除历史中所有 .png/.jpg/.so/.mp4 等大文件
git filter-repo \
--path-glob '*.png' --path-glob '*.jpg' --path-glob '*.so' \
--path-glob '*.mp4' --path-glob 'chroma.sqlite3' \
--path '05_tools/07_matrix/profiles/' \
--path '05_tools/05_crawl/longcat/profiles/' \
--path '04_memory/vector_db/' \
--invert-paths
# 验证大小
du -sh .git
# 如果还是大,再按大小找 Top offenders
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectsize) %(rest)' | sort -rn | head -20
方案 B:使用 BFG Repo-Cleaner(更简单)
# 下载 BFG
wget https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar
# 清理 >10MB 的文件
java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 10M agentos-clean
# 清理指定模式
java -jar bfg-1.14.0.jar --delete-files '*.png' agentos-clean
java -jar bfg-1.14.0.jar --delete-files '*.so' agentos-clean
方案 C:如果 filter-repo 太复杂,最小化方案
# 只清理最大的文件类型,保留历史完整性
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch -r \
05_tools/07_matrix/profiles/ \
05_tools/05_crawl/longcat/profiles/ \
04_memory/vector_db/ \
07_migration/" \
--prune-empty --tag-name-filter cat -- --all
# 回收空间
git reflog expire --expire=now --all
git gc --aggressive --prune=now
1.5 推送到远程(所有操作完成后)
# 强制推送(因为历史被重写了)
git push origin --force --all
git push origin --force --tags
# 验证远程仓库大小
curl -s https://api.github.com/repos/babycalf/mac-agent-os | grep "size"
# size 单位是 KB,目标 < 50000(即 < 50MB)
1.6 其他机器重新 clone
# 5kechengdeAir 和 7kecheng 上执行
cd ~
mv workbuddy-agent-os workbuddy-agent-os.bak # 备份旧目录
git clone [email protected]:babycalf/mac-agent-os.git workbuddy-agent-os/agent-sync
cd workbuddy-agent-os/agent-sync && bash 00_bootstrap/init.sh
1.7 验证结果
# 1. 本地仓库大小
du -sh .git # 期望 < 50MB
du -sh . # 期望 < 100MB(不含 agent-local/)
# 2. 不再有大文件被追踪
git ls-files | grep -E '\.(png|jpg|so|mp4)$' # 期望 0 结果
# 3. agentos check 仍然通过
cd ~/workbuddy-agent-os/agent-sync
python3 -m agentos check --quick
# 4. clone 速度测试(从另一台机器)
time git clone [email protected]:babycalf/mac-agent-os.git test-clone
# 期望 < 30 秒(之前可能 > 5 分钟)
第二步:修复高优问题(P1)
完成 Git 减肥后,按以下顺序修复:
| 优先级 | 问题 | 方案 | 预估工时 |
|---|---|---|---|
| P1-1 | oMLX Chat API 500 | 诊断 Qwen3-8B 错误 → 尝试降级/换模型/用 VLM 替代 | 1-2h |
| P1-2 | collect_to_inbox v2.0 | 补全 01_submissions/ 扫描逻辑(约 40 行代码) | 2h |
| P1-3 | AVE service_layer 空目录 | 确认 09_ave TOOL.md 说的 API 是否需要 → 补全或降级文档 | 1h |
| P1-4 | agentos check 增加宪法对账 | 在 check.py 中比较 CONSTITUTION.md 版本 vs 实际代码一致性 | 2h |
| P1-5 | 删除 accounts_registry.yaml | 确认无代码引用后删除(已标记废弃) | 10min |
第三步:中期改进(P2)
| 优先级 | 问题 | 方案 | 预估 |
|---|---|---|---|
| P2-1 | app.py 1521 行拆分 | 按已有 routes/ 目录拆分为 3-4 个路由模块 | 1d |
| P2-2 | 添加测试基础 | guardd 核心模块 + semantic_search RRF 写单元测试 | 1d |
| P2-3 | 统一日志格式 | 所有 Python 模块使用 logging + 统一格式字符串 | 4h |
| P2-4 | 双 agentos 插件加载加固 | 把 07_matrix/agentos/plugins/ 复制到 00_setup/agentos/federation_plugins/ | 2h |
| P2-5 | FEDERATION_GUIDE.md 完整对账 | 遍历全文确认所有数字与实际一致 | 2h |
第四步:长期优化(P3)
| 项目 | 说明 | 预估 |
|---|---|---|
| CommandCenter | 实时跨机通信,替代 15min Git 同步延迟 | 2-4 周 |
| 独立运行模式 | 脱离 WorkBuddy 也可运行 | 2-3 周 |
| 技能市场 | SKILL_CARD.yaml 标准化 + 社区技能安装 | 1-2 周 |
| 内容工厂 | 采集→AI 分析→AVE 生成→自动发布全流水线 | 3-4 周 |
落地路线图(甘特图)
时间线 今天 本周 下周 下月 季度
│ │ │ │ │
Git 减肥 ████████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░
诊断+清理 ██████▓
filter-repo ██████▓
各机re-clone ██▓
────────────────────────────────────────────────
oMLX 修复 ██████▓
collect_to_inbox ██████▓
AVE 确认 ██▓
宪法对账 ██▓
────────────────────────────────────────────────
app.py 拆分 ██████████▓
测试基础 ██████▓
统一日志 ██████▓
────────────────────────────────────────────────
CommandCenter ████████████▓
独立运行 ████████████▓
执行建议
执行的顺序很关键
第一步做 Git 减肥 → 然后再做其他事情
↑
如果不先做这个:
- 其他机器 git pull 要等 5 分钟
- push 频繁超时
- 新机器部署痛苦
每个步骤的风险控制
Git filter-repo 前:
✅ 备份原仓库(tar czf backup.tar.gz .git)
✅ 在临时目录操作(不在原目录)
✅ 先在一台机器验证,再通知其他机器
✅ 准备好 rollback 方案
日常维护习惯
# 每次 push 前快速检查
du -sh .git # 超过 100MB 要警惕
git ls-files | grep -E '\.(png|jpg|so)$' # 应为空
git status --porcelain | wc -l # 干净工作区
# 每月一次深度检查
git count-objects -v # 看 pack 文件数量和大小