feat(monitor): 抖音 Web 接口客户端 —— 绕开爬虫子进程,直接发 HTTP
Deploy VitePress site to Pages / build (push) Canceled after 0s
Deploy VitePress site to Pages / Deploy (push) Canceled after 0s

移植自 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 带网关原话 / 正常返回)。
This commit is contained in:
2026-10-10 17:12:25 +08:00
parent 21ff01b894
commit 2112c1a870
1601 changed files with 367425 additions and 0 deletions
@@ -0,0 +1,174 @@
# AgentOS v2.0 审查与收口文档
最后更新:2026-04-28
## 1. 审查范围
本次审查只做一件事:把 AgentOS 的原形、当前实现、未来升级想法彻底拆开,收口成一个可执行的 v2.0 基准。
审查对象包括:
- 根目录说明文档
- `00_bootstrap/` 初始化与部署脚本
- `01_core/` 核心配置
- `02_skills/` 当前已落地技能
- `03_knowledge/` 知识库结构与收件箱流水线
- `04_memory/` 记忆体与本地私有目录边界
- `05_tools/` 工具层
- `07_migration/` 迁移脚本
## 2. 审查结论
### 结论 A:当前仓库不是原形复刻,而是原形之后的第一阶段增强版
原形是一个单机优先、骨架优先、目录清晰的 AgentOS。
当前仓库已经在原形之上新增:
- `agent-os-local/` 本机私有目录
- 软链接隔离(raw、vector_db、cache)
- `collect_to_inbox` / `inbox_refine` 收件箱双阶段流水线
- `content_processor` / `auto_collector` 等扩展技能
- WorkBuddy managed Python / Node 运行时约束
- MCP 与本地 LLM 运行时集成
因此,当前仓库应被定义为“v2.0 基准版”,而不是“原形本身”。
### 结论 B:主要问题是文档基线失真,不是代码主干先坏了
目前最大问题不是脚本无法运行,而是多个文档分别在描述不同阶段:
- 有的描述原形
- 有的描述当前实现
- 有的描述未来升级设想
结果是同一件事出现多套口径,尤其集中在:
- 版本号
- 技能数量
- 知识流入口
- 记忆同步边界
- `05_tools/` 与 `02_skills/` 的职责划分
### 结论 C:v2.0 需要冻结一条“当前可运行”的基准,而不是继续把 v2.1 设想混进来
v2.0 的目标不是把所有未来升级一次做完,而是把当前仓库收口成:
- 文档统一
- 边界明确
- 路径一致
- 恢复流程明确
- 延后项清楚标注
## 3. 核心发现
### 高优先级
1. 知识流入口存在两种合法路径,但之前没有被正式定义
- 路径一:内容已标准化,直接写入 `03_knowledge/00_inbox/`
- 路径二:内容先落在分类目录,再由 `collect_to_inbox` 汇聚进 `00_inbox/`
此前文档把它写成互相冲突。v2.0 统一定义为“双入口汇聚到 Inbox”,不再视为矛盾。
2. `04_memory/` 与 `agent-os-local/` 的边界缺少一句话定义
v2.0 统一定义:
- 共享并可同步:`facts.db`、`daily_summaries/`、`logs/`
- 本机私有:`long_term/raw/`、`vector_db/`、`06_runtime/cache/`
3. `05_tools/` 在原形中是空骨架,在当前实现中已经变成工具层
v2.0 统一定义:
- `02_skills/` 是 WorkBuddy 技能层
- `05_tools/` 是底层公共工具层
- 工具层中允许存在独立小项目,但不自动视为对话技能
### 中优先级
4. system/user 技能分类已成为架构约定,但尚未有统一元数据强制落地
v2.0 结论:保留该分类作为文档级约定,不在本版本强推 `SKILL_CARD.yaml`、`skill_scanner.py`。
5. `agent-os-local/materials/` 已经存在,但尚未成为系统主数据入口
v2.0 结论:
- 它是本机原始素材存储区
- 它服务于工具层与后续升级
- 它不作为 v2.0 的唯一入库入口
### 低优先级
6. 大体量说明文档信息很多,但不适合作为唯一基准
v2.0 结论:
- 保留该文件作为扩展历史说明
- 以 `README.md`、`CORE-ARCHITECTURE.md`、本文件为正式基准
## 4. v2.0 最终定稿
### 4.1 当前基准
AgentOS v2.0 是一套运行在 WorkBuddy 上的本地优先个人智能体外骨骼系统,当前以以下结构为正式基准:
- `agent-os/`:同步与版本化的主仓库
- `agent-os-local/`:本机私有数据区
- `01_core/`:核心配置
- `02_skills/`:技能层
- `03_knowledge/`:Obsidian 知识库
- `04_memory/`:共享记忆元数据与结构化事实
- `05_tools/`:公共工具层
- `06_runtime/`:任务记录与缓存挂载点
- `07_migration/`:迁移与打包
### 4.2 目标表述
v2.0 的正式目标表述如下:
> AgentOS v2.0 不是“未来多机协同终态”,而是“当前仓库的稳定可运行基准版”。
> 它保留原形的骨架清晰性,同时承认已经落地的本地私有层、收件箱流水线和工具层增强。
> v2.0 的任务是冻结边界、统一口径、保证可恢复、为 v2.1 升级留出明确接口。
### 4.3 明确不纳入 v2.0 的内容
以下内容属于后续版本,不纳入本次收口:
- `collect_from_local.py` 本地素材统一提炼入口
- `skill_scanner.py` 和统一技能身份证体系
- `SKILL_CARD.yaml` 全量改造
- `setup_tools.sh` 与工具 manifest 规范
- 更细粒度的记忆多机隔离策略
## 5. 修改计划
### 已完成
1. 统一 v2.0 基准文档入口
2. 固化审查结论
3. 统一当前基准与目标表述
4. 将历史大文档降级为参考资料
### v2.0 收口后可继续执行
1. 先做 `collect_to_inbox` 与 `content_processor` 的入口契约统一
2. 再做 `agent-os-local/materials/` 到 `00_inbox/` 的新流水线
3. 最后补技能元数据和工具 manifest
## 6. 使用原则
从本文件起,后续若出现文档冲突,按以下优先级理解:
1. `CORE-ARCHITECTURE.md`
2. `README.md`
3. `REVIEW-V2.0.md`
4. 其他大体量说明文件
这意味着:
- 大说明文档用于补充背景
- 正式口径以基准文档为准
- 升级想法必须单独标注版本,不得直接混入 v2.0 基准