Files
MediaCrawler/mac-agent-os-main/99_system/ARCHITECTURE_CONSTITUTION.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

349 lines
14 KiB
Markdown
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 架构宪法
> ⚠️ 本文件已迁移到根目录 `CONSTITUTION.md`
> **请使用根目录版本**:`~/workbuddy-agent-os/agent-sync/CONSTITUTION.md`
> 同时部署到 `~/.workbuddy/CONSTITUTION.md`
>
> 版本: 1.0 | 最后更新: 2026-06-21
> 本文件是 AgentOS 联邦智能体操作系统的**架构总纲**。
> 任何代码开发、文档修改、架构决策之前,先读此文件确定归属层面。
>
> **读完此文件后,你应该能回答:**
> - 这段代码属于哪个层?哪个维度?哪个目录?
> - 开发时应遵守什么硬规则?
> - 版本怎么升?文档怎么维护?
---
## 第一章:系统定位
### 1.1 一句话定义
AgentOS 是一个**运行在多台 Mac 上的 AI 智能体联邦操作系统**,给 WorkBuddy AI 装上外骨骼——技能、工具、联邦、看板、自动化、记忆、知识、协议。
### 1.2 核心理念
| 理念 | 含义 |
|:-----|:------|
| **代码走同步,数据留本机** | 脚本在 Git(agent-sync/),数据在本地(agent-local/) |
| **唯一权威源** | 每个信息维度只有一个`01_core/VERSION`/ORACLE.yaml/SKILL_CARD.yaml) |
| **三层分离** | TRUTH(人工维护)≠ DERIVED(自动生成)≠ VERIFIED(自动对账) |
| **执行通道五层** | 看板→分发→工具→CLI→执行器,层层分明 |
| **不做空壳** | 有文档无代码的技能/工具→归档,不留在活跃目录 |
---
## 第二章:十二维功能全景
系统由 **3 大子系统 × 12 个功能维度** 构成:
### 子系统 A:智能体增强层(给 WorkBuddy 装外骨骼)
| # | 维度 | 位置 | 加载方式 | 说明 |
|:-:|:-----|:-----|:---------|:-----|
| ① | **身份规则** | `01_core/` → `~/.workbuddy/` | 每次对话常驻 ~750 tokens | SOUL.md(规则+触发词)+ IDENTITY.md + USER.md |
| ② | **行为协议** | `03_knowledge/99_system/protocols/` | 触发词激活 ~200 tokens/个 | meta-thinking / cross-domain / stuck-intervention / knowledge-review |
| ③ | **分层记忆** | `04_memory/` | L1→L2→L3 分层截断 | 关键词索引 + ChromaDB 向量 + facts.db + 原文 |
| ④ | **知识库** | `03_knowledge/`(排除 99_system/) | 按需 BM25+向量检索 | 10_concepts/ 20_methods/ 等自然知识 |
### 子系统 B:执行操作系统(自动化干活)
| # | 维度 | 位置 | 说明 |
|:-:|:-----|:-----|:------|
| ⑤ | **技能** | `02_skills/` | WorkBuddy 可调用的能力。当前 7 活跃 + 4 已归档 |
| ⑥ | **工具** | `05_tools/` | 底层执行脚本。当前 8 活跃 + 4 已清空 |
| ⑦ | **看板** | `05_tools/10_dashboard/` | Web 监控界面(FastAPI 1521 行 + 15 插件) |
| ⑧ | **命令分发** | `services/command_bus.py` | 看板→CommandBus→ORACLE 对账→SSH/本地 |
| ⑨ | **CLI 执行** | `05_tools/00_setup/agentos/` + `07_matrix/mc` | 统一命令行入口 + mc 快捷别名 |
| ⑩ | **蓝图系统** | `05_tools/07_matrix/blueprints/` | 12 个 JSON 操作模板 |
### 子系统 C:联邦治理(多机协同 + 安全 + 进化)
| # | 维度 | 位置 | 说明 |
|:-:|:-----|:-----|:------|
| ⑪ | **多机联邦** | `ORACLE.yaml` + guardd + cross_machine | 3 台 Mac、Git 双远程、WPRA 写分区读聚合 |
| ⑫ | **安全治理** | `01_core/SOUL.md` L0 约束 + RSA-4096 + 私钥隔离 | L0 硬约束禁止操作/必须确认/必须操作 |
---
## 第三章:目录结构与职责
```
agent-sync/
│
├── 01_core/ ← 身份规则层(L0)
│ ├── SOUL.md AI 行为规则 + 触发词检测
│ ├── IDENTITY.tpl.md 身份模板(init.sh 填充)
│ ├── USER.md 用户画像
│ ├── VERSION 版本唯一来源
│ ├── MAINTENANCE_GUIDE.md 运维手册
│ ├── UPDATE_SYSTEM.md 更新体系
│ ├── NIGHTLY_AUTOMATION.md 夜间自动化
│ ├── mcp.json MCP 服务配置
│ ├── CONFIG_MANIFEST.yaml 配置清单
│ ├── automation/ 自动化配置入仓(workflows.yaml + plist 模板)
│ └── CHANGELOG.md core 变更日志
│
├── 02_skills/ ← 能力层(L2)
│ ├── active/ [概念分区] 7 个活跃技能
│ │ ├── memory_manager/ 记忆管理(核心)
│ │ ├── inbox_refine/ 收件箱提纯
│ │ ├── collect_to_inbox/ 内容归集 [legacy]
│ │ ├── kb_manager/ 知识库管理
│ │ ├── matrix/ 矩阵养号(实现在 05_tools/)
│ │ ├── sync_manager/ 同步备份
│ │ └── peekaboo_controller/ GUI 自动化(MCP)
│ └── _archived/ 已归档技能(4 个,仅设计文档)
│
├── 03_knowledge/ ← 知识层(L1+L4)
│ └── 99_system/ 系统知识(WorkBuddy AI 按需消费)
│ ├── AI_READING_GUIDE.md AI 入口
│ ├── protocols/ 4 个行为协议
│ ├── architecture/ 架构文档
│ ├── matrix/ 矩阵系统文档
│ ├── dashboard/ Dashboard 设计
│ ├── pipelines/ 流水线规范
│ ├── prompts/ 提示词
│ └── archive/ 已归档系统文档
│
├── 04_memory/ ← 记忆层(L5)
│ ├── long_term/facts.db L2 事实库
│ ├── cross_machine/ 跨机数据(machines/status/tasks/encrypted)
│ └── daily_summaries/ 每日摘要
│
├── 05_tools/ ← 工具层(L3)
│ ├── 00_setup/agentos/ 统一 CLI 入口(19 子命令)
│ ├── 00_setup/guardd/ 联邦守护进程(9 模块)
│ ├── 01_system/ 系统诊断(12 脚本)
│ ├── 05_crawl/ 内容采集(longcat + content-inspiration)
│ ├── 07_matrix/ 矩阵养号系统(mc CLI + Camoufox + 12 蓝图)
│ ├── 08_trae_agent/ Trae AI 编程助手
│ ├── 09_ave/ 视频工厂
│ └── 10_dashboard/ 监控面板(FastAPI 1521 行 + 15 插件 + 前端)
│
├── 99_system/ ← 项目文档层(维护者视角)
│ ├── ARCHITECTURE_CONSTITUTION.md [本文件] 架构宪法
│ ├── INDEX.md 项目文档索引
│ ├── AGENTOS-PANORAMA.md 系统全景
│ └── upgrade_notes/ 升级笔记
│
├── AGENTS.md ← AI 项目指令(精简版)
├── README.md ← 人类入口(精简版)
├── ORACLE.yaml ← 联邦宪法
├── FEDERATION_GUIDE.md ← 联邦实操指南
└── requirements.txt ← Python 依赖
```
---
## 第四章:硬规则(不可绕过)
### 规则 1:版本唯一来源
```
唯一文件:01_core/VERSION
所有文档和代码中的版本号从此文件读取,不允许硬编码。
例外:guardd.py 在启动时动态读取此文件。
版本规则:
X.0.0 — 核心框架或联邦架构升级
0.X.0 — 工具级增加或重大升级
0.0.X — 配置小项目升级、bugfix
Skills 版本:独立 semver,写在 SKILL_CARD.yaml 中
```
### 规则 2:SKILL_CARD.yaml 是技能权威元数据
```
原来:SKILL.md 写描述 + version.json 写版本 → 两处不同步
现在:SKILL_CARD.yaml 为权威,包含 version/scripts/changelog/dependencies
version.json 保留供 export_skills.sh 读取,但版本以 SKILL_CARD 为准
SKILL.md 只写人类可读的说明
格式规范参见 02_skills/_template/SKILL_CARD.yaml
```
### 规则 3:ORACLE.yaml 是账号分配唯一源
```
废除 accounts_registry.yaml(在 05_tools/07_matrix/ 中标记为废弃)。
所有账号→机器的分配统一写在 ORACLE.yaml 的 accounts: 节下。
guardd _sync_account_override() 从 ORACLE.yaml 读取。
```
### 规则 4:guardd 心跳只写本地
```
心跳数据仅写入:
- agent-local/runtime/guardd/events/
- cross_machine/status/{hostname}/heartbeat.json
- cross_machine/status/live/{uid}.json
❌ 不再写入 cross_machine/machines/{UID}/heartbeat.json(曾导致 Git 污染)
Dashboard 通过 guardd 的反向连接推送获取心跳。
```
### 规则 5:统一 CLI 入口
```
唯一入口:05_tools/00_setup/agentos/ (python3 -m agentos)
19 个子命令:
系统管理(14):init / sync / skill / tool / config / check / backup /
upgrade / restore / rebuild-vector / localize / register /
cluster-status / cluster-cleanup
联邦管理(5):matrix / ave / crawl / fleet / serve
mc 是 matrix 的快捷别名,指向统一 CLI。
07_matrix/scripts/agentos/ 保留作为插件库,不再作为独立入口。
```
### 规则 6:空技能/空工具不留在活跃目录
```
- 4 个空技能(content_processor/web_crawler/auto_collector/cloakbrowser_controller)
已归档到 02_skills/_archived/
- 4 个空工具目录(02_browser/03_ocr/04_media/06_mobile)
已添加 README 说明清空原因
- 新建技能/工具时:先有实现代码,再写 SKILL.md/SKILL_CARD.yaml
```
### 规则 7:协议文件路径
```
行为协议文件位于:03_knowledge/99_system/protocols/
SOUL.md 中引用的 99_system/protocols/ 是相对于知识库根(03_knowledge/)的路径。
根目录 99_system/ 是项目文档(维护者视角),不含协议文件。
```
### 规则 8:文档三分法
```
TRUTH(人工维护,唯一权威):
01_core/(SOUL/USER/MAINTENANCE_GUIDE/mcp.json/VERSION)
02_skills/*/SKILL_CARD.yaml
ORACLE.yaml
DERIVED(从 TRUTH 自动生成):
IDENTITY.md(从模板 + init.sh 生成)
README.md(精简为入口)
VERIFIED(代码 vs 文档自动对账):
agentos check 步骤(模块数/命令数/文件存在性)
```
### 规则 9:文件权限
| 目录 | 权限 | 说明 |
|:-----|:------|:------|
| `01_core/` | 只读 | 通过 `apply-config.sh` 部署 |
| `02_skills/` | 可读写 | 改前确认 |
| `03_knowledge/` | 只读 | 改前确认 |
| `04_memory/` | 只读 | 改前确认 |
| `05_tools/` | 可读写 | 工具脚本 |
| `00_bootstrap/` | 可读写 | 改前确认 |
| `99_system/` | 可读写 | 项目文档 |
| `agent-local/` | 只读 | 本机数据,不同步 |
### 规则 10:禁止操作
```
- 禁止直接修改 01_core/ 下的文件(通过 apply-config.sh 部署)
- 禁止修改 agent-local/ 下的任何文件
- 禁止修改 04_memory/long_term/facts.db
- 禁止删除任何文件(只能归档到 90_archive/)
- 禁止修改 01_core/SOUL.md 中的 L0 硬约束规则本身
- 禁止将 L3 层原文暴露给外部 API 或第三方服务
```
---
## 第五章:版本对应关系速查
当你想知道「某段代码在哪个版本」时:
| 组件 | 版本 | 位置 | 版本显式来源 |
|:-----|:-----|:-----|:------------|
| AgentOS 框架 | 4.2.0 | 整个系统 | `01_core/VERSION` AGENTOS_VERSION |
| guardd | 2.3.0 | `05_tools/00_setup/guardd/` | `01_core/VERSION` GUARDD_VERSION |
| ORACLE schema | 1.0 | `ORACLE.yaml` | `01_core/VERSION` ORACLE_SCHEMA |
| memory_manager | 1.2.0 | `02_skills/memory_manager/` | SKILL_CARD.yaml |
| inbox_refine | 1.1.0 | `02_skills/inbox_refine/` | SKILL_CARD.yaml |
| kb_manager | 1.1.0 | `02_skills/kb_manager/` | SKILL_CARD.yaml |
| collect_to_inbox | 1.0.0 | `02_skills/collect_to_inbox/` | SKILL_CARD.yaml |
| matrix | 1.0.0 | `02_skills/matrix/` + `05_tools/07_matrix/` | SKILL_CARD.yaml |
| sync_manager | 1.1.0 | `02_skills/sync_manager/` | SKILL_CARD.yaml |
| peekaboo_controller | 1.0.0 | `02_skills/peekaboo_controller/` | SKILL.md |
---
## 第六章:开发决策流程
决定「新功能/新代码应该放哪」的流程:
```
1. 确定功能属于哪个子系统:
├─ 给 AI 用的?→ 子系统 A(智能体增强)
├─ 自动化执行?→ 子系统 B(执行操作)
└─ 多机协同/安全/进化?→ 子系统 C(联邦治理)
2. 确定具体维度(1-12):
从第二章的 12 维全景中找到最匹配的维度
3. 确定目录:
从第三章的目录结构与职责中找到对应目录
4. 检查硬规则:
第四章的 10 条规则,一条不落
5. 确定版本号:
如果涉及:
- 核心框架/联邦架构变更 → 升大版本
- 工具级别增加或升级 → 升中版本
- 配置/bug修复 → 升小版本
修改 01_core/VERSION 后,更新 CHANGELOG.md
6. 创建文档:
- 新增技能:必须有 SKILL_CARD.yaml + 实现代码
- 新增工具:必须有 MODULE.md 或 README.md + 实现代码
- 架构变更:在 99_system/ 或 03_knowledge/99_system/ 添加
```
---
## 附录 A:术语对照
| 术语 | 含义 |
|:-----|:------|
| AgentOS | 本系统代号 Claw |
| WorkBuddy | AI 宿主平台 |
| SOUL.md | AI 行为规则 + 触发词的最高优先级配置 |
| ORACLE.yaml | 联邦宪法,机器定义+账号分配+任务计划 |
| guardd | 守护进程,每 300 秒执行 9 模块循环 |
| WPRA | Write Partitioned Read Aggregated,写分区读聚合 |
| SKILL_CARD.yaml | 技能权威元数据(版本/依赖/脚本/变更日志) |
| 01_core/VERSION | 版本唯一来源 |
| cross_machine | 04_memory/cross_machine/ 跨机数据交换目录 |
## 附录 B:快速定位表
| 你想做什么 | 去哪个目录 | 看什么文件 |
|:----------|:-----------|:----------|
| 改 AI 行为规则 | `01_core/` | SOUL.md |
| 改用户画像 | `01_core/` | USER.md |
| 加一个新技能 | `02_skills/` | 参考 _template/ |
| 改技能代码 | `02_skills/<技能名>/` | *.py |
| 改知识库 | `03_knowledge/` | 对应分类目录 |
| 改记忆系统 | `04_memory/` | long_term/ |
| 加一个工具 | `05_tools/<编号>_<名称>/` | 参考同类工具 |
| 改矩阵养号 | `05_tools/07_matrix/` | scripts/ |
| 改看板 | `05_tools/10_dashboard/` | app.py / plugins/ / frontend/ |
| 改守护进程 | `05_tools/00_setup/guardd/` | guardd.py |
| 改 CLI | `05_tools/00_setup/agentos/` | main.py |
| 改联邦宪法 | 根目录 | ORACLE.yaml |
| 改文档索引 | `99_system/` | INDEX.md |
| 增版本号 | `01_core/` | VERSION |