Metadata-Version: 2.4
Name: worknex
Version: 0.0.5
Summary: 微信公众号内容管道的确定性工具层：写作质量评分、排版转换、微信API、生图、混合路由写作
License-Expression: MIT
Project-URL: Repository, https://github.com/ailiaobar2025/worknex
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: markdown>=3.10
Requires-Dist: beautifulsoup4>=4.14
Requires-Dist: cssutils>=2.11
Requires-Dist: requests>=2.32
Requires-Dist: pyyaml>=6.0
Requires-Dist: Pygments>=2.17
Requires-Dist: Pillow>=10.0
Provides-Extra: browser
Requires-Dist: playwright>=1.50; extra == "browser"
Requires-Dist: camoufox[geoip]>=0.4; extra == "browser"
Dynamic: license-file

<div align="center">

# WorkNex · 自媒体全渠道内容 OS（公众号优先）

**一句话完成选题、素材、写作和审稿——配图、排版与发布随时按需追加**

选题 · 写作 · 编辑审稿 · 可选 AI 配图 · 18 主题排版 · 草稿箱推送 · 多平台改写 · 越用越像你

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE)
[![Agents](https://img.shields.io/badge/Claude%20Code%20·%20Codex%20·%20OpenClaw%20·%20WorkBuddy-supported-6366f1)](#-快速开始)

</div>

---

一个给 AI Agent（Claude Code / Codex / OpenClaw / WorkBuddy 等）用的自媒体内容生产系统。你说「写一篇公众号文章」，它会抓热点、评选题、搜真实素材、按你的人格风格出稿并完成编辑审稿。正文完成后，你可以直接交付，也可以再单独要求配图、排版预览或推送草稿箱。原始正文始终保留；配图会生成独立图片和带图副本。想改就按自己的意思改，再让它「学习我的修改」，下一篇会更像你。

WorkNex 以 [wewrite](https://github.com/imraywang/wewrite)（MIT）为代码基座，融合自有多渠道经验：`channels/` 渠道抽象面向全渠道覆盖（本期实现公众号，小红书 / 朋友圈 / 口播与短视频脚本在路线图中），发布约束与降级路径收敛到渠道定义里。

```
"写一篇公众号文章"
  → 抓热点 → 选题评分 → 文章任务书 → 主张与来源清单
  → 安全内容增强 → 初稿（真实信息锚定 + 风格注入）
  → 编辑判断 → 必要时改稿并复审 → 交付成稿

完成后按需追加：
  ├─ 配封面 / 完整配图 → 图片 + 带图副本
  ├─ 排版预览           → 微信兼容 HTML
  └─ 推到草稿箱         → 明确授权且条件满足后发布
```

## ✨ 核心特性

- **一句话完成正文**：选题、素材、写作和审稿连续完成；说「交互模式」可在选题或框架处暂停确认。
- **后续动作真正独立**：配图、排版、发布都能在文章完成后单独执行；排版和发布不会偷偷触发生图。
- **模块化，one step at a time**：主入口 + 9 个独立 skill，只要选题说 `/worknex-topic`、只要封面说 `/worknex-visual`，缺前置会自己补齐。
- **写出能直接用的文章**：先明确读者问题、核心判断与证据边界，再写初稿；审稿不通过就直接改稿并复审，禁止编造作者经历。
- **7 套写作人格**：像选主题一样选文风，从深夜老友到冷静分析师，一行配置切换。
- **越用越像你**：编辑飞轮（学习你的修改）+ 范文风格库（SICO 式 few-shot）+ 阅读数据回填反哺选题。
- **18 主题排版引擎**：样式全内联、微信兼容修复、暗黑模式；`learn-theme` 还能从任意公众号文章学习一套新主题。
- **一稿多发**：小红书图文 / 抖音口播 / 朋友圈短帖 / 口播稿 / 短视频分镜脚本，内容级真改，检查编辑质量和源稿相似度，支持五旋钮（钩子/情绪/节奏/收尾/口语化）一篇一调。
- **渠道抽象**：`channels/<平台>/` 定义内容形态、发布约束与降级路径，全渠道扩展不改 skill prompt。

## ✅ 适合 / ❌ 不适合

**✅ 适合**：公众号创作者的日常出稿（热点文/干货文/故事文/测评文）· 只想要某个环节的人（选题灵感、封面配图、质量自检、排版发布）· 想把已有文章一稿多发到小红书/抖音 · 想让 AI 逐渐学会自己文风的长期使用者。

**❌ 不适合**：普通网页/落地页排版（用前端 skill）· PPT/邮件/blog · 非公众号生态的 SEO · 追求组件级设计定制的纯排版需求（可以只用 `worknex-publish`，但更推荐专门的排版 skill）。

## 🚀 快速开始

```bash
git clone <本仓库地址> ~/worknex_cli
cd ~/worknex_cli && bash install.sh
```

`install.sh` 做三件事：装 `worknex` CLI（uv/pipx，无则回退 venv）、把 10 个 skill 链接到 `~/.claude/skills/` 与 `~/.agents/skills/`（检测到 OpenClaw / Codex 时一并链接其 skills 目录）、创建 `~/.worknex/` 状态目录。

也可以让 AI 自己装。对任意 Agent 说一句：

> 请帮我安装 ~/worknex_cli 这个 skill（跑仓库里的 install.sh）

装好后直接开聊：

```
你：写一篇公众号文章                → 审过的本地成稿（默认不生图、不发布）
你：完整制作一篇公众号文章          → 成稿 + 配图 + 本地预览
你：推到公众号草稿箱                → 明确授权后才发布
你：今天写什么                      → 只要选题
你：检查一下                        → 生成档案 + 质量自检
你：改写成小红书                    → 多平台改写
你：学习我的修改                    → 编辑飞轮
你：看看有什么主题 / 换成 sspai 主题 → 主题画廊 / 重排版
你：做一个小绿书                    → 图片帖（横滑轮播）
你：更新                            → 升级到最新版
```

<details>
<summary><b>OpenClaw / Codex / WorkBuddy</b>（支持 folder-per-skill，无需构建转换）</summary>

**OpenClaw / Codex**：`install.sh` 检测到 `~/.openclaw` / `~/.codex` 时已自动链接。手动装：

```bash
for s in ~/worknex_cli/skills/worknex*; do ln -sfn "$s" ~/.openclaw/skills/$(basename "$s"); done
# Codex 同理，目标换成 ~/.codex/skills/
```

各家均需 CLI 在 PATH：`cd ~/worknex_cli && uv tool install .`（或 `pipx install .`）。

</details>

### 配置（可选）

```bash
cp config.example.yaml ~/.worknex/config.yaml
```

填入微信公众号 `appid`/`secret`（推送需要）和图片 API key（生图需要）。**写作不需要这些配置**；排版可以直接生成本地 HTML，请求配图但没有图片服务时会输出图片提示词。配了 `WORKNEX_WRITER_API_KEY` 则正文可交给独立写作模型；实际费用以你使用的服务为准。

<details>
<summary><b>多公众号矩阵（可选）</b></summary>

两个及以上公众号时，在 `~/.worknex/config.yaml` 启用 `wechat.accounts`（见 config.example.yaml 末尾示例），
`worknex publish / calendar / comments / stats` 全部支持 `--account <键>` 路由，
`default_account` 指定默认号。单号使用完全不受影响。

</details>

> ⚠️ 自动推草稿箱需要**已认证公众号**（2025-07 起个人主体/未认证账号无草稿 API 权限）+ 公网 IP 白名单。无权限时一切降级为「本地 HTML 预览 + 人工粘贴」，功能不缺失。

## 🧩 模块速查

管道的每一段都是独立 skill。每篇文章保存在 `~/.worknex/runs/<任务编号>/`，进度可恢复，
多篇同时进行也不会互相覆盖。上午选完题，下午说“继续上次”就能接上。

| 你说 | 激活 | 产出 |
|------|------|------|
| 今天写什么 / 找几个选题 | `worknex-topic` | 10 个评分排序的选题 |
| 就这个选题写一篇 | `worknex-write` | 文章任务书 + 主张与来源清单 + 初稿 |
| 检查一下 / 这篇怎么样 | `worknex-review` | 事实核对 + 必要改稿 + 通过后生成成稿与编辑报告 |
| 给这篇配个封面 | `worknex-visual` | 一张封面图；不改原始正文 |
| 给这篇完整配图 | `worknex-visual` | 封面 + 必要内文图 + 带图副本 |
| 推到草稿箱 / 换个主题 | `worknex-publish` | 条件满足时生成微信草稿，否则保留本地 HTML |
| 改写成小红书 / 抖音版 | `worknex-rewrite` | 内容级真改的平台版本 |
| 学习我的修改 / 导入范文 | `worknex-learn` | playbook 规则 / 风格库 |
| 看看文章数据 | `worknex-stats` | 阅读数据回填 + 选题建议 |
| 重新设置风格 | `worknex-style` | style.yaml |

## 🏗 架构：三层解耦

设计原则一句话：**prompt 负责判断，Python 负责确定性**。

| 层 | 位置 | 内容 |
|----|------|------|
| Prompt | `skills/`（10 个自包含 skill） | 选题、事实、观点、实用性和表达判断，每个 skill 自带 references/ |
| Runtime | `worknex` CLI（pip 包） | 打分、转 HTML、调微信 API、生图、成本路由——确定性操作 |
| State | `~/.worknex/`（`WORKNEX_HOME` 可覆盖） | 凭证、风格、历史、学习产物、输出文件——全部在仓库外 |

skill 目录复制到哪都能用；CLI 与 skill 独立安装升级；换机器只需带走 `~/.worknex/`。

## 🔩 核心能力

| 能力 | 说明 | 所在 |
|------|------|------|
| 热点抓取 | 微博 + 头条 + 百度实时热搜 | `worknex hotspots` |
| 高频需求 | 搜狗微信搜索垂类近期文章，用同题密度观察内容需求，不虚构阅读量 | `worknex search-articles` |
| SEO 评分 | 百度 + 360 搜索量化评分 | `worknex seo` |
| 选题生成 | 10 选题 × 3 维度评分 + 历史去重 | worknex-topic |
| 素材采集 | WebSearch 核对数据/引述/案例，并为每篇文章保存来源账本 | worknex-write / `worknex sources` |
| 框架生成 | 7 套写作骨架（痛点/故事/清单/对比/热点解读/纯观点/复盘） | worknex-write |
| 文章任务书 | 写前明确目标读者、问题、交付、核心判断、反方和边界 | worknex-write |
| 主张与证据 | 区分事实、推断、意见与用户经历，逐项关联来源 | worknex-write / `worknex sources` |
| 内容增强 | 按框架补足可支持的新角度、行动条件、真实细节或决策标准 | worknex-write |
| 编辑成稿 | 准确、观点、有用、合声、好读五项判断；不通过就直接改稿并复审 | worknex-review / `worknex content-eval` |
| 风险提示 | 11 项机械检查，定位套话、碎句、重复节奏等；不判断作者身份 | `worknex score` |
| SEO 优化 | 标题策略 / 摘要 / 关键词 / 标签 | worknex-review |
| 视觉 AI | 按任务设置生成封面/必要配图，生成前检查数量和预估费用 | `worknex image-gen` |
| 排版发布 | 18+ 主题 + 微信兼容修复 + 暗黑模式 | `worknex preview/publish` |
| 多平台改写 | 一稿 → 小红书/抖音，内容级真改 + 原创度门 | worknex-rewrite |
| 效果复盘 | 微信数据分析 API 回填阅读数据，反哺选题 | `worknex stats` |
| 内容日历 | 本地发布计划 + 草稿箱 + 已发布聚合视图 | `worknex calendar` |
| 留言管理 | 拉评论/精选/官方回复（Agent 起草、你确认） | `worknex comments` |
| 选题池 | 灵感随手入库、评分、发酵跟踪 | `worknex idea` |
| GEO 优化 | 被 AI 搜索引用的检查项（问答式标题/可引用金句） | worknex-review |
| 范文风格库 | 从文章提取结构与节奏；第三方内容不提供观点和个人经历 | `worknex exemplar` |
| 风格飞轮 | 单次修改只参考，重复出现或明确确认后才成为同范围稳定规则 | `worknex learn-edits` |
| 排版学习 | 从任意公众号文章 URL 提取排版主题 | `worknex learn-theme` |
| 文章采集 | 从公众号 URL 提取正文为 Markdown，可导入范文库 | `worknex fetch-article` |

## ✍️ 写作人格

像选排版主题一样选写作风格。在 `~/.worknex/style.yaml` 里一行配置：

```yaml
writing_persona: "midnight-friend"
```

| 人格 | 适合 | 风格特点 |
|------|------|---------|
| `midnight-friend` | 个人号/自媒体 | 口语化、保留自我质疑；无个人材料时不用虚构故事开场 |
| `warm-editor` | 生活/文化/情感 | 温暖叙事、故事嵌套数据、柔和情绪弧 |
| `industry-observer` | 行业媒体/分析 | 中性分析、数据先行、稳中带刺 |
| `sharp-journalist` | 新闻/评论 | 犀利简洁、数据驱动、强观点 |
| `cold-analyst` | 财经/投研 | 冷静克制、逻辑链条、风险意识强 |
| `humor-storyteller` | 泛科技娱乐/热点辣评 | 包袱密集、荒诞解构、笑完有余味 |
| `tech-coder` | 技术教程/开发者社区 | 代码先行、注释式行文、版本敏感 |

每个人格定义语气、数据呈现和节奏偏好，但不能覆盖事实和个人材料边界。只有用户在当前任务
明确提供的经历才能写成作者亲历。详见 `skills/worknex-write/personas/`；自定义人格放
`~/.worknex/personas/`。

## 📝 内容质量

WorkNex 的目标是**写出准确、有观点、对读者有用的文章**。核心机制：

1. **先定义再写**：任务书明确目标读者、真正问题、核心判断、新增价值、反方和适用边界
2. **主张对证据**：事实、推断、意见和用户经历分别记录；无法支持的具体主张不进入初稿
3. **安全增强**：热点文找有证据的新角度，干货文补行动条件，故事文只用真实材料，对比文给决策条件
4. **编辑门槛**：按准确、观点、有用、合声、好读判断；未通过就直接修改并复审，只有通过才生成成稿
5. **谨慎学习**：范文只校准结构与节奏；单次人工修改不自动升级为所有文章的硬规则
6. **场景库**：热点解读/痛点干货/故事案例/对比测评/复盘经验五个写作场景，各带钩子路线与语气规范
7. **去 AI 味**：score 检测项对应定点改写手法（句长交错/段落粉碎/情感微扰），只动表达不动事实

每篇任务保留 `brief.yaml`、`claims.yaml`、`draft.md`、`article.md` 和
`review-report.json`，方便追溯“为什么这样写”和初稿到成稿改了多少。完整标准见
[`docs/content-quality-rubric.md`](./docs/content-quality-rubric.md)。

## 🎨 排版引擎

```bash
worknex gallery    # 浏览器内预览所有主题（并排对比 + 一键复制）
worknex themes     # 列出主题名称
```

| 类别 | 主题 |
|------|------|
| 通用 | `professional-clean`（默认）、`minimal`、`newspaper` |
| 科技 | `tech-modern`、`bytedance`、`github` |
| 文艺 | `warm-editorial`、`sspai`、`ink`、`elegant-rose` |
| 商务 | `bold-navy`、`minimal-gold`、`bold-green` |
| 风格 | `bauhaus`、`focus-red`、`midnight` |
| 专属 | `impeccable`、`lobster-notes` |

所有主题均支持微信暗黑模式。全部 18 个主题：装好后 `worknex gallery` 在浏览器里并排对比 + 一键复制。`worknex learn-theme <url>` 学到的新主题存在 `~/.worknex/themes/`，加载时优先于内置主题。

另有四个排版细节自动处理：**产物合规校验**（`worknex validate`，preview/publish 自动跑，拦截会被微信过滤的写法）、**粘贴加固**（preview 产物自动做 `<span leaf>` 包裹，复制进编辑器不掉样式；API 发布路径无需）、**GIF 角标**（动图自动加右上角标签）、**H2 章节编号**（主题 YAML 设 `section_numbering: true` 启用）。

<details>
<summary><b>微信兼容性自动修复</b>（converter 内置兜底）</summary>

| 问题 | 自动修复 |
|------|------|
| 外链被屏蔽 | 转为上标编号脚注 + 文末参考链接 |
| 中英混排无间距 | CJK-Latin 自动加空格 |
| 加粗标点渲染异常 | 标点移到 `</strong>` 外 |
| 原生列表不稳定 | `<ul>/<ol>` 转样式化 `<section>` |
| 暗黑模式颜色反转 | 注入 `data-darkmode-*` 属性 |
| `<style>` 被剥离 | 所有 CSS 内联注入 |

</details>

<details>
<summary><b>容器语法</b>（Markdown 里直接写的富组件）</summary>

````markdown
:::dialogue
你好，请问这个功能怎么用？
> 很简单，直接在 Markdown 里写就行。
:::

:::timeline
**2024 Q1** 立项启动
**2024 Q3** MVP 上线
:::

:::callout tip
提示框，支持 tip / warning / info / danger。
:::

:::quote
好的排版不是让读者注意到设计，而是让读者忘记设计。
:::
````

另有 `:::pullquote`（金句居中）、`:::label` / `:::label pill`（小标签标题：竖条/药丸）、`:::steps`（编号步骤卡）、`:::highlight`（琥珀高亮框）、`:::summary`（青色总结框）。

</details>

## 🔧 CLI 独立使用

`worknex` CLI 不依赖任何 Agent，可以单独当排版/发布/评分工具用：

```bash
worknex preview article.md --theme sspai            # Markdown → 微信 HTML 预览
worknex publish article.md --cover cover.png --title "标题"   # 推送草稿箱
worknex image-post p1.jpg p2.jpg -t "周末探店"       # 小绿书/图片帖（横滑轮播）
worknex score article.md --verbose                  # 写作质量评分（11 项检测）
worknex content-eval --draft draft.md --final article.md --assessment assessment.yaml --json # 编辑结果
worknex hotspots --limit 20                         # 抓热点
worknex search-articles "AI编程" -n 15 -t 2         # 搜公众号文章（-t 时间过滤，-r 解析直链）
worknex seo --json "AI大模型" "科技股"               # SEO 分析
worknex exemplar article.md / --list                # 范文风格库
worknex fetch-article <url> -o out.md               # 公众号文章 → Markdown
worknex learn-theme <url> --name my-style           # 学排版主题
worknex validate article.html                       # 微信兼容性校验
worknex diagnose                                    # 环境 + 配置自检
worknex run start/list/resume/show/finish/permission # 独立文章任务、恢复与发布授权
worknex sources add/list                            # 保存和查看事实来源
worknex calendar                                    # 内容日历：本地计划+草稿箱+已发布聚合
worknex calendar add --title "选题" --date 2026-09-10  # 添加发布计划
worknex comments <msg_id>                           # 留言管理：拉评论/精选/回复/删除
worknex idea add "灵感" --score 80                  # 选题池：灵感入库/评分/跟踪
worknex home                                        # 查看状态目录
```

## 🔄 工作流程

```
Step 1  环境检查 + 加载风格（不存在则 Onboard）        ← 主入口 worknex
  ↓
Step 2  热点 + 高频需求 → 历史去重 + 搜索需求 → 选题    ← worknex-topic
  ↓
Step 3  文章任务书 → 主张与来源 → 安全内容增强         ┐
  ↓                                                    ├ worknex-write
Step 4  用户风格与有效学习规则 → 初稿                  ┘
  ↓
Step 5  编辑判断 → 必要时改稿并复审 → 成稿与编辑报告    ← worknex-review
  ↓
Step 6  封存原始正文 → 写入历史                         ← 主入口 worknex

正文完成后，可独立执行：
  ├─ 配封面 / 完整配图                                 ← worknex-visual
  ├─ 微信排版与本地预览                                ← worknex-publish
  └─ 明确授权后推送草稿箱                              ← worknex-publish
```

默认连续完成正文，但“写一篇”只交付本地成稿。“完整制作”是正文、配图和本地预览三个独立
动作的组合快捷方式；“推到草稿箱”才授予发布权限，而且不会自动生图。已完成文章可以继续
配图、排版或发布，原始正文不被覆盖。每篇文章使用独立任务目录并可恢复（契约见
[`skills/worknex/references/pipeline-state.md`](./skills/worknex/references/pipeline-state.md)）。

<details>
<summary><b>📁 目录结构</b></summary>

```
worknex_cli/
├── skills/                   # Prompt 层：10 个自包含 skill（复制即用）
│   ├── worknex/                # 主入口：内容流程编排 + 配图/排版/发布可选路由
│   ├── worknex-style/          # 风格设置 / Onboard（onboard.md、style-template.md、style.example.yaml）
│   ├── worknex-topic/          # 选题（topic-selection.md）
│   ├── worknex-write/          # 任务书 + 主张证据 + 安全增强 + 初稿（personas/ 7 人格…）
│   ├── worknex-review/         # 事实核对 + 改稿复审 + 标题摘要 + 编辑报告
│   ├── worknex-visual/         # 封面 + 必要配图（数量与费用上限）
│   ├── worknex-publish/        # 排版 + 发布 + 主题画廊 + 小绿书（wechat-constraints.md）
│   ├── worknex-learn/          # 学习修改 / 导入范文 / 学排版（learn-edits.md）
│   ├── worknex-stats/          # 文章数据复盘（effect-review.md）
│   └── worknex-rewrite/        # 一源多平台改写（multiplatform-rewrite.md + platforms/ 平台定义）
│
├── channels/                 # 渠道抽象：每平台一个目录（channel.yaml + constraints.md）
│   └── wechat/                 # 本期实现：公众号的内容形态、发布约束与降级路径
│
├── src/worknex/              # Runtime 层：`worknex` CLI（pip 包）
│   ├── cli.py                  # 子命令调度器
│   ├── paths.py                # 状态目录解析（$WORKNEX_HOME → ~/.worknex）
│   ├── commands/               # run / sources / diagnose / score / content-eval / hotspots / search-articles / seo / stats / learn-* / exemplar / fetch-article / llm-write / similarity / build-playbook
│   └── toolkit/                # converter / theme / publisher / wechat_api / image_gen + 18 个内置主题
│
├── pyproject.toml            # CLI 打包定义
├── config.example.yaml       # API 配置模板
├── scripts/                  # 仅开发工具（context_budget 预算门 / gen_star_history 图表）
└── tests/                    # 排版、任务流程、skill/README 契约与上下文预算测试
```

State 层（全部在 `~/.worknex/`，不在仓库）：`config.yaml`、`style.yaml`、`history.yaml`、`playbook.md`、`current_run`、`runs/`、`exemplars/`、`corpus/`、`lessons/`、`output/`、`themes/`、`personas/`。

</details>

## 🗺 渠道路线图

| 阶段 | 渠道 | 说明 |
|------|------|------|
| P0（当前） | 公众号 | 全流程闭环：选题→写作→审稿→配图→排版→草稿箱 |
| P1 | 小红书、朋友圈 | 一稿多发（内容级真改 + 原创度门）；朋友圈无官方 API，只做文案终稿 |
| P2 | 口播文案、短视频脚本 | 场景库（口播稿/带货脚本/影视解说等）+ 脚本与分镜模板 |
| 待定 | 百家号、头条、微博 | 按 `channels/` 抽象按需扩展 |

## ⬆️ 升级

对 Agent 说「更新」，或手动：

```bash
cd ~/worknex_cli && git pull && bash install.sh
```

## 🤝 致谢与贡献

本项目基于 [imraywang/wewrite](https://github.com/imraywang/wewrite)（MIT）改造扩展，感谢原项目的优秀设计。Issue / PR 欢迎。跑 `python3 -m pytest tests/ -q` 与 `python3 scripts/context_budget.py --budget-tokens 15500` 保持绿灯（CI 同款检查）。

## 📄 License

MIT（继承自 wewrite，见 [LICENSE](./LICENSE)）
