Files
MediaCrawler/mac-agent-os-main/03_knowledge/99_system/archive/CORE-ARCHITECTURE.md
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

7.0 KiB
Raw Blame History

CORE-ARCHITECTURE.md —— AgentOS 核心架构说明

本文档是 AgentOS 的"宪法",定义了目录职责、数据边界、换机流程。 最后更新:2026-05-02 | 版本:3.0 多智能体协同


一、系统定位

AgentOS 是一套运行在个人 Mac 上的多智能体协同系统,核心能力:

  • 多机协同:主节点(master) + 工作节点(maintainer) + 采集节点(node) 分级协作
  • 身份驱动:角色决定权限,所有脚本运行前自动检查
  • 全量Git跟踪:agent-sync/ 全量进 Git,不搞选择性部分跟踪

二、目录职责

~/workbuddy-agent-os/agent-sync/(坚果云同步 + Git 版本控制)

目录 职责 同步 Git
00_bootstrap/ 初始化脚本(init.sh、apply-config.sh) ✅ ✅
01_core/ 核心配置(SOUL.md、IDENTITY.md、USER.md、mcp.json) ✅ ✅
02_skills/ 所有技能(每个技能一个文件夹,含 SKILL.md) ✅ ✅
03_knowledge/ Obsidian 知识库(只放提炼后的 .md 文件) ✅ ✅
04_memory/ 记忆体(L2 facts.db + L1 索引 + 日志) ✅ ✅
05_tools/ 公共工具脚本(环境检查、爬虫、媒体处理) ✅ ✅
06_runtime/tasks/ 任务执行记录 ✅ ✅
07_migration/ 打包/还原脚本 ✅ ✅
CHANGELOG.md 变更日志 ✅ ✅
README.md 项目说明 ✅ ✅
REQUIREMENTS.md 环境要求 ✅ ✅
SKILLS-CATALOG.md 技能目录 ✅ ✅
CORE-ARCHITECTURE.md 本文档 ✅ ✅

~/workbuddy-agent-os/agent-local/(本机专属,不同步,不进 Git)

agent-os-local/
├── memory/                    # 记忆体相关(软链接目标)
│   ├── raw/                   # L3 对话原文(隐私)
│   └── vector_db/             # ChromaDB + 关键词索引
├── runtime/                   # 运行时临时数据
│   └── cache/                 # 临时缓存
└── materials/                 # 采集的原始素材
    ├── web/                   # 网页保存
    ├── video/                 # 视频下载(yt-dlp 输出)
    ├── audio/                 # 录音文件
    ├── screenshots/           # 截图
    └── refined_for_inbox/     # 已提炼待投递的 .md

agent-os/ 内通过软链接指向 agent-os-local/ 中的实际目录,脚本无需改路径。


三、软链接映射

~/workbuddy-agent-os/agent-sync/04_memory/long_term/raw     → ~/workbuddy-agent-os/agent-local/memory/raw
~/workbuddy-agent-os/agent-sync/04_memory/vector_db         → ~/workbuddy-agent-os/agent-local/memory/vector_db
~/workbuddy-agent-os/agent-sync/06_runtime/cache            → ~/workbuddy-agent-os/agent-local/runtime/cache

换机时 init.sh 会自动检测并重建这些软链接。


四、技能分类规则

system 技能(后台自动运行,不直接对话触发)

技能 说明
memory_manager 记忆提炼、去重、语义检索
inbox_refine 收件箱提纯→知识库归档
collect_to_inbox 知识库目录扫描→收件箱
auto_collector 24h 自动信息收集
sync_manager 备份与同步管理
kb_manager 知识库入库与管理

user 技能(对话触发)

技能 说明
content_processor 统一内容处理(视频/文章/语音/社交)
web_crawler 网页抓取 + 反爬
git_sync_manager Git多机同步管理器(替代坚果云依赖)

五、知识库索引卡片规范

多台电脑采集的素材通过索引卡片共享,避免大文件同步冲突。

文件命名

{hostname}_{YYYYMMDD}_{slug}.md
示例:Redmi-12C_20260428_douyin-普通人逆袭.md
      MBP-M3_20260428_bilibili-科普冷知识.md

卡片模板

---
title: 素材标题
source_url: https://...
local_path: ~/workbuddy-agent-os/agent-local/materials/video/xxx.mp4
type: video|audio|web|image
platform: douyin|xiaohongshu|bilibili|web
collected_by: Redmi-12C
collected_at: 2026-04-28
tags: [标签1, 标签2]
---
一句话说明这个资源的口播改编价值。

collected_by 字段标明采集机器,防止多机同步时同名冲突。


六、同步策略

坚果云

  • 同步整个 ~/workbuddy-agent-os/agent-sync/ 目录
  • ~/workbuddy-agent-os/agent-local/ 不加入同步(通过软链接隔离,天然安全)
  • 无需配置选择性排除

Git

  • 远程仓库:https://gitee.com/babycalf/mac-agent-os.git
  • 分支策略:main 分支,单线开发
  • 排除:大媒体文件、运行时缓存、打包产物(见 .gitignore)

Git同步技能(替代坚果云)

使用 git_sync_manager 技能可完全替代坚果云依赖:

  1. 首次配置:技能引导完成SSH密钥生成、Gitee公钥添加、仓库配置
  2. 日常同步:一键执行 git pull / git push 操作
  3. 多机管理:每台电脑使用独立SSH密钥,安全隔离
  4. 自动化:可配置定时任务或通过 agentos sync 命令触发

数据流

本机采集 → ~/workbuddy-agent-os/agent-local/materials/ → AI提炼 → ~/workbuddy-agent-os/agent-sync/03_knowledge/00_inbox/
                                                        ↓ 坚果云同步
                                                        ↓
其他电脑 → inbox_refine → 归档到知识库 → Git commit → Gitee

七、换机还原流程(3步)

# 1. 等坚果云同步完成,agent-os 目录出现在本机
# 2. 安装基础环境
cd ~/workbuddy-agent-os/agent-sync/00_bootstrap && bash init.sh

# 3. 手动安装 oMLX(Apple MLX 框架,硬件依赖)

init.sh 会自动完成:

  • 创建 ~/workbuddy-agent-os/agent-local/ 各子目录
  • 重建 3 个软链接(raw、vector_db、cache)
  • 创建 Python venv 并安装依赖
  • 填充本机设备信息到 IDENTITY.md
  • 部署核心配置(SOUL.md、USER.md)到 WorkBuddy
  • 检测并提示需要手动安装的组件

八、定时任务

任务 时间 脚本 说明
每日记忆提炼 02:00 memory_manager/daily_digest.py 对话→L2 事实
收件箱汇聚 02:30 collect_to_inbox/collect_to_inbox.py 知识库扫描→inbox
收件箱提纯 03:00 inbox_refine/inbox_refine.py inbox→分类归档

九、运行时外挂(不属于仓库)

以下组件由系统管理,不进 Git,换机时需手动安装:

组件 路径 说明
oMLX /Applications/oMLX.app 本地 LLM 引擎
WorkBuddy Python ~/.workbuddy/binaries/python/ WorkBuddy 管理的运行时
WorkBuddy Node ~/.workbuddy/binaries/node/ WorkBuddy 管理的运行时
Playwright 浏览器 ~/Library/Caches/ms-playwright/ playwright install chromium 重装
坚果云客户端 /Applications/Nutstore.app 系统应用