Files
WorkBuddy df56c2c137 初始化提交:contentm_agent 工作区全量快照
内容分四块:
1、产品规划产出 —— MCN 短视频整合营销工作台的①段五份(1a 需求/1b 竞品/1c 画像/1d 策略/1e 场景)、②段两份(2a 功能/2b 布局)、③段界面(DESIGN.md 契约与令牌表 + mcn-workbench.html 原型 + 实测/会诊/审查三份 + 23 张闸门截图)。
2、开源竞品调研 —— 5 个内容工作台项目的取证原始件与 1b 系列分析文档。
3、参考资料 —— 竞品视频抽帧 1145 张 + 2 个源视频 + 功能点截图。
4、机制侧 —— 协作脚本与状态台账、工作区记忆日志、抽帧/OCR 脚本。

.gitignore 只排运行时日志、脚本备份副本与一次性探针输出,其余按原样入库。
2026-10-08 08:13:02 +08:00

142 lines
19 KiB
Markdown
Raw Permalink 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.
# 目标执行状态 · 调研 5 个开源内容工作台项目并生成分析文档
> 目标目录:`执行会话/目标-调研5个开源内容工作台项目并生成分析文档-5199a6/`
> 台账(唯一权威):`tmp/supervise-inbox/tasks.json` | 目标:`tmp/supervise-inbox/goal.json`
## 一、目标与生命周期
- 目标:使用产品规划技能调研 5 个开源项目并生成分析文档。
- 生命周期:**进行中**。
- 项目 slug:`content-workbench`(按任务说明「建议值」,未经用户另行指定)。
## 二、第 1 棒(已完成)
- 会话:`[执行]-开源项目调研-5项目清单与初步定位`(id `52ace70a-bd4a-4201-a7b0-62237c092375`)
- 做了什么:把 5 个仓库的**元数据 + README 全文 + 文件树**拉齐(GitHub 公开 REST API),产出「5 项目清单与初步定位」一份。
- 产物:`docs/pm/content-workbench/research/1b-竞品分析-5项目清单与初步定位.md`
- 原始证据:`取证/api/`(`*.repo.json` / `*.README.md` / `*.tree.json` / `postsider.ATTRIBUTION.md.txt` 等)+ 取证脚本 `取证/_fetch_repos.py`
- 取证时间:2026-10-07 16:13–16:17(CST)
### 第 1 棒的关键发现
1. **PostSider 是 Postiz 的 fork**(`postsider/ATTRIBUTION.md` 逐字自述,AGPL-3.0)⇒ 4、5 两项同源,合成一份分析。
2. **文到 AI 仓库不含业务源码**(README 明示闭源;全仓仅 5 个文件)⇒ 无法做源码级分析。
3. **许可分水岭**:Easel / OpenCreator = Apache-2.0;Postiz / PostSider = **AGPL-3.0**。
## 三、第 2 棒(已完成)
- 会话:`[执行]-[开源项目调研]-Postiz与PostSider同源双形态分析`(id `a41bb3a3-1015-4a1c-9269-1fd75f998cb7`)
- 范围:按第 1 棒「四、下一棒该做什么」第 1 项 —— **Postiz + PostSider 同源双形态分析**(合成一份)。
- 产物:`docs/pm/content-workbench/research/1b-竞品分析-Postiz与PostSider同源双形态.md`
- 本棒新证据:`取证/api/fork/`(19 件:`apps/mcp` README / 工具契约 / server.json / SDK / package.json / releases / 迁移证据等)+ `取证/api/fork/fork-diff.json`(差异量化,可复算)
- 本棒新脚本:`取证/_fetch_fork_evidence.py`(补拉增量面)· `取证/_fork_diff.py`(两侧文件树差异量化)
- 取证时间:2026-10-07 16:40–17:05(CST)
### 第 2 棒的关键发现(会改变后续棒次排期)
1. **改动量远不止"换牌"**(文件树级量化):两侧同路径文件 329 条,其中**逐字节相同仅 92**。PostSider 删掉 `apps/extension`(16)与 `libraries/react-shared-libraries`(57)、前端 `src/components` 293→78、**净增独立 MCP 包 `apps/mcp`(46 文件)**。
2. **工程化代差**:Prisma 由 `db push` 升级为**迁移体系**(0 → 26 条迁移);测试由 **0 → 94 个 `*.spec.ts`**(根级 jest 配置 2 → 16);后端路由 32→42、服务 19→28。
3. **PostSider 的增量面确实是 Agent 桥**:MCP 独立成包 `@postsider/mcp`、**19 个工具**(13 读 / 6 写,源码级双证:README + `tool-inventory.ts` 断言清单)、每工具四条风险注解;上游 Postiz 的 MCP **嵌在后端**(`chat/mcp.relay.service.ts`),走"托管 endpoint + 15 个 agent 连接器"路线。
4. **定价缺口已闭合**:Postiz Cloud $29 / $39 / $49 / $99 每月;PostSider $20 / $35 / $45 / $90 每月(均 7 天试用;**每档都含 API/SDK/MCP/Webhooks**)。
5. **新增未知项**:真 fork 点查不到(GitHub 上未标记 fork、无 parent 指针);改动**行数**未做(tree API 不给行数)—— 见 §七。
## 四、第 3 棒(已完成)
- 会话:`[执行]-[开源项目调研]-Easel深度分析`(id `a4993b72-040e-49db-beb4-375f5201ff61`,取自本会话 `$CODEBUDDY_SESSION_ID`)
- 范围:按第 2 棒「五、下一棒该做什么」第 1 项 —— **Easel 深度分析**(`ZJU-REAL/Easel`,Apache-2.0)。
- 产物:`docs/pm/content-workbench/research/1b-竞品分析-Easel.md`(37,520 B / 294 行)
- 素材:**只读复用**第 1 棒已拉的 `取证/api/easel.{repo.json,README.md,tree.json}`(⛔ 未重复下载)+ 旁证(只读)`参考资料/Easel_功能点与截图/`
- 本棒新证据:`取证/easel/`(17 件:官方文档 4 份 `skill-function-mapping.md`/`SKILL-SPEC.md`/`prompt-stack.md`/`known-issues.md` + 配置契约 6 件 `AGENTS.md`/`SOUL.md`/`pyproject.toml`/`.env.example`/`CHANGELOG.md`/`openclaw.json5` + 2 个代表性 `SKILL.md` + releases/tags/languages/contributors)|`取证/easel.tree.stat.json`
- 本棒新脚本:`取证/_easel_tree_stat.py`(文件树统计,可复算)
- 取证时间:2026-10-07 17:06–17:19(CST);⚠️ `raw.githubusercontent.com` 通道不稳(多文件 `000` 失败)⇒ 改用 **GitHub `contents` API** 取正文,17 件全部成功。
### 第 3 棒的关键发现
1. **主体是"技能库"不是"排期工具"**:全仓 1002 blob,**771 在 `skills/`**;`skills/openclaw/` **716 文件 / 114 个技能目录 / 114 个 `SKILL.md`**(源码级逐个数出);发布层只占 20/114。
2. **三层加载是硬机制**(`SKILL-SPEC.md` v0.3):Metadata 常驻 / Instructions 触发时 / Resources 按需,且**硬规定 `SKILL.md` ≤200 行、领域知识外置 `references/`**;**94 个技能写了溯源的 `EASEL-META.md`**。
3. **能力数字有三处不一致,实测以 114 为准**:文件树 114 / 能力地图正文 114 / 地图分层总览表相加 113(创作层列 51、正文实列 52)/ README 徽章 113(旧值);`CHANGELOG` 印证 112→113→114。
4. **治理是源码级的,不只是文档**:`content_guard.py`(出站内容敏感信息 fail-closed、退出码 7;AI 措辞仅告警)+ `persona_gate.py`(人设 <80 分只提醒不阻断)+ `validate_skills.py`/`validate_skill_commands.py`(**解析技能里的命令对照 argparse 检查漂移**)。
5. **发布路线=浏览器自动化,且自陈风险**:README 明写「谨慎自动发布到小红书」;`skill-xhs-publisher` 内置反检测参数并提示测试号/小流量/人工复核。**与 Postiz「官方 OAuth、不自动化」相反** ⇒ 同一条产品线不可混抄。
6. **本棒暴露两处待核**:① `CHANGELOG` 称 CI 跑 38 条技能自带测试,而实测 `skills/**/tests/` 仅 6 个文件 ⇒ 38 疑为用例数(**未核实**);② `SKILL-SPEC` 的 `test1.prompt/.expected` 约定在整树**零文件**(弃用)。均已写入产物 §十四。
## 五、第 4 棒(已完成)
- 会话:`[执行]-[开源项目调研]-OpenCreator深度分析`(会话名取自本棒派活原文;产物落点见下)
- 范围:按第 3 棒「十四、下一棒建议」第 1 项 —— **OpenCreator 深度分析**(`krillinai/OpenCreator`,Apache-2.0,默认分支 `master`)。
- 产物:`docs/pm/content-workbench/research/1b-竞品分析-OpenCreator.md`(57,550 B / 约 430 行)
- 素材:**只读复用**第 1 棒已拉的 `取证/api/opencreator.{repo.json,README.md,tree.top.json,tree.docs.json}`(⛔ 未重复下载)
- 本棒新证据:`取证/opencreator/`(**76 件**:11 份分片文件树 + 62 份正文 + 3 份统计/日志)
- 分片文件树 11 份:`.github` / `apps` / `assets` / `packages` / `resources` / `runtime` / `scripts` / `skills` / `template` / `docs/specs` / `docs`(递归)—— **逐片 `truncated=false`,整树完整**(第 1 棒 `recursive=1` 中断的缺口已闭合)
- 正文 62 份:`AGENTS.md` · 根 `package.json`/`tsconfig.base.json`/`.env.example`/`pnpm-workspace.yaml`/`CONTRIBUTING.md` · `docs/`(Runtime 设计蓝图、Runtime API v1、`specs/` 图像 provider 设计、视觉组件规范、模板治理专文、计划任务运行手册与验收报告、superpowers 设计、中文 README 等 20 份)· `packages/protocol/src/*` **17 份契约源码** + `package.json` · `packages/skill-market/*` 5 份 · `skills/*` 8 份 · `runtime/krillinai/go.mod` · `apps/{daemon,web,desktop}/package.json`
- 本棒新脚本:`取证/_opencreator_tree.py`(分片拉树)· `取证/_fetch_opencreator_docs.py`(正文批量拉取,**raw 优先、失败回落 contents API**)· `取证/_opencreator_tree_stat.py`(树统计 → `取证/opencreator/opencreator.tree.stat.json`,可复算)
- 取证时间:2026-10-07 17:37–17:56(CST);⚠️ 本棒实测 `raw.githubusercontent.com` **60/61 成功**(1 件失败经 contents API 补齐)—— 与第 3 棒"raw 不稳"不同 ⇒ 该通道**随时刻波动**,脚本按双通道写。
### 第 4 棒的关键发现
1. **路线与另 4 个项目全不同**:它是「**给创作者用的 Codex 外壳**」—— README 与设计文档双证「不重新实现 Agent loop / Skills runtime / MCP runtime」,只做**进程生命周期 + 事件归一化 + 持久化 + 调度 + UI**(`codex exec --json` + stdin prompt + stdout JSONL)。
2. **规模量级最大**:**2182 blob / 567 tree / 约 3.25 亿字节**(源码级统计);`apps/` 1264 文件(daemon 702 / web 437 / desktop 120 / harness 5);`.ts` 903 + `.tsx` 187 + `.go` 163;**测试文件 416 个**。
3. **创作侧是真资产**:`template/` **108 个模板条目**(image-generation 79 + video-generation 28 + cover-generator 1);**技能市场 52 条候选 / 10 个中文分类**,每条带**七项风险声明**(requiresLogin / requiresApiKey / externalWrite / readsLocalFiles / commercialLicenseReview / privateDataRisk / notes)。
4. **`packages/protocol` 契约包是精华**:`protocolVersion 0.1.0`、**provider 白名单 17 条**(其中 `codex-native` 与 `edge-tts` **零凭据**,且 `image.provider` **默认值就是 `codex-native`**)、**状态机 + `expectedRevision` + `idempotencyKey`** 三件套、专为"远端到底收没收"设 `unknown_remote_acceptance`/`abandoned_unknown` 两态。
5. **工程治理密度罕见**:仓根 `AGENTS.md`(13,063 B)=**验证分级铁律(P0/P1/P2)+"⛔ 不得过度验证"+"⛔ 不得用未执行的验证暗示无回归"** + Creator 面板单一实现铁律 + **Web/Desktop 一致性门禁(含构建产物哈希硬门)** + 完成声明门禁。
6. **已跑过一轮"专属会话"重构且留痕完整**:`Schedule ↔ Thread` 一对一(`schedule_task`)、旧 `parallel` 全转 `queue`、演练脚本 `pnpm release:verify-scheduled-task-upgrade`(9 条验证 + 幂等复验)、灰度 8 项;验收自评 **`PARTIAL / BLOCKED_ENV`**(仓库不含真实原生 Desktop Host)⇒ **对我方"多会话/机制类项目"参考价值最高的一份**。
7. **一处源码级留白**:`skillMarketCatalog`(已上架)与 `customSkills` **在源码里都是空数组** ⇒ "52 条有多少真上架"查不到(已入 §七缺口)。
## 五之二、第 5 棒(已完成)
- 会话:`[执行]-开源项目调研-文到AI项目分析`(id `1b5dce36-1d47-4661-b6e5-af6c7ad2e33e`)
- 范围:目标说明 §二 清单第 2 项 `wendaoai/wendao-content-workbench`。
- 产物:`docs/pm/content-workbench/research/1b-竞品分析-文到AI.md`(31,523 B / 253 行)
- 素材:只读复用第 1 棒 `取证/api/wendao.*`;本棒新增 `取证/wendao/`(20 件:官网/隐私政策/sitemap/script + GitCode 更新仓 `stable.json`/版本清单/树/releases 渲染页 + 各 API 读数)
- 本棒新脚本:`取证/_fetch_wendao.py`
- 取证时间:2026-10-07 18:07–18:10(CST)
- 关键结论:**真闭源**(全仓 5 blob、`NOTICE.md` 声明 proprietary、`languages` 空对象)⇒ 只能按**文档级**调研;产品侧 13 天发 11 版(0.0.113→0.0.123);独立更新清单(四平台 + sha256 + 升级策略)+ 发布助手「只填充不代发」两条最可搬。
- 🔴 口径裁定(用户 2026-10-07 18:27 逐字):「文到AI 通过说明文档调研就行 不需要源码」⇒ 已写入目标说明 §六之二,**消解了第 5 棒留在 `NEED-USER.md` 的待裁项**。
## 五之三、第 6 棒(已完成 · 本轮 · 收口)
- 会话:`[执行]-开源项目调研-跨项目汇总对比`(id `47860f06-c51f-4c2a-b7ad-2a6362b8a675`)
- 范围:**只做跨项目汇总对比文档**(验收判据第 3 条)。
- 产物:`docs/pm/content-workbench/research/1b-竞品分析-跨项目汇总对比.md`(40,392 B / 343 行)
- 做法:**只读复核**前 5 棒产物 + 用 `取证/` 原始 JSON / 文件**复核读数**(未做新源码取证、未改写任何前棒产物);横向对比按主任务七维度(定位/形态/技术栈/许可/活跃度/功能覆盖/可借鉴点/风险)+ 同源单列 + 「对内容工作台方向的选型与借鉴结论」。
- 本棒复核发现的**跨棒冲突 4 条**(均以原始取证为准,详见汇总文档 §十一):① Easel 技能数 113→**114**;② Postiz 树「截断前」措辞有误(`tree_truncated=false`,**完整**);③ PostSider 连接器 33(README)vs **34**(`*.provider.ts` 实测);④ OpenCreator 模板条目 108(79/28/1)经原始树分片**复算吻合**,但派生件 `opencreator.tree.stat.json` 的 `template_entries_by_category` **全为 0(失真)**,须以原始分片为准。
- 取证时间:2026-10-07 18:31–18:5x(CST)
## 六、验收判据现状(与 `goal.json` 的 `acceptance_state` 对齐)
- 单项目分析文档齐全(5 个项目全覆盖,Postiz 与 PostSider 同源合并为一份并写明差异)—— **过**(5 份文档覆盖 5 项目:总览 1 + Postiz/PostSider 合并 1 + Easel 1 + OpenCreator 1 + 文到 AI 1)
- 每份含产品定位与功能清单与可借鉴点 —— **过**(第 1–5 棒产物均含三段)
- 一份跨项目汇总对比文档 —— **过**(第 6 棒产物,本目标目录内)
- 每份标注来源链接与取证时间 —— **过**(逐条标链接与取证时间,含本汇总文档)
- 产物全部落在本目标目录内 —— **过**(6 份产物均在 `执行会话/目标-…-5199a6/docs/pm/content-workbench/research/`)
## 六之二、判据逐条自评(供检查会话复核 · 本轮新增)
> 口径:`goal.json` 的 `acceptance_state` 五条,逐条给「过/未过 + 一句依据」。⛔ 不只写「已完成」。
1. **单项目分析文档齐全(5 项目全覆盖,Postiz 与 PostSider 同源合并为一份并写明差异)—— 过**。依据:`docs/pm/content-workbench/research/` 下 5 份文档分别覆盖 5 个项目;同源一份为 `1b-竞品分析-Postiz与PostSider同源双形态.md`,其 §二/§三写明 fork 关系与差异(文件树 329 同路径 / 92 逐字节相同)。
2. **每份含产品定位与功能清单与可借鉴点 —— 过**。依据:5 份文档各自设有「产品定位」「功能清单」「可借鉴点(按可搬性排序)」小节(汇总文档亦含 §五/§六/§九)。
3. **一份跨项目汇总对比文档 —— 过**。依据:本轮新增 `1b-竞品分析-跨项目汇总对比.md`(40,392 B),含七维度横向矩阵、同源单列、冲突复核、选型结论。
4. **每份标注来源链接与取证时间 —— 过**。依据:各文档末尾均列「来源链接 + 取证时间」表;本汇总文档 §十三列出 5 仓库链接与逐棒取证时间段。
5. **产物全部落在本目标目录内 —— 过**。依据:6 份产物与全部取证均在 `执行会话/目标-调研5个开源内容工作台项目并生成分析文档-5199a6/` 内;未写回 `交付物/`、`docs/`、工作区根。
## 七、下一棒该做什么(**收口 → 仅剩非必须补强项,⛔ 本轮不顺手做**)
> 目标 5 条判据已全部满足,**主线收口**。以下均为**可选补强**(部分属扩大取证面,须先问用户):
1. **Postiz ↔ PostSider 行级 diff**(clone 两侧 + `git diff --stat`):把第 2 棒的文件级量化升级为行级(成本:下载/时耗大)。
2. **OpenCreator 元数据面补齐**:拉 `releases`/`tags`/`contributors`/`languages` 四个 API(成本低)。
3. **Easel 114 个技能 `layer` 源码级分布**:批拉 114 个 `SKILL.md` frontmatter 统计(第 3 棒遗留项,成本中)。
4. **文到 AI 发布助手插件源码级核对**:下载官方插件包(124,890 B)核对(⚠️ 扩大取证面,须用户点头)。
5. **OpenCreator `docs/plans/` 10 份实施计划的「计划 vs 实现」抽样比对**(成本中高)。
## 八、遗留的取证缺口(⛔ 不许猜,后续棒次或用户决定是否补)
- **Postiz ↔ PostSider 的 fork 点**:GitHub 上 `lumizone/postsider` 未标记为 fork、无 parent 指针 ⇒ 用 API 求不到。
- **Postiz ↔ PostSider 的改动行数**:tree API 只给 blob sha、不给行数 ⇒ 第 2 棒只做到文件级量化;行级 diff 需 clone 两侧(耗时大,建议单列一棒并先问用户)。
- **PostSider「33 个活跃连接器」口径**:仓库 `*.provider.ts` 实数为 34、官网另写 "30+ networks" ⇒ 未逐条核对注册表。
- **PostSider 是否有托管(云)服务**:官网只给试用入口与自托管文档,未见独立托管定价/SLA 页 ⇒ 查不到。
- 各项目的用户量 / 下载量 / 营收:Postiz 自述 7M downloads(无口径),其余查不到;**Easel 亦查不到**(仓库无此口径,其项目主页 `zju-real.github.io/Easel/` 未访问);**OpenCreator 亦查不到**(`open-creator.ai` 主页本棒未访问,未拉 releases/tags)。
- **(第 3 棒新增)Easel 的 4 条待核**:① `CHANGELOG` 称 CI 跑 **38 条技能自带测试**,实测 `skills/**/tests/` 仅 **6 个文件**(均在 `skill-wechat-publisher`)⇒ 38 疑为**用例数**,**未逐条核对**;② 114 个技能的 `layer` **源码级分布未做**(层分布引用的是能力地图文档,而该表创作层 51 与正文实列 52 条不自洽);③ `SKILL-SPEC` 的 `test1.prompt`/`test1.expected` 约定在整树**零文件**(弃用,动机无记载);④ `.env.example` 的 `xhs-maas` / `agnes` 视频 provider **来源与可用性未核实**。
- **(第 3 棒新增)Easel 技能可用率无实测**:只做静态源码级取证,**未运行任何技能**。
- **(第 4 棒新增)OpenCreator 的 8 条待核**:① 商业与规模证据全缺(主页/定价/用户量/营收/发行节奏,未拉 `releases`/`tags`/`contributors`/`languages`);② **技能市场"上架态"口径未核实**(`skillMarketCatalog` 与 `customSkills` 源码里都是空数组,`catalog.ts` 的 `sourceCommit` 外部提交未访问);③ `docs/plans/` 10 份实施计划的**落地率未核**(计划口径 ≠ 已实现);④ 火柴人角色素材与 `contributors/*` 头像、`stickman-remotion/assets` 音频的**再分发许可未核**(仓内只有 Apache-2.0 一份 LICENSE);⑤ **真实运行证据为零**(未安装/未编译/未运行任何命令 ⇒ "十项工具可用""108 模板可跑"无实测支撑);⑥ `runtime/krillinai`(Go 引擎 183 文件)**只做结构与依赖级取证**,未读业务实现;⑦ GitHub `languages` 字节口径未取(本棒"语言构成"是**按文件数**的扩展名口径,⛔ 与官方字节口径不可混用);⑧ `docs/development/` 5 份、`ui-prototype-runtime-review.md`、`visual-component-guidelines.md`、`docs/plans/*` 正文**未逐份读**。