worknex 0.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. worknex-0.0.1/LICENSE +22 -0
  2. worknex-0.0.1/PKG-INFO +383 -0
  3. worknex-0.0.1/README.md +362 -0
  4. worknex-0.0.1/VERSION +1 -0
  5. worknex-0.0.1/pyproject.toml +42 -0
  6. worknex-0.0.1/setup.cfg +4 -0
  7. worknex-0.0.1/src/worknex/__init__.py +21 -0
  8. worknex-0.0.1/src/worknex/__main__.py +4 -0
  9. worknex-0.0.1/src/worknex/cli.py +86 -0
  10. worknex-0.0.1/src/worknex/commands/__init__.py +0 -0
  11. worknex-0.0.1/src/worknex/commands/build_playbook.py +198 -0
  12. worknex-0.0.1/src/worknex/commands/content_eval.py +104 -0
  13. worknex-0.0.1/src/worknex/commands/diagnose.py +399 -0
  14. worknex-0.0.1/src/worknex/commands/extract_exemplar.py +400 -0
  15. worknex-0.0.1/src/worknex/commands/fetch_article.py +381 -0
  16. worknex-0.0.1/src/worknex/commands/fetch_hotspots.py +212 -0
  17. worknex-0.0.1/src/worknex/commands/fetch_stats.py +185 -0
  18. worknex-0.0.1/src/worknex/commands/humanness_score.py +581 -0
  19. worknex-0.0.1/src/worknex/commands/learn_edits.py +528 -0
  20. worknex-0.0.1/src/worknex/commands/learn_theme.py +640 -0
  21. worknex-0.0.1/src/worknex/commands/llm_write.py +128 -0
  22. worknex-0.0.1/src/worknex/commands/run_manager.py +105 -0
  23. worknex-0.0.1/src/worknex/commands/search_articles.py +235 -0
  24. worknex-0.0.1/src/worknex/commands/seo_keywords.py +119 -0
  25. worknex-0.0.1/src/worknex/commands/similarity_check.py +66 -0
  26. worknex-0.0.1/src/worknex/commands/source_ledger.py +56 -0
  27. worknex-0.0.1/src/worknex/commands/validate_html.py +130 -0
  28. worknex-0.0.1/src/worknex/data/anti-ai-writing-system.md +6 -0
  29. worknex-0.0.1/src/worknex/history.py +74 -0
  30. worknex-0.0.1/src/worknex/migrate.py +75 -0
  31. worknex-0.0.1/src/worknex/paths.py +71 -0
  32. worknex-0.0.1/src/worknex/runs.py +399 -0
  33. worknex-0.0.1/src/worknex/sources.py +96 -0
  34. worknex-0.0.1/src/worknex/toolkit/__init__.py +0 -0
  35. worknex-0.0.1/src/worknex/toolkit/cli.py +432 -0
  36. worknex-0.0.1/src/worknex/toolkit/config.py +90 -0
  37. worknex-0.0.1/src/worknex/toolkit/converter.py +786 -0
  38. worknex-0.0.1/src/worknex/toolkit/image_gen.py +1025 -0
  39. worknex-0.0.1/src/worknex/toolkit/publisher.py +185 -0
  40. worknex-0.0.1/src/worknex/toolkit/theme.py +208 -0
  41. worknex-0.0.1/src/worknex/toolkit/themes/bauhaus.yaml +207 -0
  42. worknex-0.0.1/src/worknex/toolkit/themes/bold-green.yaml +198 -0
  43. worknex-0.0.1/src/worknex/toolkit/themes/bold-navy.yaml +197 -0
  44. worknex-0.0.1/src/worknex/toolkit/themes/bytedance.yaml +199 -0
  45. worknex-0.0.1/src/worknex/toolkit/themes/elegant-rose.yaml +198 -0
  46. worknex-0.0.1/src/worknex/toolkit/themes/focus-red.yaml +197 -0
  47. worknex-0.0.1/src/worknex/toolkit/themes/github.yaml +198 -0
  48. worknex-0.0.1/src/worknex/toolkit/themes/impeccable.yaml +220 -0
  49. worknex-0.0.1/src/worknex/toolkit/themes/ink.yaml +204 -0
  50. worknex-0.0.1/src/worknex/toolkit/themes/lobster-notes.yaml +216 -0
  51. worknex-0.0.1/src/worknex/toolkit/themes/midnight.yaml +197 -0
  52. worknex-0.0.1/src/worknex/toolkit/themes/minimal-gold.yaml +202 -0
  53. worknex-0.0.1/src/worknex/toolkit/themes/minimal.yaml +195 -0
  54. worknex-0.0.1/src/worknex/toolkit/themes/newspaper.yaml +206 -0
  55. worknex-0.0.1/src/worknex/toolkit/themes/professional-clean.yaml +197 -0
  56. worknex-0.0.1/src/worknex/toolkit/themes/sspai.yaml +198 -0
  57. worknex-0.0.1/src/worknex/toolkit/themes/tech-modern.yaml +205 -0
  58. worknex-0.0.1/src/worknex/toolkit/themes/warm-editorial.yaml +197 -0
  59. worknex-0.0.1/src/worknex/toolkit/wechat_api.py +140 -0
  60. worknex-0.0.1/src/worknex.egg-info/PKG-INFO +383 -0
  61. worknex-0.0.1/src/worknex.egg-info/SOURCES.txt +68 -0
  62. worknex-0.0.1/src/worknex.egg-info/dependency_links.txt +1 -0
  63. worknex-0.0.1/src/worknex.egg-info/entry_points.txt +2 -0
  64. worknex-0.0.1/src/worknex.egg-info/requires.txt +11 -0
  65. worknex-0.0.1/src/worknex.egg-info/top_level.txt +1 -0
  66. worknex-0.0.1/tests/test_context_budget.py +47 -0
  67. worknex-0.0.1/tests/test_converter.py +609 -0
  68. worknex-0.0.1/tests/test_readme_sync.py +88 -0
  69. worknex-0.0.1/tests/test_skill_contracts.py +74 -0
  70. worknex-0.0.1/tests/test_workflow_contracts.py +426 -0
worknex-0.0.1/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 OpenClaw (wewrite)
4
+ Copyright (c) 2026 WorkNex contributors
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
worknex-0.0.1/PKG-INFO ADDED
@@ -0,0 +1,383 @@
1
+ Metadata-Version: 2.4
2
+ Name: worknex
3
+ Version: 0.0.1
4
+ Summary: 微信公众号内容管道的确定性工具层:写作质量评分、排版转换、微信API、生图、混合路由写作
5
+ License-Expression: MIT
6
+ Project-URL: Repository, https://github.com/ailiaobar2025/worknex
7
+ Requires-Python: >=3.11
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENSE
10
+ Requires-Dist: markdown>=3.10
11
+ Requires-Dist: beautifulsoup4>=4.14
12
+ Requires-Dist: cssutils>=2.11
13
+ Requires-Dist: requests>=2.32
14
+ Requires-Dist: pyyaml>=6.0
15
+ Requires-Dist: Pygments>=2.17
16
+ Requires-Dist: Pillow>=10.0
17
+ Provides-Extra: browser
18
+ Requires-Dist: playwright>=1.50; extra == "browser"
19
+ Requires-Dist: camoufox[geoip]>=0.4; extra == "browser"
20
+ Dynamic: license-file
21
+
22
+ <div align="center">
23
+
24
+ # WorkNex · 自媒体全渠道内容 OS(公众号优先)
25
+
26
+ **一句话完成选题、素材、写作和审稿——配图、排版与发布随时按需追加**
27
+
28
+ 选题 · 写作 · 编辑审稿 · 可选 AI 配图 · 18 主题排版 · 草稿箱推送 · 多平台改写 · 越用越像你
29
+
30
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE)
31
+ [![Agents](https://img.shields.io/badge/Claude%20Code%20·%20Codex%20·%20OpenClaw%20·%20WorkBuddy-supported-6366f1)](#-快速开始)
32
+
33
+ </div>
34
+
35
+ ---
36
+
37
+ 一个给 AI Agent(Claude Code / Codex / OpenClaw / WorkBuddy 等)用的自媒体内容生产系统。你说「写一篇公众号文章」,它会抓热点、评选题、搜真实素材、按你的人格风格出稿并完成编辑审稿。正文完成后,你可以直接交付,也可以再单独要求配图、排版预览或推送草稿箱。原始正文始终保留;配图会生成独立图片和带图副本。想改就按自己的意思改,再让它「学习我的修改」,下一篇会更像你。
38
+
39
+ WorkNex 以 [wewrite](https://github.com/imraywang/wewrite)(MIT)为代码基座,融合自有多渠道经验:`channels/` 渠道抽象面向全渠道覆盖(本期实现公众号,小红书 / 朋友圈 / 口播与短视频脚本在路线图中),发布约束与降级路径收敛到渠道定义里。
40
+
41
+ ```
42
+ "写一篇公众号文章"
43
+ → 抓热点 → 选题评分 → 文章任务书 → 主张与来源清单
44
+ → 安全内容增强 → 初稿(真实信息锚定 + 风格注入)
45
+ → 编辑判断 → 必要时改稿并复审 → 交付成稿
46
+
47
+ 完成后按需追加:
48
+ ├─ 配封面 / 完整配图 → 图片 + 带图副本
49
+ ├─ 排版预览 → 微信兼容 HTML
50
+ └─ 推到草稿箱 → 明确授权且条件满足后发布
51
+ ```
52
+
53
+ ## ✨ 核心特性
54
+
55
+ - **一句话完成正文**:选题、素材、写作和审稿连续完成;说「交互模式」可在选题或框架处暂停确认。
56
+ - **后续动作真正独立**:配图、排版、发布都能在文章完成后单独执行;排版和发布不会偷偷触发生图。
57
+ - **模块化,one step at a time**:主入口 + 9 个独立 skill,只要选题说 `/worknex-topic`、只要封面说 `/worknex-visual`,缺前置会自己补齐。
58
+ - **写出能直接用的文章**:先明确读者问题、核心判断与证据边界,再写初稿;审稿不通过就直接改稿并复审,禁止编造作者经历。
59
+ - **7 套写作人格**:像选主题一样选文风,从深夜老友到冷静分析师,一行配置切换。
60
+ - **越用越像你**:编辑飞轮(学习你的修改)+ 范文风格库(SICO 式 few-shot)+ 阅读数据回填反哺选题。
61
+ - **18 主题排版引擎**:样式全内联、微信兼容修复、暗黑模式;`learn-theme` 还能从任意公众号文章学习一套新主题。
62
+ - **一稿多发**:小红书图文 / 抖音口播稿,内容级真改,检查编辑质量和源稿相似度。
63
+ - **渠道抽象**:`channels/<平台>/` 定义内容形态、发布约束与降级路径,全渠道扩展不改 skill prompt。
64
+
65
+ ## ✅ 适合 / ❌ 不适合
66
+
67
+ **✅ 适合**:公众号创作者的日常出稿(热点文/干货文/故事文/测评文)· 只想要某个环节的人(选题灵感、封面配图、质量自检、排版发布)· 想把已有文章一稿多发到小红书/抖音 · 想让 AI 逐渐学会自己文风的长期使用者。
68
+
69
+ **❌ 不适合**:普通网页/落地页排版(用前端 skill)· PPT/邮件/blog · 非公众号生态的 SEO · 追求组件级设计定制的纯排版需求(可以只用 `worknex-publish`,但更推荐专门的排版 skill)。
70
+
71
+ ## 🚀 快速开始
72
+
73
+ ```bash
74
+ git clone <本仓库地址> ~/worknex_cli
75
+ cd ~/worknex_cli && bash install.sh
76
+ ```
77
+
78
+ `install.sh` 做三件事:装 `worknex` CLI(uv/pipx,无则回退 venv)、把 10 个 skill 链接到 `~/.claude/skills/` 与 `~/.agents/skills/`(检测到 OpenClaw / Codex 时一并链接其 skills 目录)、创建 `~/.worknex/` 状态目录。
79
+
80
+ 也可以让 AI 自己装。对任意 Agent 说一句:
81
+
82
+ > 请帮我安装 ~/worknex_cli 这个 skill(跑仓库里的 install.sh)
83
+
84
+ 装好后直接开聊:
85
+
86
+ ```
87
+ 你:写一篇公众号文章 → 审过的本地成稿(默认不生图、不发布)
88
+ 你:完整制作一篇公众号文章 → 成稿 + 配图 + 本地预览
89
+ 你:推到公众号草稿箱 → 明确授权后才发布
90
+ 你:今天写什么 → 只要选题
91
+ 你:检查一下 → 生成档案 + 质量自检
92
+ 你:改写成小红书 → 多平台改写
93
+ 你:学习我的修改 → 编辑飞轮
94
+ 你:看看有什么主题 / 换成 sspai 主题 → 主题画廊 / 重排版
95
+ 你:做一个小绿书 → 图片帖(横滑轮播)
96
+ 你:更新 → 升级到最新版
97
+ ```
98
+
99
+ <details>
100
+ <summary><b>OpenClaw / Codex / WorkBuddy</b>(支持 folder-per-skill,无需构建转换)</summary>
101
+
102
+ **OpenClaw / Codex**:`install.sh` 检测到 `~/.openclaw` / `~/.codex` 时已自动链接。手动装:
103
+
104
+ ```bash
105
+ for s in ~/worknex_cli/skills/worknex*; do ln -sfn "$s" ~/.openclaw/skills/$(basename "$s"); done
106
+ # Codex 同理,目标换成 ~/.codex/skills/
107
+ ```
108
+
109
+ 各家均需 CLI 在 PATH:`cd ~/worknex_cli && uv tool install .`(或 `pipx install .`)。
110
+
111
+ </details>
112
+
113
+ ### 配置(可选)
114
+
115
+ ```bash
116
+ cp config.example.yaml ~/.worknex/config.yaml
117
+ ```
118
+
119
+ 填入微信公众号 `appid`/`secret`(推送需要)和图片 API key(生图需要)。**写作不需要这些配置**;排版可以直接生成本地 HTML,请求配图但没有图片服务时会输出图片提示词。配了 `WORKNEX_WRITER_API_KEY` 则正文可交给独立写作模型;实际费用以你使用的服务为准。
120
+
121
+ > ⚠️ 自动推草稿箱需要**已认证公众号**(2025-07 起个人主体/未认证账号无草稿 API 权限)+ 公网 IP 白名单。无权限时一切降级为「本地 HTML 预览 + 人工粘贴」,功能不缺失。
122
+
123
+ ## 🧩 模块速查
124
+
125
+ 管道的每一段都是独立 skill。每篇文章保存在 `~/.worknex/runs/<任务编号>/`,进度可恢复,
126
+ 多篇同时进行也不会互相覆盖。上午选完题,下午说“继续上次”就能接上。
127
+
128
+ | 你说 | 激活 | 产出 |
129
+ |------|------|------|
130
+ | 今天写什么 / 找几个选题 | `worknex-topic` | 10 个评分排序的选题 |
131
+ | 就这个选题写一篇 | `worknex-write` | 文章任务书 + 主张与来源清单 + 初稿 |
132
+ | 检查一下 / 这篇怎么样 | `worknex-review` | 事实核对 + 必要改稿 + 通过后生成成稿与编辑报告 |
133
+ | 给这篇配个封面 | `worknex-visual` | 一张封面图;不改原始正文 |
134
+ | 给这篇完整配图 | `worknex-visual` | 封面 + 必要内文图 + 带图副本 |
135
+ | 推到草稿箱 / 换个主题 | `worknex-publish` | 条件满足时生成微信草稿,否则保留本地 HTML |
136
+ | 改写成小红书 / 抖音版 | `worknex-rewrite` | 内容级真改的平台版本 |
137
+ | 学习我的修改 / 导入范文 | `worknex-learn` | playbook 规则 / 风格库 |
138
+ | 看看文章数据 | `worknex-stats` | 阅读数据回填 + 选题建议 |
139
+ | 重新设置风格 | `worknex-style` | style.yaml |
140
+
141
+ ## 🏗 架构:三层解耦
142
+
143
+ 设计原则一句话:**prompt 负责判断,Python 负责确定性**。
144
+
145
+ | 层 | 位置 | 内容 |
146
+ |----|------|------|
147
+ | Prompt | `skills/`(10 个自包含 skill) | 选题、事实、观点、实用性和表达判断,每个 skill 自带 references/ |
148
+ | Runtime | `worknex` CLI(pip 包) | 打分、转 HTML、调微信 API、生图、成本路由——确定性操作 |
149
+ | State | `~/.worknex/`(`WORKNEX_HOME` 可覆盖) | 凭证、风格、历史、学习产物、输出文件——全部在仓库外 |
150
+
151
+ skill 目录复制到哪都能用;CLI 与 skill 独立安装升级;换机器只需带走 `~/.worknex/`。
152
+
153
+ ## 🔩 核心能力
154
+
155
+ | 能力 | 说明 | 所在 |
156
+ |------|------|------|
157
+ | 热点抓取 | 微博 + 头条 + 百度实时热搜 | `worknex hotspots` |
158
+ | 高频需求 | 搜狗微信搜索垂类近期文章,用同题密度观察内容需求,不虚构阅读量 | `worknex search-articles` |
159
+ | SEO 评分 | 百度 + 360 搜索量化评分 | `worknex seo` |
160
+ | 选题生成 | 10 选题 × 3 维度评分 + 历史去重 | worknex-topic |
161
+ | 素材采集 | WebSearch 核对数据/引述/案例,并为每篇文章保存来源账本 | worknex-write / `worknex sources` |
162
+ | 框架生成 | 7 套写作骨架(痛点/故事/清单/对比/热点解读/纯观点/复盘) | worknex-write |
163
+ | 文章任务书 | 写前明确目标读者、问题、交付、核心判断、反方和边界 | worknex-write |
164
+ | 主张与证据 | 区分事实、推断、意见与用户经历,逐项关联来源 | worknex-write / `worknex sources` |
165
+ | 内容增强 | 按框架补足可支持的新角度、行动条件、真实细节或决策标准 | worknex-write |
166
+ | 编辑成稿 | 准确、观点、有用、合声、好读五项判断;不通过就直接改稿并复审 | worknex-review / `worknex content-eval` |
167
+ | 风险提示 | 11 项机械检查,定位套话、碎句、重复节奏等;不判断作者身份 | `worknex score` |
168
+ | SEO 优化 | 标题策略 / 摘要 / 关键词 / 标签 | worknex-review |
169
+ | 视觉 AI | 按任务设置生成封面/必要配图,生成前检查数量和预估费用 | `worknex image-gen` |
170
+ | 排版发布 | 18+ 主题 + 微信兼容修复 + 暗黑模式 | `worknex preview/publish` |
171
+ | 多平台改写 | 一稿 → 小红书/抖音,内容级真改 + 原创度门 | worknex-rewrite |
172
+ | 效果复盘 | 微信数据分析 API 回填阅读数据,反哺选题 | `worknex stats` |
173
+ | 范文风格库 | 从文章提取结构与节奏;第三方内容不提供观点和个人经历 | `worknex exemplar` |
174
+ | 风格飞轮 | 单次修改只参考,重复出现或明确确认后才成为同范围稳定规则 | `worknex learn-edits` |
175
+ | 排版学习 | 从任意公众号文章 URL 提取排版主题 | `worknex learn-theme` |
176
+ | 文章采集 | 从公众号 URL 提取正文为 Markdown,可导入范文库 | `worknex fetch-article` |
177
+
178
+ ## ✍️ 写作人格
179
+
180
+ 像选排版主题一样选写作风格。在 `~/.worknex/style.yaml` 里一行配置:
181
+
182
+ ```yaml
183
+ writing_persona: "midnight-friend"
184
+ ```
185
+
186
+ | 人格 | 适合 | 风格特点 |
187
+ |------|------|---------|
188
+ | `midnight-friend` | 个人号/自媒体 | 口语化、保留自我质疑;无个人材料时不用虚构故事开场 |
189
+ | `warm-editor` | 生活/文化/情感 | 温暖叙事、故事嵌套数据、柔和情绪弧 |
190
+ | `industry-observer` | 行业媒体/分析 | 中性分析、数据先行、稳中带刺 |
191
+ | `sharp-journalist` | 新闻/评论 | 犀利简洁、数据驱动、强观点 |
192
+ | `cold-analyst` | 财经/投研 | 冷静克制、逻辑链条、风险意识强 |
193
+ | `humor-storyteller` | 泛科技娱乐/热点辣评 | 包袱密集、荒诞解构、笑完有余味 |
194
+ | `tech-coder` | 技术教程/开发者社区 | 代码先行、注释式行文、版本敏感 |
195
+
196
+ 每个人格定义语气、数据呈现和节奏偏好,但不能覆盖事实和个人材料边界。只有用户在当前任务
197
+ 明确提供的经历才能写成作者亲历。详见 `skills/worknex-write/personas/`;自定义人格放
198
+ `~/.worknex/personas/`。
199
+
200
+ ## 📝 内容质量
201
+
202
+ WorkNex 的目标是**写出准确、有观点、对读者有用的文章**。核心机制:
203
+
204
+ 1. **先定义再写**:任务书明确目标读者、真正问题、核心判断、新增价值、反方和适用边界
205
+ 2. **主张对证据**:事实、推断、意见和用户经历分别记录;无法支持的具体主张不进入初稿
206
+ 3. **安全增强**:热点文找有证据的新角度,干货文补行动条件,故事文只用真实材料,对比文给决策条件
207
+ 4. **编辑门槛**:按准确、观点、有用、合声、好读判断;未通过就直接修改并复审,只有通过才生成成稿
208
+ 5. **谨慎学习**:范文只校准结构与节奏;单次人工修改不自动升级为所有文章的硬规则
209
+
210
+ 每篇任务保留 `brief.yaml`、`claims.yaml`、`draft.md`、`article.md` 和
211
+ `review-report.json`,方便追溯“为什么这样写”和初稿到成稿改了多少。完整标准见
212
+ [`docs/content-quality-rubric.md`](./docs/content-quality-rubric.md)。
213
+
214
+ ## 🎨 排版引擎
215
+
216
+ ```bash
217
+ worknex gallery # 浏览器内预览所有主题(并排对比 + 一键复制)
218
+ worknex themes # 列出主题名称
219
+ ```
220
+
221
+ | 类别 | 主题 |
222
+ |------|------|
223
+ | 通用 | `professional-clean`(默认)、`minimal`、`newspaper` |
224
+ | 科技 | `tech-modern`、`bytedance`、`github` |
225
+ | 文艺 | `warm-editorial`、`sspai`、`ink`、`elegant-rose` |
226
+ | 商务 | `bold-navy`、`minimal-gold`、`bold-green` |
227
+ | 风格 | `bauhaus`、`focus-red`、`midnight` |
228
+ | 专属 | `impeccable`、`lobster-notes` |
229
+
230
+ 所有主题均支持微信暗黑模式。全部 18 个主题:装好后 `worknex gallery` 在浏览器里并排对比 + 一键复制。`worknex learn-theme <url>` 学到的新主题存在 `~/.worknex/themes/`,加载时优先于内置主题。
231
+
232
+ 另有四个排版细节自动处理:**产物合规校验**(`worknex validate`,preview/publish 自动跑,拦截会被微信过滤的写法)、**粘贴加固**(preview 产物自动做 `<span leaf>` 包裹,复制进编辑器不掉样式;API 发布路径无需)、**GIF 角标**(动图自动加右上角标签)、**H2 章节编号**(主题 YAML 设 `section_numbering: true` 启用)。
233
+
234
+ <details>
235
+ <summary><b>微信兼容性自动修复</b>(converter 内置兜底)</summary>
236
+
237
+ | 问题 | 自动修复 |
238
+ |------|------|
239
+ | 外链被屏蔽 | 转为上标编号脚注 + 文末参考链接 |
240
+ | 中英混排无间距 | CJK-Latin 自动加空格 |
241
+ | 加粗标点渲染异常 | 标点移到 `</strong>` 外 |
242
+ | 原生列表不稳定 | `<ul>/<ol>` 转样式化 `<section>` |
243
+ | 暗黑模式颜色反转 | 注入 `data-darkmode-*` 属性 |
244
+ | `<style>` 被剥离 | 所有 CSS 内联注入 |
245
+
246
+ </details>
247
+
248
+ <details>
249
+ <summary><b>容器语法</b>(Markdown 里直接写的富组件)</summary>
250
+
251
+ ````markdown
252
+ :::dialogue
253
+ 你好,请问这个功能怎么用?
254
+ > 很简单,直接在 Markdown 里写就行。
255
+ :::
256
+
257
+ :::timeline
258
+ **2024 Q1** 立项启动
259
+ **2024 Q3** MVP 上线
260
+ :::
261
+
262
+ :::callout tip
263
+ 提示框,支持 tip / warning / info / danger。
264
+ :::
265
+
266
+ :::quote
267
+ 好的排版不是让读者注意到设计,而是让读者忘记设计。
268
+ :::
269
+ ````
270
+
271
+ 另有 `:::pullquote`(金句居中)、`:::label` / `:::label pill`(小标签标题:竖条/药丸)、`:::steps`(编号步骤卡)、`:::highlight`(琥珀高亮框)、`:::summary`(青色总结框)。
272
+
273
+ </details>
274
+
275
+ ## 🔧 CLI 独立使用
276
+
277
+ `worknex` CLI 不依赖任何 Agent,可以单独当排版/发布/评分工具用:
278
+
279
+ ```bash
280
+ worknex preview article.md --theme sspai # Markdown → 微信 HTML 预览
281
+ worknex publish article.md --cover cover.png --title "标题" # 推送草稿箱
282
+ worknex image-post p1.jpg p2.jpg -t "周末探店" # 小绿书/图片帖(横滑轮播)
283
+ worknex score article.md --verbose # 写作质量评分(11 项检测)
284
+ worknex content-eval --draft draft.md --final article.md --assessment assessment.yaml --json # 编辑结果
285
+ worknex hotspots --limit 20 # 抓热点
286
+ worknex search-articles "AI编程" -n 15 -t 2 # 搜公众号文章(-t 时间过滤,-r 解析直链)
287
+ worknex seo --json "AI大模型" "科技股" # SEO 分析
288
+ worknex exemplar article.md / --list # 范文风格库
289
+ worknex fetch-article <url> -o out.md # 公众号文章 → Markdown
290
+ worknex learn-theme <url> --name my-style # 学排版主题
291
+ worknex validate article.html # 微信兼容性校验
292
+ worknex diagnose # 环境 + 配置自检
293
+ worknex run start/list/resume/show/finish/permission # 独立文章任务、恢复与发布授权
294
+ worknex sources add/list # 保存和查看事实来源
295
+ worknex home # 查看状态目录
296
+ ```
297
+
298
+ ## 🔄 工作流程
299
+
300
+ ```
301
+ Step 1 环境检查 + 加载风格(不存在则 Onboard) ← 主入口 worknex
302
+
303
+ Step 2 热点 + 高频需求 → 历史去重 + 搜索需求 → 选题 ← worknex-topic
304
+
305
+ Step 3 文章任务书 → 主张与来源 → 安全内容增强 ┐
306
+ ↓ ├ worknex-write
307
+ Step 4 用户风格与有效学习规则 → 初稿 ┘
308
+
309
+ Step 5 编辑判断 → 必要时改稿并复审 → 成稿与编辑报告 ← worknex-review
310
+
311
+ Step 6 封存原始正文 → 写入历史 ← 主入口 worknex
312
+
313
+ 正文完成后,可独立执行:
314
+ ├─ 配封面 / 完整配图 ← worknex-visual
315
+ ├─ 微信排版与本地预览 ← worknex-publish
316
+ └─ 明确授权后推送草稿箱 ← worknex-publish
317
+ ```
318
+
319
+ 默认连续完成正文,但“写一篇”只交付本地成稿。“完整制作”是正文、配图和本地预览三个独立
320
+ 动作的组合快捷方式;“推到草稿箱”才授予发布权限,而且不会自动生图。已完成文章可以继续
321
+ 配图、排版或发布,原始正文不被覆盖。每篇文章使用独立任务目录并可恢复(契约见
322
+ [`skills/worknex/references/pipeline-state.md`](./skills/worknex/references/pipeline-state.md))。
323
+
324
+ <details>
325
+ <summary><b>📁 目录结构</b></summary>
326
+
327
+ ```
328
+ worknex_cli/
329
+ ├── skills/ # Prompt 层:10 个自包含 skill(复制即用)
330
+ │ ├── worknex/ # 主入口:内容流程编排 + 配图/排版/发布可选路由
331
+ │ ├── worknex-style/ # 风格设置 / Onboard(onboard.md、style-template.md、style.example.yaml)
332
+ │ ├── worknex-topic/ # 选题(topic-selection.md)
333
+ │ ├── worknex-write/ # 任务书 + 主张证据 + 安全增强 + 初稿(personas/ 7 人格…)
334
+ │ ├── worknex-review/ # 事实核对 + 改稿复审 + 标题摘要 + 编辑报告
335
+ │ ├── worknex-visual/ # 封面 + 必要配图(数量与费用上限)
336
+ │ ├── worknex-publish/ # 排版 + 发布 + 主题画廊 + 小绿书(wechat-constraints.md)
337
+ │ ├── worknex-learn/ # 学习修改 / 导入范文 / 学排版(learn-edits.md)
338
+ │ ├── worknex-stats/ # 文章数据复盘(effect-review.md)
339
+ │ └── worknex-rewrite/ # 一源多平台改写(multiplatform-rewrite.md + platforms/ 平台定义)
340
+
341
+ ├── channels/ # 渠道抽象:每平台一个目录(channel.yaml + constraints.md)
342
+ │ └── wechat/ # 本期实现:公众号的内容形态、发布约束与降级路径
343
+
344
+ ├── src/worknex/ # Runtime 层:`worknex` CLI(pip 包)
345
+ │ ├── cli.py # 子命令调度器
346
+ │ ├── paths.py # 状态目录解析($WORKNEX_HOME → ~/.worknex)
347
+ │ ├── commands/ # run / sources / diagnose / score / content-eval / hotspots / search-articles / seo / stats / learn-* / exemplar / fetch-article / llm-write / similarity / build-playbook
348
+ │ └── toolkit/ # converter / theme / publisher / wechat_api / image_gen + 18 个内置主题
349
+
350
+ ├── pyproject.toml # CLI 打包定义
351
+ ├── config.example.yaml # API 配置模板
352
+ ├── scripts/ # 仅开发工具(context_budget 预算门 / gen_star_history 图表)
353
+ └── tests/ # 排版、任务流程、skill/README 契约与上下文预算测试
354
+ ```
355
+
356
+ State 层(全部在 `~/.worknex/`,不在仓库):`config.yaml`、`style.yaml`、`history.yaml`、`playbook.md`、`current_run`、`runs/`、`exemplars/`、`corpus/`、`lessons/`、`output/`、`themes/`、`personas/`。
357
+
358
+ </details>
359
+
360
+ ## 🗺 渠道路线图
361
+
362
+ | 阶段 | 渠道 | 说明 |
363
+ |------|------|------|
364
+ | P0(当前) | 公众号 | 全流程闭环:选题→写作→审稿→配图→排版→草稿箱 |
365
+ | P1 | 小红书、朋友圈 | 一稿多发(内容级真改 + 原创度门);朋友圈无官方 API,只做文案终稿 |
366
+ | P2 | 口播文案、短视频脚本 | 场景库(口播稿/带货脚本/影视解说等)+ 脚本与分镜模板 |
367
+ | 待定 | 百家号、头条、微博 | 按 `channels/` 抽象按需扩展 |
368
+
369
+ ## ⬆️ 升级
370
+
371
+ 对 Agent 说「更新」,或手动:
372
+
373
+ ```bash
374
+ cd ~/worknex_cli && git pull && bash install.sh
375
+ ```
376
+
377
+ ## 🤝 致谢与贡献
378
+
379
+ 本项目基于 [imraywang/wewrite](https://github.com/imraywang/wewrite)(MIT)改造扩展,感谢原项目的优秀设计。Issue / PR 欢迎。跑 `python3 -m pytest tests/ -q` 与 `python3 scripts/context_budget.py --budget-tokens 15500` 保持绿灯(CI 同款检查)。
380
+
381
+ ## 📄 License
382
+
383
+ MIT(继承自 wewrite,见 [LICENSE](./LICENSE))