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,314 @@
# AgentOS vNext 重构规划与工作计划
> 版本:2026-04-29(第一稿,待审核)
> 状态:**【待审核】** — 请确认目录结构与工作计划后再进入实施阶段
---
## 一、工作核心要点(实施前必读)
### 程序功能定位
| 模块 | 功能 | 说明 |
|------|------|------|
| `memory_manager` | 记忆提炼与固化 | 从对话日志/WorkBuddy记忆中提炼关键事实,生成L1/L2/L3分层记忆,并检测固化条件推送inbox/memory |
| `kb_manager` | 知识入库 | 接受inbox各分区内容,分类、填写frontmatter、写入知识库对应目录 |
| `inbox_refine` | 收件箱精炼 | 扫描inbox各分区,调用LLM分类,自动归档到知识库 |
| `collect_to_inbox` | 内容采集推送 | 扫描本地素材/记忆,精炼后推送到协同inbox对应分区 |
| `auto_collector` | 自动化采集 | 定时抓取外部信息(网页/RSS/社交媒体等),推送inbox/knowledge |
| `sync_manager` | 同步管理 | 管理agent-os多机git同步,冲突检测与解决 |
| `skill_scanner` | 技能状态扫描 | 扫描所有SKILL_CARD.yaml,报告哪些技能就绪/缺依赖 |
| `vector_db` | 双轨向量库 | local向量库(私有内容)+ global向量库(协同知识),检索时合并 |
### 核心数据流
```
本机采集(raw素材)
↓ collect_to_inbox / 用户手动提炼
agent-os-local/materials/refined_for_inbox/
↓ 用户确认/AI判断固化条件
agent-sync/03_knowledge/00_stream/inbox/
├── knowledge/ ← 外部知识采集
├── memory/ ← 记忆固化内容
├── tools/ ← 工具提交
├── personal/ ← 个人笔记
└── media/ ← 轻量媒体
↓ inbox_refine / kb_manager(AI自动分类)
agent-sync/03_knowledge/[10~60_xxx]/
↓ 每台机器自动重建
agent-os-local/vector_db/global/ ← 协同知识向量化
agent-os-local/vector_db/local/ ← 私有内容向量化
↓ 检索时合并(先local后global)
用户查询响应
```
### 实施三原则
1. **不破坏现有功能** — 重命名/移动目录前做好兼容或路径别名处理
2. **协同目录轻量化** — 大文件/向量库/本机专属内容绝不进入agent-os/
3. **渐进实施** — 先目录结构,再配置文件,最后代码完善
---
## 二、新目录结构(【待审核】)
### 2.1 agent-os/ 变更说明
```
agent-os/
├── 00_bootstrap/ # 【保留】初始化脚本
│ ├── init.sh # 主安装入口(后续增加HOST_ID读取逻辑)
│ ├── apply-config.sh
│ ├── export_skills.sh
│ └── import_skills.sh
│
├── 01_core/ # 【扩展】核心配置
│ ├── IDENTITY.md # 系统身份
│ ├── SOUL.md # 智能体灵魂设定
│ ├── USER.md # 用户画像
│ ├── mcp.json # MCP配置
│ ├── CHANGELOG.md
│ └── HOST_ID.md # 【新增★】本机标识与角色
│ # 格式:my-macbook_macOS14.4_16GB_master
│
├── 02_skills/ # 【扩展】技能库
│ ├── _template/ # 技能模板(含SKILL_CARD.yaml模板)
│ ├── memory_manager/ # 【扩展】记忆管理
│ │ ├── SKILL.md
│ │ ├── SKILL_CARD.yaml # 【新增★】技能身份证
│ │ ├── daily_digest.py # 每日提炼
│ │ ├── memory_extractor.py # 【新增★】记忆固化提取(推送inbox)
│ │ ├── bootstrap_from_memory.py
│ │ ├── agent_memory_init.py
│ │ ├── export_memories.py
│ │ ├── import_memories.py
│ │ ├── memory_cleanup.py
│ │ ├── semantic_search.py
│ │ └── version.json
│ ├── kb_manager/ # 【扩展】知识库管理
│ │ ├── SKILL.md
│ │ ├── SKILL_CARD.yaml # 【新增★】技能身份证
│ │ ├── kb_ingest.py # 知识入库(更新inbox路径适配)
│ │ ├── kb_search.py # 【新增★】知识检索(双轨向量)
│ │ └── version.json
│ ├── inbox_refine/ # 【扩展】收件箱精炼
│ │ ├── SKILL.md
│ │ ├── SKILL_CARD.yaml # 【新增★】技能身份证
│ │ ├── inbox_refine.py # 精炼主程序(更新多分区支持)
│ │ ├── llm_classifier.py
│ │ └── version.json
│ ├── collect_to_inbox/ # 【扩展】采集推送
│ │ ├── SKILL.md
│ │ ├── SKILL_CARD.yaml # 【新增★】技能身份证
│ │ ├── collect_to_inbox.py # 采集推送(更新本地素材路径)
│ │ └── version.json
│ ├── auto_collector/ # 【扩展】自动采集
│ │ ├── SKILL.md
│ │ ├── SKILL_CARD.yaml # 【新增★】技能身份证
│ │ └── version.json
│ ├── sync_manager/ # 【扩展】同步管理
│ │ ├── SKILL.md
│ │ ├── SKILL_CARD.yaml # 【新增★】技能身份证
│ │ └── version.json
│ ├── web_crawler/ # 【保留】网页爬取
│ │ └── SKILL.md
│ └── content_processor/ # 【保留】内容处理
│ └── SKILL.md
│
├── 03_knowledge/ # 【重构】知识库
│ ├── 00_stream/ # 【新增★】数据流入区(替代原00_inbox)
│ │ └── inbox/ # 协同收件箱(唯一进入通道)
│ │ ├── knowledge/ # 外部知识(采集提炼后的MD知识卡)
│ │ ├── memory/ # 记忆固化(本机重要记忆提炼后推入)
│ │ ├── tools/ # 工具提交(TOOL_CARD.yaml+入口脚本)
│ │ ├── personal/ # 个人内容(笔记/会议记录/随手记)
│ │ └── media/ # 轻量媒体(<1MB关键附图)
│ ├── 01_daily/ # 【保留】每日记录
│ ├── 10_concepts/ # 【保留】概念(含各领域子目录)
│ ├── 20_methods/ # 【保留】方法
│ ├── 30_facts/ # 【保留】事实/数据
│ ├── 40_references/ # 【保留】参考资料
│ ├── 50_resources/ # 【保留】资源
│ ├── 60_opinions/ # 【保留】观点
│ ├── 90_archive/ # 【保留】归档
│ └── 99_system/ # 【保留】系统文档
│
├── 04_memory/ # 【精简】记忆系统(仅保留协同部分)
│ ├── daily_summaries/ # 【保留】每日摘要(可多机共享)
│ ├── long_term/ # 【保留】长期记忆(经固化的全局记忆)
│ ├── logs/ # 【保留】运行日志
│ └── memory_backup/ # 【保留】记忆备份
│ # ⚠️【审核点】vector_db 从此处移除,仅在本机local目录维护
│
├── 05_tools/ # 【扩展】工具层
│ ├── 00_setup/ # 【保留】环境安装
│ ├── 01_system/ # 【扩展】系统工具
│ │ └── skill_scanner.py # 【新增★】技能状态扫描器
│ ├── 02_browser/
│ ├── 03_ocr/
│ ├── 04_media/
│ ├── 05_crawl/
│ └── 06_mobile/
│
├── 06_runtime/ # 【保留】运行时
│ └── tasks/
│
├── 07_migration/ # 【保留】迁移工具
│ ├── backup.sh
│ ├── pack.sh
│ └── unpack.sh
│
└── 90_archive/ # 【保留】全局归档
```
### 2.2 agent-os-local/ 变更说明
```
agent-os-local/
├── materials/ # 【保留+扩展】本机原始素材
│ ├── audio/ # 音频
│ ├── video/ # 视频
│ ├── screenshots/ # 截图
│ ├── web/ # 网页存档
│ └── refined_for_inbox/ # 【保留】精炼待提交内容(暂存区)
│
├── memory/ # 【扩展】本机记忆
│ ├── raw/ # 【保留】原始记忆日志(每日.md)
│ └── long_term/ # 【新增★】本机长期记忆(固化前暂存)
│
├── knowledge/ # 【新增★】本机私有知识库(绝不同步)
│ ├── projects/ # 项目过程记录
│ └── personal/ # 个人私密笔记
│
├── vector_db/ # 【重构★】双轨向量库(绝不同步)
│ ├── local/ # 本机私有内容向量化
│ │ └── chroma/
│ └── global/ # 协同知识库向量化(从agent-os重建)
│ ├── keyword_index.json
│ └── chroma/
│
├── runtime/ # 【保留】运行时缓存
│ └── cache/
│
└── machine_info.json # 【新增★】本机环境描述
# 含:主机名、OS、内存、角色、依赖清单
```
---
## 三、关键审核点(请逐一确认)
| # | 审核项 | 建议方案 | 需用户决策 |
|---|--------|----------|------------|
| ① | `03_knowledge/00_inbox/` → `03_knowledge/00_stream/inbox/` | 用新路径,旧路径做兼容软链接 | 是否保留旧00_inbox或完全迁移? |
| ② | `04_memory/vector_db` 移除出协同目录 | 迁移到 `agent-os-local/vector_db/global/` | 确认向量库不参与多机同步 |
| ③ | `agent-os-local/knowledge/` 新增 | 存放本机私有知识和项目过程 | 确认路径合适 |
| ④ | `machine_info.json` 格式 | 见下方模板,自动生成+手动补充 | 确认字段范围 |
| ⑤ | SKILL_CARD.yaml 是否所有技能都要加 | 只给自研技能(5个核心)加 | 确认 |
---
## 四、实施任务清单(第二步工作计划)
### Phase 1:目录结构落地(即可执行)
- [x] 创建规划文档(本文件)
- [ ] 创建 `agent-sync/03_knowledge/00_stream/inbox/{knowledge,memory,tools,personal,media}/`
- [ ] 创建 `agent-os-local/knowledge/{projects,personal}/`
- [ ] 创建 `agent-os-local/memory/long_term/`
- [ ] 创建 `agent-os-local/vector_db/{local,global}/chroma/`
- [ ] 创建 `agent-os/01_core/HOST_ID.md`
- [ ] 创建 `agent-os/05_tools/01_system/skill_scanner.py`(如不存在)
### Phase 2:配置文件(目录确认后)
- [ ] 为5个核心技能创建 `SKILL_CARD.yaml`
- [ ] 创建 `agent-os-local/machine_info.json`
- [ ] 创建 `_template/SKILL_CARD.yaml` 模板
### Phase 3:核心代码完善(最终实施)
- [ ] **memory_extractor.py** — 记忆固化提取,检测固化条件,推送inbox/memory/
- [ ] **kb_ingest.py 更新** — 适配新inbox多分区路径
- [ ] **inbox_refine.py 更新** — 支持5分区不同处理逻辑
- [ ] **collect_to_inbox.py 更新** — 扫描agent-os-local/materials/refined_for_inbox/
- [ ] **kb_search.py 新增** — 双轨向量库检索,先local后global合并结果
- [ ] **vector_db_rebuild.py 新增** — 重建向量库(local/global两套)
---
## 五、machine_info.json 模板
```json
{
"machine": {
"id": "my-macbook_macOS14.4_16GB_master",
"display_name": "My MacBook Air M1",
"role": "master",
"os": "macOS",
"os_version": "14.4",
"memory_gb": 16,
"cpu": "Apple M1",
"hostname": "my-macbook.local"
},
"environment": {
"python_path": "~/.workbuddy/binaries/python/envs/agent-os/bin/python3",
"agent_os_path": "~/workbuddy-agent-os/agent-sync",
"agent_os_local_path": "~/workbuddy-agent-os/agent-local",
"shell": "zsh"
},
"software": {
"git_version": "",
"obsidian": true,
"workbuddy": true
},
"network": {
"vpn_available": false,
"notes": ""
},
"special_config": {},
"last_updated": "2026-04-29",
"auto_update": false
}
```
---
## 六、SKILL_CARD.yaml 标准模板
```yaml
# SKILL_CARD.yaml —— 技能身份证(标准模板)
skill:
name: "技能名称"
id: "skill_id"
version: "1.0.0"
category: "core-system" # core-system / user-custom / external
status: "active" # active / inactive / experimental
created: "2026-04-29"
updated: "2026-04-29"
description:
short: "一句话描述"
use_cases: []
tags: []
ownership:
master_editor: "my-macbook_macOS14.4_16GB_master"
readonly_on_other_devices: true
environment:
os: "macos"
python_path: "~/.workbuddy/binaries/python/envs/agent-os/bin/python3"
pip_dependencies: []
setup:
install_script: ""
post_check: ""
usage:
entry_point: "main.py"
scheduled: ""
manual_trigger: ""
```
---
> **【审核状态】** 请确认以上目录结构和计划后,回复"确认开始实施"或提出修改意见。
> 确认后将进入第二步:实际创建目录、生成配置文件、完善核心代码。