Files
MediaCrawler/mac-agent-os-main/MANIFEST.yaml
T
butubb 2112c1a870
Deploy VitePress site to Pages / build (push) Canceled after 0s
Deploy VitePress site to Pages / Deploy (push) Canceled after 0s
feat(monitor): 抖音 Web 接口客户端 —— 绕开爬虫子进程,直接发 HTTP
移植自 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 带网关原话 / 正常返回)。
2026-10-10 17:12:25 +08:00

454 lines
21 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ════════════════════════════════════════════════════════════════
# AgentOS 项目模块清单
# 版本: 1.0 | 最后更新: 2026-07-16
#
# 用途:
# 给 AI 智能体和人类开发者的项目"总地图"。
# 任何 AI 进入项目后,先读此文件,了解:
# - 项目有哪些模块,每个模块负责什么
# - 每个模块涉及哪些文件(不遗漏、不乱改)
# - 红线(哪些文件绝对不能碰)
# - 命名空间(哪些名字已被占用)
# - 通用规则(新代码该怎么写)
#
# 维护者: ghai
# 更新触发条件: 新增/删除模块、修改红线、新增命名
# ════════════════════════════════════════════════════════════════
project:
name: AgentOS
tagline: 多智能体联邦操作系统 — 给 WorkBuddy AI 装上外骨骼
version: 4.2.1
repo_root: ~/workbuddy-agent-os/agent-sync
# ════════════════════════════════════════════════════════════════
# 一、顶层架构理念
# ════════════════════════════════════════════════════════════════
#
# AgentOS 不是单一应用,是多个功能模块的"联邦"。
# 每个模块独立开发、独立运行,通过统一的 command_bus 和 Dashboard 连接。
#
# 核心骨架:
# L5 Dashboard 前端(frontend/) ← Web 界面
# L4 API 路由层(routes/) ← FastAPI 接口
# L3 命令分发层(services/) ← CommandBus + 引擎
# L2 CLI 执行层(mc/agentos) ← 命令行工具
# L1 平台操作层(ops/) ← 原子操作
# L0 浏览器层(Camoufox/Chrome) ← 浏览器自动化
#
# 数据分离:
# agent-sync/ → Git 同步(代码 + 知识库 + 配置)
# agent-local/ → 本机私有(密钥 + 日志 + 运行时数据)
#
# 联邦:
# 3 台 Mac 通过 Tailscale 组网,guardd 节点代理通信
#
# ════════════════════════════════════════════════════════════════
modules:
# ──────────────────────────────────────────────────────────────
# 模块 A: 养号矩阵
# ──────────────────────────────────────────────────────────────
- id: nurture-matrix
name: 养号矩阵
description: >
多平台(抖音/小红书)养号引擎。
管理多个账号的登录、浏览、点赞、评论、收藏等日常养号操作。
使用 Camoufox 浏览器(Firefox 内核 + 防检测指纹)。
keywords: [matrix, nurture, 养号, douyin, xhs, camoufox, 登录]
api_routes:
- POST /api/ops/run {type:nurture|collect|login|comment|like|logout}
- GET /api/ops/status
core_files:
# 🚫 核心引擎 — 禁止修改(除非 ghai 明确要求)
- services/command_bus.py
- 05_tools/07_matrix/scripts/mc/
- 05_tools/07_matrix/scripts/douyin_ops.py
- 05_tools/07_matrix/scripts/matrix_mgmt.py
- 05_tools/07_matrix/scripts/auth_manager.py
- 05_tools/07_matrix/scripts/cdp_connector.py
- 05_tools/07_matrix/scripts/browser_manager.py
- 05_tools/07_matrix/scripts/task_engine.py
- 05_tools/07_matrix/blueprints/ # JSON 蓝图
routes:
- routes/ops.py
- routes/matrix.py
frontend_shared:
- frontend/src/config/status-config.js # 账号状态配置(STATUS_CFG 唯一来源)
frontend_components:
- frontend/src/components/account-selector.js # 统一账号选择器(含排除筛选)
frontend_views:
- frontend/src/views/matrix-*.js # 所有 matrix- 前缀的视图
- frontend/src/modules/nurture.js
frontend_inline:
- inline.js 中 loadMatrixCollect() # 旧系统内联视图
- inline.js 中 loadMatrixCommands() # 命令与任务
reserved_prefixes:
- matrix- # 视图前缀
- mc # CLI 前缀
- douyin_ # 账号标识
- xhs_ # 账号标识
redlines:
- "services/command_bus.py — 养号命令分发核心,禁止修改"
- "05_tools/07_matrix/scripts/ — 养号引擎代码,非必要不修改"
- "inline.js 中 loadMatrixCollect() — 旧系统内联函数,只减不增"
- "🚫 /api/matrix/accounts(读)— 已废弃,全部视图已迁移到 /api/v2/accounts"
# ──────────────────────────────────────────────────────────────
# 模块 B: 内容抓取
# ──────────────────────────────────────────────────────────────
- id: content-scrape
name: 内容抓取
description: >
独立的内容数据抓取系统。
用户输入 URL/sec_uid/关键词 → 用 OpenCLI/Chrome 抓取视频/笔记/评论数据。
与养号矩阵完全隔离(不同引擎、不同路由、不同数据库)。
使用 Chrome 浏览器(非 Camoufox),走独立 API 路径 /api/scrape/。
keywords: [scrape, 抓取, 内容, opencli, chrome]
api_routes:
- POST /api/scrape/run
- POST /api/scrape/resolve
- GET /api/scrape/items
- GET /api/scrape/tasks
- GET /api/scrape/stats
- POST /api/scrape/sources
- GET /api/scrape/sources
core_files:
- services/scrape_engine.py
- services/scrape_db.py
- routes/scrape.py
- services/adapters/__init__.py # ScrapeAdapter 基类
- services/adapters/douyin_scrape.py
- services/adapters/xhs_scrape.py
- services/adapters/bilibili_scrape.py
- services/adapters/zhihu_scrape.py
- services/adapters/web_scrape.py
- services/adapters/browser_helpers.py
routes:
- routes/scrape.py
frontend_views:
- frontend/src/views/scrape.js # 内容抓取视图
frontend_modules:
- frontend/src/modules/collect.js # 命令TAB中的采集模块
database:
path: agent-local/data/scrape.db
schema: services/scrape_db.py
reserved_prefixes:
- scrape_ # 文件/类名前缀
- /api/scrape # API 路由前缀
redlines:
- "禁止使用 Camoufox(必须用 Chrome/Playwright)"
- "禁止通过 POST /api/ops/run {type:'collect'} 执行"
- "禁止修改旧系统文件(command_bus.py / routes/ops.py)"
# ──────────────────────────────────────────────────────────────
# 模块 C: 视频工厂 (AVE)
# ──────────────────────────────────────────────────────────────
- id: ave-video-factory
name: 视频工厂
description: >
AI 视频生产管线。文案生成 → 脚本拆解 → 素材匹配 → 视频合成 → 渲染输出。
涵盖 AI 提示词工程、素材库管理、渲染任务管理,以及:
· 声音链路(音频先行 / 对口型 / 声音分轨 / 音效)
· 去 AI 感体系(9 种拍摄风格 × 20 位导演风格 × 反AI感强度)
· 人物置换(Wan2.2-Animate 独立业务)
keywords: [ave, 视频, 渲染, 脚本, 素材, ai-video, 配音, 对口型, 音效, 声音分轨,
导演风格, 拍摄风格, 去ai感, 人物置换, 分镜, 可灵, 百炼]
core_scripts:
- 05_tools/09_ave/scripts/
- 05_tools/09_ave/scripts/person_swap/ # 🔄 人物置换(独立业务子包)
frontend_views:
- frontend/src/views/ave-*.js
- frontend/src/views/workflow.js
- frontend/src/views/capabilities.js
- frontend/src/views/person-swap.js # 🔄 人物置换工作台
# ──────────────────────────────────────────────────────────────
# 模块 D: 联邦管理
# ──────────────────────────────────────────────────────────────
- id: federation
name: 联邦管理
description: >
三台机器的联邦协同。包括机器状态监控、Git 同步、对账检查、远程 Shell。
核心基础设施:guardd 守护进程(每台机器运行,管理任务/心跳/健康检查)。
keywords: [fleet, federation, guardd, 联邦, 同步, 机器, ssh]
core_files:
- 05_tools/00_setup/guardd/
- 04_memory/cross_machine/
- services/fleet_collector.py
frontend_views:
- frontend/src/views/fleet-*.js
- frontend/src/views/machines.js
# ──────────────────────────────────────────────────────────────
# 模块 E: 智能体增强层(给 AI 用的)
# ──────────────────────────────────────────────────────────────
- id: agent-enhancement
name: 智能体增强层
description: >
给 WorkBuddy AI 装"外骨骼"的配置层。
包括身份规则(SOUL.md)、分层记忆系统、知识库、行为协议。
这部分不是自动化执行代码,而是 AI 自身行为的配置文件。
keywords: [soul, 记忆, 知识库, 协议, identity, 智能体]
core_files:
- 01_core/SOUL.md # 🚫 AI 行为规则,禁止修改
- 01_core/IDENTITY.md
- 01_core/USER.md
- 01_core/VERSION # 🚫 版本唯一来源,禁止修改
- 01_core/IDENTITY.tpl.md
- 01_core/USER.tpl.md
- 02_skills/ # 技能目录
- 03_knowledge/ # 知识库
- 04_memory/ # 记忆系统
- 03_knowledge/99_system/ # 系统文档
protocols:
- 03_knowledge/99_system/protocols/
redlines:
- "01_core/ — 只读,通过 apply-config.sh 部署"
- "04_memory/long_term/facts.db — 通过记忆系统 API 操作"
- "01_core/VERSION — 版本唯一来源,禁止硬编码"
# ──────────────────────────────────────────────────────────────
# 模块 F: 系统工具集
# ──────────────────────────────────────────────────────────────
- id: system-tools
name: 系统工具
description: >
杂项工具集。包括 SEO 诊断、内容采集旧版脚本、系统监控、MCP 服务等。
这些工具功能独立,不属于上述任何大模块。
keywords: [tools, seo, mcp, 诊断, 采集旧版]
directories:
- 05_tools/01_system/ # 系统诊断
- 05_tools/05_crawl/ # 采集旧版
- 05_tools/08_trae_agent/ # Trae 编程助手
# ════════════════════════════════════════════════════════════════
# 二、Dashboard 前端全视图索引
# ════════════════════════════════════════════════════════════════
# 按导航分组列出所有视图,让 AI 知道每个视图的去向
# 来源: frontend/src/inline.js 导航配置 + view-registry.js
dashboard_navigation:
- group: 概览
views:
- productions # 生产列表
- assets # 资产列表
- costs # 费用分析
- machines # 机器状态
- group: 矩阵
views:
- matrix-accounts # 账号管理
- matrix-sms-proxy # 短信与代理
- matrix-nurture # 养号执行
- matrix-collect # 🔵 旧系统:信息采集(养号引擎)
- matrix-publish # 内容发布
- matrix-interact # 评论互动
- ops-command # 联邦指挥台
- matrix-comment # 定向评论
- comment-workbench # 评论工作台
- matrix-like # 收藏点赞
- matrix-blueprints # 蓝图管理
- matrix-schedule # 定时任务
- matrix-corpus # 语料库
- matrix-commands # 命令与任务
- group: 视频工厂
views:
- ave-render # 渲染任务
- ave-script # 脚本生成
- ave-materials # 素材库
- ave-templates # 模板
- person-swap # 🔄 人物置换 (Wan2.2-Animate 独立业务)
- group: 内容抓取
views:
- crawl-tasks # 🟢 新系统:抓取任务(映射到 scrape 视图)
- crawl-sources # 源管理
- crawl-history # 抓取历史
- group: 联邦
views:
- fleet-sync # 一键同步
- fleet-reconcile # 对账检查
- fleet-exec # 远程 Shell
- group: 服务
views:
- serve-mcp # MCP 状态
- serve-dashboard # Dashboard 日志
- serve-schedule # 全局定时任务
- group: 其他
views:
- ops-recorder # 录制管理
- matrix-atom-ops # 原子操作
# ════════════════════════════════════════════════════════════════
# 三、红线(任何 AI 进入项目后必须遵守)
# ════════════════════════════════════════════════════════════════
redlines:
# ── 养号核心(改了就崩) ──
- file: services/command_bus.py
reason: 养号命令分发的唯一通道,改错会导致所有养号操作异常
action: 禁止修改。除非 ghai 明确要求
- file: 05_tools/07_matrix/scripts/
reason: 养号引擎全部代码,运行时依赖
action: 禁止修改。需要备份文件先与 ghai 确认
- file: frontend/src/inline.js
reason: 7060 行的内联代码,混装所有旧系统视图。禁止新增代码
action: 新功能必须写在 views/*.js 或 modules/*.js 中,再通过 import 接入
# ── 版本与宪法 ──
- file: 01_core/VERSION
reason: 版本唯一来源,所有地方读取此文件
action: 禁止直接修改。由 ghai 决定版本号
- file: ORACLE.yaml
reason: 联邦宪法,账号→机器分配唯一源
action: 禁止修改。修改由 ghai 通过 git push 完成
# ── 数据安全 ──
- dir: agent-local/
reason: 本机私有数据(密钥、日志、运行时数据),不同步
action: 禁止修改任何文件
- file: 04_memory/long_term/facts.db
reason: L2 结构化事实库,通过记忆 API 操作
action: 禁止直接修改
# ════════════════════════════════════════════════════════════════
# 四、命名保留池
# ════════════════════════════════════════════════════════════════
# 这些名字已被项目使用,新增模块/功能时不要冲突
reserved_names:
# Python 模块名 / 类名
python_classes:
# 养号系统
- CommandBus
- MachineSession
- MatrixManager
- DouyinOps
- AuthManager
- CDPConnector
# 抓取系统
- ScrapeEngine
- ScrapeDB
- ScrapeAdapter
- DouyinScrapeAdapter
- XhsScrapeAdapter
- BilibiliScrapeAdapter
- ZhihuScrapeAdapter
- WebScrapeAdapter
# 其他
- DashboardPlugin
- AgentOSPlugin
- CollectAdapter # 🚫 已弃用,用 ScrapeAdapter
# Python import 路径
python_imports:
- services.command_bus
- services.collect_engine # 🚫 已弃用 → services.scrape_engine
- services.collect_db # 🚫 已弃用 → services.scrape_db
- services.scrape_engine
- services.scrape_db
- routes.ops
- routes.collect # 🚫 已弃用 → routes.scrape
- routes.scrape
- plugins.crawl
# API 路由前缀
api_routes:
- /api/ops/ # 养号操作入口
- /api/collect/ # 🚫 已弃用 → /api/scrape/
- /api/scrape/ # 内容抓取
- /api/matrix/ # 养号数据接口
- /api/federation/ # 联邦接口
- /api/plugins/ # 插件接口
- /api/summary # 面板总览
# Dashboard 视图名(注册在 view-registry.js 中)
dashboard_views:
# 已迁移视图
- matrix-* # 所有 matrix- 前缀视图(13个)
- fleet-* # 所有 fleet- 前缀视图(3个)
- ave-* # 所有 ave- 前缀视图
- serve-* # 所有 serve- 前缀视图
- crawl-* # 所有 crawl- 前缀视图(映射到 scrape)
- scrape # 🟢 新系统:内容抓取
- collect # 🚫 已弃用 → scrape
- productions
- assets
- costs
- machines
- comment-workbench
- person-swap # 人物置换 (Wan2.2-Animate)
- ops-command
- ops-recorder
- workflow
- capabilities
# ════════════════════════════════════════════════════════════════
# 五、通用开发规则
# ════════════════════════════════════════════════════════════════
# 任何 AI 在项目中新增代码前必须遵守
rules:
- id: new-code-placement
description: 新增代码放哪里
rule: >
新功能必须写在独立文件中。
前端 → views/xxx.js 或 modules/xxx.js
后端 → 按模块建文件
🚫 禁止往 inline.js 新增任何代码
🚫 禁止往 command_bus.py 新增任何代码
- id: module-separation
description: 模块隔离
rule: >
不同模块的文件不要相互引用。
抓取系统不要调用养号系统的函数。
养号系统不要调用抓取系统的函数。
共享基础设施(command_bus、guardd)除外。
- id: naming-conflict
description: 命名冲突检查
rule: >
新增函数/变量/文件前,先查 reservation_names 看名字是否已被占用。
不要用 collect 这个英文词 — 它已经在旧系统中被大量使用。
新系统统一用 scrape。
- id: manifest-update
description: MANIFEST 更新
rule: >
新增模块后,必须更新此 MANIFEST.yaml。
新增视图后,必须在 dashboard_navigation 中登记。
新增红线后,必须在 redlines 中登记。
新增命名后,必须在 reserved_names 中登记。
# ════════════════════════════════════════════════════════════════
# 六、参考文档
# ════════════════════════════════════════════════════════════════
# 想深入了解某模块,读这些
references:
- topic: 总架构
file: CONSTITUTION.md
- topic: 架构宪法(详细版)
file: 03_knowledge/99_system/ARCHITECTURE_CONSTITUTION.md
- topic: 联邦实操
file: FEDERATION_GUIDE.md
- topic: AI 行为规则
file: 01_core/SOUL.md
- topic: 记忆与知识库架构
file: 03_knowledge/99_system/agent-os-memory-knowledge-architecture.md
- topic: 养号系统架构
file: 03_knowledge/99_system/matrix/matrix-nurture-system-architecture.md
- topic: 内容采集系统规划 v2
file: 采集系统框架规划-v2.md # 在用户根目录
- topic: 知识库 AI 入口
file: 03_knowledge/99_system/AI_READING_GUIDE.md
- topic: 项目指令
file: AGENTS.md