@topmindspace/topmind-writing-skills 0.8.34 → 0.8.35
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.
- package/CHANGELOG.md +14 -0
- package/README.en.md +11 -11
- package/README.md +11 -11
- package/package.json +1 -1
- package/topmind-briefs/CHANGELOG.md +4 -0
- package/topmind-briefs/README.en.md +1 -1
- package/topmind-briefs/README.md +1 -1
- package/topmind-briefs/SKILL.md +1 -1
- package/topmind-briefs/package.json +1 -1
- package/topmind-briefs/references/emoji-system.md +17 -20
- package/topmind-briefs/references/x-delivery-contract.md +22 -19
- package/topmind-briefs/references/x-layout-patterns.md +3 -2
- package/topmind-briefs/references/x-post-format.md +6 -6
- package/topmind-briefs/scripts/format_text.py +21 -13
- package/topmind-briefs/scripts/lint_x_post.py +12 -3
- package/topmind-cover/README.en.md +1 -1
- package/topmind-cover/README.md +1 -1
- package/topmind-format/README.en.md +4 -4
- package/topmind-format/README.md +5 -5
- package/topmind-format/SKILL.md +16 -15
- package/topmind-format/package.json +1 -1
- package/topmind-format/references/emoji-system.md +17 -20
- package/topmind-format/references/x-delivery-contract.md +22 -19
- package/topmind-format/references/x-layout-patterns.md +3 -2
- package/topmind-format/references/x-post-format.md +6 -6
- package/topmind-format/scripts/format_text.py +21 -13
- package/topmind-format/scripts/lint_x_post.py +12 -3
- package/topmind-format/scripts/negative_tests.py +14 -4
- package/topmind-poster/README.en.md +1 -1
- package/topmind-poster/README.md +1 -1
- package/topmind-viral-posts/README.en.md +3 -3
- package/topmind-viral-posts/README.md +5 -5
- package/topmind-viral-posts/SKILL.md +15 -15
- package/topmind-viral-posts/package.json +1 -1
- package/topmind-viral-posts/references/emoji-system.md +17 -20
- package/topmind-viral-posts/references/patterns.md +40 -39
- package/topmind-viral-posts/references/tags-and-topics.md +1 -1
- package/topmind-viral-posts/references/x-delivery-contract.md +22 -19
- package/topmind-viral-posts/references/x-layout-patterns.md +3 -2
- package/topmind-viral-posts/references/x-post-format.md +6 -6
- package/topmind-viral-posts/scripts/format_text.py +21 -13
- package/topmind-viral-posts/scripts/lint_x_post.py +12 -3
- package/topmind-wechat-post/README.en.md +1 -1
- package/topmind-wechat-post/README.md +1 -1
- package/topmind-wechat-post/SKILL.md +1 -1
- package/topmind-wechat-post/package.json +1 -1
- package/topmind-wechat-post/references/x-delivery-contract.md +22 -19
- package/topmind-wechat-post/references/x-post-format.md +6 -6
- package/topmind-wechat-post/scripts/lint_x_post.py +12 -3
- package/topmind-x-article/README.en.md +1 -1
- package/topmind-x-article/README.md +1 -1
- package/topmind-x-article/SKILL.md +1 -1
- package/topmind-x-article/package.json +1 -1
- package/topmind-x-article/references/x-delivery-contract.md +22 -19
- package/topmind-x-article/references/x-post-format.md +6 -6
- package/topmind-x-article/scripts/lint_x_post.py +12 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [0.8.35] - 2026-10-14
|
|
2
|
+
|
|
3
|
+
> 根包 0.8.34 → **0.8.35**(patch);技能版本:topmind-briefs 0.2.17 → 0.2.18、topmind-format 0.1.2 → 0.1.3、topmind-viral-posts 0.3.9 → 0.3.10、
|
|
4
|
+
> topmind-wechat-post 0.3.9 → 0.3.10、topmind-x-article 0.4.15 → 0.4.16;topmind-cover、topmind-poster 不变。
|
|
5
|
+
|
|
6
|
+
### 变更(更正 0.8.34:短文用 emoji,段子不用)
|
|
7
|
+
|
|
8
|
+
- **段子体完全不用 emoji**:不加人设点缀(🐔 🐱 🌱)、情绪表情和 emoji 列表符号;分点一条一行、靠行间空行区分,不加任何符号。
|
|
9
|
+
- **短文体分点必须用 emoji 列表符号**,按 `emoji-system.md`(该体系只适用于短文体,段子配额全为 0)。
|
|
10
|
+
- **`format_text.py --mode duanzi`**:去掉原文 emoji 与列表符号(Markdown 列表、🔹 等)后输出纯文字条目;不再接受 `--open` / `--close` / `--title-emoji`(报错退出 2)。
|
|
11
|
+
- **`lint_x_post.py --duanzi`**:新增 W13,段子里出现任何 emoji(含点缀和列表符号)时警告。
|
|
12
|
+
- 同步修正:`x-delivery-contract.md`(第一节改为短文 / 段子对照表,正反例更新)、`x-post-format.md`、`x-layout-patterns.md`、viral-posts SKILL / `patterns.md` / `tags-and-topics.md` 示例去 emoji、format SKILL 与示例、各 README。
|
|
13
|
+
- 评测 63 → 66 条(新增段子零 emoji、段子拒绝点缀、短文 emoji 列表);format 负向测试改为验证段子去 emoji、拒绝 `--open`、lint W13。
|
|
14
|
+
|
|
1
15
|
## [0.8.34] - 2026-10-14
|
|
2
16
|
|
|
3
17
|
> 根包 0.8.33 → **0.8.34**(patch);技能版本:topmind-briefs 0.2.16 → 0.2.17、topmind-format 0.1.1 → 0.1.2、topmind-viral-posts 0.3.8 → 0.3.9、
|
package/README.en.md
CHANGED
|
@@ -43,7 +43,7 @@ npx @topmindspace/topmind-writing-skills install topmind-briefs
|
|
|
43
43
|
|
|
44
44
|
### topmind-viral-posts · X viral short posts
|
|
45
45
|
|
|
46
|
-
18 post types plus hook × body × closer combinations, summarised from common high-engagement writing patterns in the Chinese X community (all examples are original): **duanzi layout** (one sentence per line, a blank line between lines), conversational tone, an engagement hook; original images first; asks before generating one via `topmind-cover`. Hashtags (1–3) are part of the post body; classification tags (type / purpose / platform / tone) are listed separately.
|
|
46
|
+
18 post types plus hook × body × closer combinations, summarised from common high-engagement writing patterns in the Chinese X community (all examples are original): **duanzi layout** (one sentence per line, a blank line between lines), conversational tone, an engagement hook; original images first; asks before generating one via `topmind-cover`. Hashtags (1–3) are part of the post body; classification tags (type / purpose / platform / tone) are listed separately. Duanzi posts use no emoji at all — no persona motif, no reaction emoji, no bullet symbols; bullets are plain lines separated by blank lines. Each post is delivered in its own copyable block.
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
49
|
npx @topmindspace/topmind-writing-skills install topmind-viral-posts
|
|
@@ -51,7 +51,7 @@ npx @topmindspace/topmind-writing-skills install topmind-viral-posts
|
|
|
51
51
|
|
|
52
52
|
### topmind-format · X plain-text formatter
|
|
53
53
|
|
|
54
|
-
Paste existing text: **to duanzi** → one sentence per line with blank lines between,
|
|
54
|
+
Paste existing text: **to duanzi** → one sentence per line with blank lines between, all emoji and bullet symbols removed; **to short post** → paragraphing, emoji bullets, a keyword-matched title emoji and the chicken/cat/plant persona motif (🐔 🐱 🌱 🌸) at the start or end. Layout only — words never change; `format_text.py` enforces fidelity.
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
57
|
npx @topmindspace/topmind-writing-skills install topmind-format
|
|
@@ -63,12 +63,12 @@ Single source in `shared/references/`, distributed to each skill's `references/`
|
|
|
63
63
|
|
|
64
64
|
| Doc | Covers |
|
|
65
65
|
|---|---|
|
|
66
|
-
| `x-delivery-contract.md` (must read) |
|
|
66
|
+
| `x-delivery-contract.md` (must read) | Short posts must use emoji bullets; duanzi posts use no emoji at all (plain bullet lines); never `- ` / `1. `; the post body is one copy-ready block (including the source line and hashtags); sources, original images, image suggestions, internal tags and notes are listed separately; one block per post |
|
|
67
67
|
| `x-post-format.md` | No Markdown, bullet sets, spacing, sources, skeletons, images, WeChat → X |
|
|
68
|
-
| `emoji-system.md` | The TopMind emoji system: 0–2 persona motifs (🐔 🐱 🌱) at start/end; 0–1 keyword-matched title emoji; one bullet set per post |
|
|
68
|
+
| `emoji-system.md` | The TopMind emoji system (short posts only): 0–2 persona motifs (🐔 🐱 🌱) at start/end; 0–1 keyword-matched title emoji; one bullet set per post |
|
|
69
69
|
| `x-layout-patterns.md` | Layout patterns distilled from reference posts |
|
|
70
70
|
|
|
71
|
-
Checks: `lint_x_post.py` (E1–E9 Markdown leftovers; W12 notes / sources / image lines / internal tags inside the post body).
|
|
71
|
+
Checks: `lint_x_post.py` (E1–E9 Markdown leftovers; W12 notes / sources / image lines / internal tags inside the post body; W13 any emoji in a duanzi post with `--duanzi`).
|
|
72
72
|
|
|
73
73
|
### topmind-cover · Cover art generation
|
|
74
74
|
|
|
@@ -102,15 +102,15 @@ npx @topmindspace/topmind-writing-skills install topmind-poster
|
|
|
102
102
|
|
|
103
103
|
| Skill | Version | What it does |
|
|
104
104
|
|-------|---------|--------------|
|
|
105
|
-
| [`topmind-wechat-post`](./topmind-wechat-post/) | **0.3.
|
|
106
|
-
| [`topmind-x-article`](./topmind-x-article/) | **0.4.
|
|
105
|
+
| [`topmind-wechat-post`](./topmind-wechat-post/) | **0.3.10** | WeChat article lifecycle: package, review, 3 quality gates, inline typography & publish checklist |
|
|
106
|
+
| [`topmind-x-article`](./topmind-x-article/) | **0.4.16** | X long-form one-click publish: Markdown → one-click-copy HTML (images/prompt copy, click-to-zoom images) / plain-text fallback + cover + checklist |
|
|
107
107
|
| [`topmind-cover`](./topmind-cover/) | **0.4.8** | Cover art for X / WeChat (X master 1500×600 / 5:2): striking, theme-focused; 22-style cover style library + 16:9 X short-post cover scene + 12 title treatments + 55 example images (22 styles × 2 sizes + 11 variant samples) + 1 style overview |
|
|
108
|
-
| [`topmind-briefs`](./topmind-briefs/) | **0.2.
|
|
109
|
-
| [`topmind-viral-posts`](./topmind-viral-posts/) | **0.3.
|
|
110
|
-
| [`topmind-format`](./topmind-format/) | **0.1.
|
|
108
|
+
| [`topmind-briefs`](./topmind-briefs/) | **0.2.18** | Short-form briefs (WeChat + X): one topic, one chart; data rankings / paper explainers / product alerts / mechanism explainers; one plain-text X block (no HTML by default) with emoji bullets, source links and hashtag suggestions; post body in its own copy-ready block, sources and 1–2 original images listed separately; asks before generating any image |
|
|
109
|
+
| [`topmind-viral-posts`](./topmind-viral-posts/) | **0.3.10** | X viral short posts: 18 template types + combinations, duanzi layout (blank lines, no emoji, plain bullet lines), one copy-ready block per post, hashtags in the body and classification tags listed separately; asks before generating an image |
|
|
110
|
+
| [`topmind-format`](./topmind-format/) | **0.1.3** | X plain-text formatter: to duanzi (blank lines, no emoji) / to short post (paragraphing + emoji system); layout only, words unchanged, with a fidelity check; body delivered as its own block |
|
|
111
111
|
| [`topmind-poster`](./topmind-poster/) | **0.1.5** | HTML+CSS → high-res long image / poster / infographic PNG: headless Chrome 2× screenshot + auto-trim; "one image per section" batch workflow (generator + renderer) |
|
|
112
112
|
|
|
113
|
-
Installer [`@topmindspace/topmind-writing-skills`](https://www.npmjs.com/package/@topmindspace/topmind-writing-skills) is **0.8.
|
|
113
|
+
Installer [`@topmindspace/topmind-writing-skills`](https://www.npmjs.com/package/@topmindspace/topmind-writing-skills) is **0.8.35** (whole-repo same-tag releases).
|
|
114
114
|
|
|
115
115
|
### Which skill, and how they combine
|
|
116
116
|
|
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ npx @topmindspace/topmind-writing-skills install topmind-briefs
|
|
|
41
41
|
|
|
42
42
|
### topmind-viral-posts · X 引流段子/爆款短篇
|
|
43
43
|
|
|
44
|
-
基于对 X 中文区常见高互动写法的归纳,提供 18 类型模板 + 钩子×主体×收尾组合玩法(示例均为自编),默认**段子体**(一句一行、行与行之间空一行)、口语化、带互动钩子,配图原图优先(官方 / 第三方 / 自己的后台截图),没有原图时先问是否配图、同意后走 topmind-cover 出图,话题标签(1–3
|
|
44
|
+
基于对 X 中文区常见高互动写法的归纳,提供 18 类型模板 + 钩子×主体×收尾组合玩法(示例均为自编),默认**段子体**(一句一行、行与行之间空一行)、口语化、带互动钩子,配图原图优先(官方 / 第三方 / 自己的后台截图),没有原图时先问是否配图、同意后走 topmind-cover 出图,话题标签(1–3 个)在正文末行,内部分类标签另列;段子**完全不用 emoji**,分点不加符号、一条一行靠行间空行区分;每条正文单独一块。
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
47
|
npx @topmindspace/topmind-writing-skills install topmind-viral-posts
|
|
@@ -51,7 +51,7 @@ npx @topmindspace/topmind-writing-skills install topmind-viral-posts
|
|
|
51
51
|
|
|
52
52
|
### topmind-format · X 纯文本格式化
|
|
53
53
|
|
|
54
|
-
用户贴一段现成文字:**转段子** →
|
|
54
|
+
用户贴一段现成文字:**转段子** → 每句一行、行间空一行,去掉所有 emoji 与列表符号;**格式化成短文** → 合理分段换行、列表改 emoji、标题 emoji 对应关键词、开头结尾加鸡/猫/植物人设点缀(🐔 🐱 🌱 🌸)。只动排版不改字,`format_text.py` 自带原文保真校验。
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
57
|
npx @topmindspace/topmind-writing-skills install topmind-format
|
|
@@ -63,12 +63,12 @@ npx @topmindspace/topmind-writing-skills install topmind-format
|
|
|
63
63
|
|
|
64
64
|
| 文档 | 管什么 |
|
|
65
65
|
|---|---|
|
|
66
|
-
| `x-delivery-contract.md`(必读必守) |
|
|
66
|
+
| `x-delivery-contract.md`(必读必守) | 短文分点必须用 emoji 列表符号,段子完全不用 emoji(分点不加符号),都禁用 `- ` `1. `;正文单独一个可直接复制的块(含来源行与话题标签),信源、原图、配图建议、内部标签、说明各自另列;多条帖子每条一块 |
|
|
67
67
|
| `x-post-format.md` | 不用 Markdown、列表符号、留白、来源、骨架、配图、公众号稿→X 稿 |
|
|
68
|
-
| `emoji-system.md` | TopMind emoji
|
|
68
|
+
| `emoji-system.md` | TopMind emoji 体系唯一出处(只用于短文体):人设点缀 🐔 🐱 🌱 0–2 个只放首尾;标题 emoji 0–1 个对上关键词;列表符号一帖一套 |
|
|
69
69
|
| `x-layout-patterns.md` | 参考帖拆出的版式规律(首行给结论、列表引导语、【小标题】分节等) |
|
|
70
70
|
|
|
71
|
-
检查:`lint_x_post.py`(E1–E9 Markdown 残留;W12 正文混入信源 / 配图 / 说明 /
|
|
71
|
+
检查:`lint_x_post.py`(E1–E9 Markdown 残留;W12 正文混入信源 / 配图 / 说明 / 内部标签;`--duanzi` 时 W13 段子里出现 emoji)。
|
|
72
72
|
|
|
73
73
|
### topmind-cover · 封面配图生成
|
|
74
74
|
|
|
@@ -102,15 +102,15 @@ npx @topmindspace/topmind-writing-skills install topmind-poster
|
|
|
102
102
|
|
|
103
103
|
| 技能 | 版本 | 做什么 |
|
|
104
104
|
|------|------|--------|
|
|
105
|
-
| [`topmind-wechat-post`](./topmind-wechat-post/) | **0.3.
|
|
106
|
-
| [`topmind-x-article`](./topmind-x-article/) | **0.4.
|
|
105
|
+
| [`topmind-wechat-post`](./topmind-wechat-post/) | **0.3.10** | 公众号文章全生命周期:交付包、审校改写、质量三关、微信内联排版与发布清单 |
|
|
106
|
+
| [`topmind-x-article`](./topmind-x-article/) | **0.4.16** | X 长文一键发布:Markdown 原稿 → 一键复制 HTML(含配图/提示词复制、图片点击放大)/ 纯文本兜底 + 封面图 + 发布清单 |
|
|
107
107
|
| [`topmind-cover`](./topmind-cover/) | **0.4.8** | 文章封面配图(X / 公众号共用,X 主尺寸 1500×600 / 5:2):震撼醒目主题突出;22 种封面风格库 + X 短文 16:9 封面场景 + 12 种标题花式 + 55 张示例图(22 种风格 × 2 尺寸 + 11 张变体样张) + 1 张风格总览图 |
|
|
108
|
-
| [`topmind-briefs`](./topmind-briefs/) | **0.2.
|
|
109
|
-
| [`topmind-viral-posts`](./topmind-viral-posts/) | **0.3.
|
|
110
|
-
| [`topmind-format`](./topmind-format/) | **0.1.
|
|
108
|
+
| [`topmind-briefs`](./topmind-briefs/) | **0.2.18** | 干货短文(公众号 + X 双平台):一件事讲透,数据榜单/论文解读/新品速递;X 版一段纯文本(默认不出 HTML)+ emoji 列表 + 来源链接 + 话题标签建议;正文单独成块,信源 / 原图另列,无原图先询问配图 |
|
|
109
|
+
| [`topmind-viral-posts`](./topmind-viral-posts/) | **0.3.10** | X 引流段子/爆款短篇:18 大类型模板 + 组合玩法,段子体(行间空行,零 emoji,分点不加符号)、每条正文单独成块、话题标签在正文、分类标签另列;无原图先询问再走 topmind-cover |
|
|
110
|
+
| [`topmind-format`](./topmind-format/) | **0.1.3** | X 纯文本格式化:转段子(行间空行,零 emoji)/ 格式化成短文(分段 + emoji 体系),只动排版不改字,带原文保真校验;正文单独成块 |
|
|
111
111
|
| [`topmind-poster`](./topmind-poster/) | **0.1.5** | HTML+CSS → 高清长图 / 海报 / 信息图 PNG:无头 Chrome 2× 截图 + 自动裁白;「一段一图」分段图批量出图(生成器 + 渲染器) |
|
|
112
112
|
|
|
113
|
-
安装器 [`@topmindspace/topmind-writing-skills`](https://www.npmjs.com/package/@topmindspace/topmind-writing-skills) 为 **0.8.
|
|
113
|
+
安装器 [`@topmindspace/topmind-writing-skills`](https://www.npmjs.com/package/@topmindspace/topmind-writing-skills) 为 **0.8.35**(整仓同 tag 发版)。
|
|
114
114
|
|
|
115
115
|
### 怎么选、怎么组合
|
|
116
116
|
|
package/package.json
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.18 (2026-10-14)
|
|
4
|
+
|
|
5
|
+
- 更正:共享规约改为「短文分点用 emoji 列表符号、段子完全不用 emoji」;`emoji-system.md` 标明只适用于短文体;`lint_x_post.py` 新增 `--duanzi`(W13)
|
|
6
|
+
|
|
3
7
|
## 0.2.17 (2026-10-14)
|
|
4
8
|
|
|
5
9
|
- 特性支持:接入共享 X 交付规约 `x-delivery-contract.md`(必读必守)——X 正文单独成块,信源 / 原图 / 说明另列;分点必须用 emoji 列表符号
|
|
@@ -8,7 +8,7 @@ A brief is not a long-form article — **no HTML by default**: the X version is
|
|
|
8
8
|
Original facts, images and quotes come first; a cover is optional when no original image exists. Every delivery lists
|
|
9
9
|
each source's name, publish time and link.
|
|
10
10
|
|
|
11
|
-
- Version: **v0.2.
|
|
11
|
+
- Version: **v0.2.18** (ships with `@topmindspace/topmind-writing-skills@0.8.35`)
|
|
12
12
|
|
|
13
13
|
## Install
|
|
14
14
|
|
package/topmind-briefs/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
X 版是一段可直接复制的纯文本(分段换行 + 克制的 emoji + 来源链接),公众号版约 300–800 字 Markdown。
|
|
7
7
|
尊重原始信息、原图、原文;配图原图优先,没有原图时封面可选(`topmind-cover`);交付时写明信息来源、发布时间与来源链接。
|
|
8
8
|
|
|
9
|
-
- 版本:**v0.2.
|
|
9
|
+
- 版本:**v0.2.18**(随 `@topmindspace/topmind-writing-skills@0.8.35` 发布)
|
|
10
10
|
|
|
11
11
|
## 安装
|
|
12
12
|
|
package/topmind-briefs/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: topmind-briefs
|
|
|
3
3
|
description: "干货短文:一件事讲透,X + 公众号双平台。短文不是长文——默认不出 HTML:X 版是一段可直接复制的纯文本(首行给结论、合理分段换行、emoji 项目符号列表,emoji 只用 TopMind 体系,带来源链接,0–2 个话题标签),公众号版是 300–800 字 Markdown;交付遵守 X 交付规约:正文单独成块可直接复制(含来源行与话题标签),信源、原图(1–2 张)、说明各自分块;分点必须用 emoji 列表符号;没有原图时主动询问是否配图,不擅自生图。尊重原始信息、原图、原文。只交付不代发。Use when 写短文、公众号短文、X 短文、发快讯、简讯、速报、数据榜单、榜单速报、论文解读、新品速递、来篇短的、短平快、brief;信息密度型(数据、榜单、发布)走本技能。Do NOT use for 把现成文字格式化、转段子、排版(→ topmind-format)、X 长文与发 X 文章(→ topmind-x-article)、公众号长文与公众号排版 HTML(→ topmind-wechat-post)、引流互动型短帖、段子、涨粉帖、互关帖、爆款短篇(→ topmind-viral-posts)、单独出长图/海报/信息图 PNG(→ topmind-poster)、封面与头图(→ topmind-cover)、把稿子发出去(→ topmind-x,须用户确认)。"
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
|
-
version: "0.2.
|
|
6
|
+
version: "0.2.18"
|
|
7
7
|
action_category: "write"
|
|
8
8
|
triggers: "写短文, 公众号短文, X 短文, 发快讯, 快讯, 简讯, 速报, 干货短文, 论文解读, 数据榜单, 榜单速报, 新品速递, brief, 来篇短的, 短平快, 发个快讯"
|
|
9
9
|
author: "TopMindSpace"
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# TopMind emoji 体系(账号人设 · 标题 · 列表)
|
|
2
2
|
|
|
3
3
|
> 交付与列表规约见 `x-delivery-contract.md`(必读必守)。
|
|
4
|
-
>
|
|
4
|
+
> **只用于短文体**:`topmind-briefs`(短文)、`topmind-format` 的「格式化成短文」、viral-posts 热点资讯型的短文版,以及其他技能派生的 X 短文稿。
|
|
5
|
+
> **段子体完全不用 emoji**(`topmind-viral-posts` 段子、`topmind-format` 转段子):不用人设点缀、情绪表情、标题 emoji,也不用 emoji 列表符号;分点就一条一行、靠行间空行区分。
|
|
5
6
|
> 公众号稿正文不用人设点缀。列表符号的细则见 `x-post-format.md`,本文只定「用哪些、用几个、放哪里」。
|
|
6
7
|
> **唯一真源**:本文是 TopMind emoji 体系的唯一出处(仓库 `shared/references/emoji-system.md`,各技能目录里是逐字节副本)。各技能 SKILL.md 只引用本文,不另写一套 emoji 规则;要改体系只改这里。
|
|
7
8
|
|
|
@@ -13,7 +14,7 @@
|
|
|
13
14
|
| 标题 emoji | 一眼看出这帖讲什么 | 标题行行首 | 0–1 个 |
|
|
14
15
|
| 列表符号 | 分点、步骤、对比 | 每条列表项行首 | 一套,见 `x-post-format.md` |
|
|
15
16
|
|
|
16
|
-
三类之外的情绪表情(😂 🤝
|
|
17
|
+
三类之外的情绪表情(😂 🤝 😭)短文一般不用。
|
|
17
18
|
|
|
18
19
|
## 二、人设点缀(账号 motif)
|
|
19
20
|
|
|
@@ -28,7 +29,7 @@
|
|
|
28
29
|
|
|
29
30
|
用法:
|
|
30
31
|
|
|
31
|
-
1.
|
|
32
|
+
1. **开头**:放在第一行(标题行)行尾。例:`🆕 某编辑器 3.0 发布 🐱`
|
|
32
33
|
2. **结尾**:放在最后一句行尾(话题标签之前)。例:`明天见 🌱`
|
|
33
34
|
3. **不进正文和列表**:正文中间、列表项里不放人设 emoji。
|
|
34
35
|
4. **严肃内容不放**:事故、伤亡、争议、监管处罚类帖子不用人设点缀,也不用情绪表情。
|
|
@@ -77,7 +78,7 @@
|
|
|
77
78
|
|
|
78
79
|
| 体裁 | 人设点缀 | 标题 emoji | 列表符号 | 情绪表情 |
|
|
79
80
|
|---|---|---|---|---|
|
|
80
|
-
| 段子(
|
|
81
|
+
| 段子(viral-posts 段子 / 转段子) | 0 | 0 | 0(分点不加符号,靠行间空行) | 0 |
|
|
81
82
|
| 短文(topmind-briefs / 格式化成短文) | 0–2 | 0–1 | 一套 | 0 |
|
|
82
83
|
| 严肃资讯 | 0 | 0–1(只用 ⚡ 📄 ⚠️ 📅) | • ▪ 或 🔹 | 0 |
|
|
83
84
|
| 长帖资讯(【小标题】分节) | 0–1(只放结尾) | 0–1 | 一套或不用 | 0 |
|
|
@@ -86,22 +87,6 @@
|
|
|
86
87
|
|
|
87
88
|
## 七、示例(原创)
|
|
88
89
|
|
|
89
|
-
段子:
|
|
90
|
-
|
|
91
|
-
```text
|
|
92
|
-
说个冷知识 🐱
|
|
93
|
-
|
|
94
|
-
X 的创作者收益,看的不只是浏览量。
|
|
95
|
-
|
|
96
|
-
付费蓝V用户的互动,权重明显更高。
|
|
97
|
-
|
|
98
|
-
所以同样十万浏览,收益可能差很多。
|
|
99
|
-
|
|
100
|
-
难怪大家都在找蓝V互动😂
|
|
101
|
-
|
|
102
|
-
蓝V互关,评论区报到 🌱
|
|
103
|
-
```
|
|
104
|
-
|
|
105
90
|
短文:
|
|
106
91
|
|
|
107
92
|
```text
|
|
@@ -115,3 +100,15 @@ X 的创作者收益,看的不只是浏览量。
|
|
|
115
100
|
|
|
116
101
|
#AI编程
|
|
117
102
|
```
|
|
103
|
+
|
|
104
|
+
段子(零 emoji,对照用):
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
说个冷知识:
|
|
108
|
+
|
|
109
|
+
X 的创作者收益,看的不只是浏览量。
|
|
110
|
+
|
|
111
|
+
付费蓝V用户的互动,权重明显更高。
|
|
112
|
+
|
|
113
|
+
蓝V互关,评论区报到
|
|
114
|
+
```
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
# X 文本交付规约(必读必守)
|
|
2
2
|
|
|
3
3
|
> 适用:所有产出 X 纯文本的技能——`topmind-briefs`、`topmind-viral-posts`、`topmind-format`,以及 `topmind-x-article` 的 `X发布稿.txt`、`topmind-wechat-post` 派生的 X 稿。
|
|
4
|
-
> 排版细则见 `x-post-format.md`,emoji 见 `emoji-system.md
|
|
4
|
+
> 排版细则见 `x-post-format.md`,emoji 见 `emoji-system.md`(只用于短文体),版式规律见 `x-layout-patterns.md`。本文只管两件事:**列表与 emoji 怎么用**、**东西怎么交**。
|
|
5
5
|
|
|
6
|
-
##
|
|
6
|
+
## 一、列表与 emoji:短文用 emoji,段子不用
|
|
7
7
|
|
|
8
|
-
X
|
|
8
|
+
X 是纯文本,不渲染列表。**两种体裁都禁用 Markdown 列表**(`- ` `* ` `+ ` `1. ` `1)`,`lint_x_post.py` 报 E1 / E2)。
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
3.
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
| | 短文体(briefs、格式化成短文、热点短文版) | 段子体(viral-posts 段子、转段子) |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| 分点 | **必须用 emoji 列表符号**:🔹(二级 ▫️)/ 1️⃣ 2️⃣ 3️⃣ / ✅ ❌,一帖一套,按 `emoji-system.md` | **不加任何符号**:一条一行,靠行间空行区分 |
|
|
13
|
+
| emoji | 标题 emoji 0–1、人设点缀 0–2,按 `emoji-system.md` | **完全不用**:无人设点缀、无情绪表情、无列表符号 |
|
|
14
|
+
| 节奏 | 列表条目连续排,长条目间空一行 | 每句、每条都一行,行与行之间空一行 |
|
|
15
|
+
| 检查 | `lint_x_post.py 正文.txt` | `lint_x_post.py 段子.txt --duanzi`(出现 emoji 报 W13) |
|
|
16
|
+
|
|
17
|
+
列表前一行写「xx:」引导语;只有 2 条时直接写成两句。
|
|
15
18
|
|
|
16
19
|
## 二、交付:正文单独成块,其他各自分开
|
|
17
20
|
|
|
@@ -22,7 +25,7 @@ X 是纯文本,不渲染列表。段子和短文**都可以分点**;一旦
|
|
|
22
25
|
| 标题行、正文、emoji 列表 | 信源清单(名称|发布时间|URL) |
|
|
23
26
|
| 正文里的来源行 `来源:名称 URL`(给读者看出处,资讯类默认带) | 原图地址、配图建议、出图 prompt、图注 |
|
|
24
27
|
| 话题标签(末行,属正文) | 内部分类标签(类型 / 用途 / 语气)、备选话题标签 |
|
|
25
|
-
|
|
|
28
|
+
| 短文体的标题 emoji 与人设点缀 | 排版说明、改了什么、注意事项、核实提醒 |
|
|
26
29
|
| thread 的「1/3」序号(每条一块) | 【帖 N】【X 版】①②③ 之类的块标题 |
|
|
27
30
|
|
|
28
31
|
规定:
|
|
@@ -35,7 +38,7 @@ X 是纯文本,不渲染列表。段子和短文**都可以分点**;一旦
|
|
|
35
38
|
6. **原图块**:1–2 张,`[图1] 图片地址或交付目录文件名 — 图注;来源`;没有原图写「未找到原图」,并在最后**问用户要不要配图**(可选 `topmind-cover`),不擅自生图。
|
|
36
39
|
7. **公众号版**(briefs 双平台)单独一个 ` ```markdown ` 块,不和 X 正文同块。
|
|
37
40
|
8. **落盘文件同理**:`X短文.txt`、`X发布稿.txt` 只放可发布内容;信源、配图、说明写进单独的 `交付说明.md`。
|
|
38
|
-
9. 发前自检:`python3 scripts/lint_x_post.py 正文.txt
|
|
41
|
+
9. 发前自检:`python3 scripts/lint_x_post.py 正文.txt`(段子加 `--duanzi`)——E 类清零;W12 表示正文里混进了信源 / 配图 / 说明 / 内部标签,挪出去;W13 表示段子里出现了 emoji。
|
|
39
42
|
|
|
40
43
|
## 三、聊天交付示例
|
|
41
44
|
|
|
@@ -68,27 +71,27 @@ X 正文(直接复制):
|
|
|
68
71
|
说明:标题 emoji 🆕 对应「发布」,结尾 🐱 为人设点缀。
|
|
69
72
|
````
|
|
70
73
|
|
|
71
|
-
|
|
74
|
+
正例(段子体带分点,零 emoji,两条帖子各自成块):
|
|
72
75
|
|
|
73
76
|
````text
|
|
74
77
|
帖 1:
|
|
75
78
|
```text
|
|
76
79
|
这周把发帖流程压缩成三步:
|
|
77
80
|
|
|
78
|
-
|
|
81
|
+
早上先回评论
|
|
79
82
|
|
|
80
|
-
|
|
83
|
+
中午发一条原创
|
|
81
84
|
|
|
82
|
-
|
|
85
|
+
睡前回访新关注
|
|
83
86
|
|
|
84
|
-
三步走完,不焦虑
|
|
87
|
+
三步走完,不焦虑
|
|
85
88
|
|
|
86
89
|
#日拱一卒
|
|
87
90
|
```
|
|
88
91
|
|
|
89
92
|
帖 2:
|
|
90
93
|
```text
|
|
91
|
-
|
|
94
|
+
说个冷知识:
|
|
92
95
|
|
|
93
96
|
收益不只看浏览量。
|
|
94
97
|
|
|
@@ -107,9 +110,9 @@ X 正文(直接复制):
|
|
|
107
110
|
````text
|
|
108
111
|
```text
|
|
109
112
|
【帖 1】
|
|
110
|
-
|
|
113
|
+
这周把发帖流程压缩成三步:🐔
|
|
111
114
|
- 早上先回评论
|
|
112
|
-
|
|
115
|
+
🔹 中午发一条原创
|
|
113
116
|
#日拱一卒
|
|
114
117
|
配图:风景(日出)· 清新优雅
|
|
115
118
|
标签:类型=打卡日常型|用途=日常
|
|
@@ -119,4 +122,4 @@ X 正文(直接复制):
|
|
|
119
122
|
```
|
|
120
123
|
````
|
|
121
124
|
|
|
122
|
-
错在:Markdown 列表 `-
|
|
125
|
+
错在:Markdown 列表 `- `;段子里用了 emoji(🐔 点缀、🔹 列表符号);块标题、配图、内部标签混进正文块;两条帖子用 `---` 拼在一个块里;段子体条目之间没空行。
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
3. **两句短钩**:B 用两句各成一段的短句(判断 + 对比),英文帖常见。
|
|
23
23
|
4. 钩子行最多 1 个情绪或标题 emoji(A、E 在行首各 1 个);F、D 完全不用也照样清楚。
|
|
24
24
|
|
|
25
|
-
TopMind 写法:短文首行 = 标题 emoji(按关键词对照表,0–1 个)+ 带结论的标题;段子首行 =
|
|
25
|
+
TopMind 写法:短文首行 = 标题 emoji(按关键词对照表,0–1 个)+ 带结论的标题;段子首行 = 钩子句,不加任何 emoji。
|
|
26
26
|
|
|
27
27
|
## 二、分段长度与空行节奏
|
|
28
28
|
|
|
@@ -46,6 +46,7 @@ TopMind 写法:短文首行 = 标题 emoji(按关键词对照表,0–1 个
|
|
|
46
46
|
1. 参考帖的 emoji 只出现在三个位置:**标题行首、列表行首、(偶尔)收尾行**;正文段中间都不插。
|
|
47
47
|
2. 信息密度越高、emoji 越少:F、D 零 emoji 依然好读,靠的是空行和【小标题】。
|
|
48
48
|
3. 不连用、不堆叠;🔥 😍 这类情绪 emoji 是参考帖的个人风格,**TopMind 不照搬**——标题 emoji 只按关键词对照表取,人设点缀用 🐔 🐱 🌱 等(见 `emoji-system.md`)。
|
|
49
|
+
4. **段子体完全不用 emoji**:像 D 那样只靠一句一行和空行;分点不加符号。
|
|
49
50
|
|
|
50
51
|
## 五、中英混排
|
|
51
52
|
|
|
@@ -65,7 +66,7 @@ TopMind 写法:短文首行 = 标题 emoji(按关键词对照表,0–1 个
|
|
|
65
66
|
1. **一句判断或建议收尾**:「免费可薅,别指望质量!」(A 的结构:短句 + 态度)、「装一个能省不少事」(D 的结构:给读者一个行动理由)。
|
|
66
67
|
2. 收尾句单独成段,不超过一行;之后只接来源和标签。
|
|
67
68
|
3. 清单体(C)可以无收尾,但短文默认要有一句收尾。
|
|
68
|
-
4.
|
|
69
|
+
4. 短文收尾行可放 1 个人设点缀(🌱 🐾),严肃资讯和段子不放。
|
|
69
70
|
|
|
70
71
|
## 八、一页速查(写完对照)
|
|
71
72
|
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
## 一、不用 Markdown
|
|
8
8
|
|
|
9
9
|
X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗**`、`> 引用`、`[文字](链接)`、表格、`~~删除线~~`、反引号和代码围栏都会原样显示。
|
|
10
|
-
强调靠换行前置或「」;链接直接贴 URL
|
|
10
|
+
强调靠换行前置或「」;链接直接贴 URL。分点:**短文体用 emoji 列表符号;段子体不加任何符号、完全不用 emoji**,一条一行靠行间空行区分(见规约第一节)。
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## 二、列表符号(短文体)
|
|
13
13
|
|
|
14
14
|
| 用途 | 符号 | 说明 |
|
|
15
15
|
|---|---|---|
|
|
@@ -21,13 +21,13 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
|
|
|
21
21
|
| 严肃 / 英文帖 | • ▪ → | 事故、争议类不用 ✅ 🎉 |
|
|
22
22
|
|
|
23
23
|
规则:同层一个符号;一条一行(中文约 30 字内);最多两层;一个列表 3–5 条、不超过 7 条,只有 2 条时写成两句;列表前一行「xx:」引导语。
|
|
24
|
-
|
|
24
|
+
短文体条目连续排(条目超过一行时条目间空一行)。段子体不用这些符号。
|
|
25
25
|
|
|
26
26
|
## 三、段落与留白
|
|
27
27
|
|
|
28
28
|
一段 1–3 行,段与段空一行,不出现连续两个空行(段子体的行间空行除外)。
|
|
29
29
|
钩子 / 标题、正文、列表、收尾、来源行、话题标签之间各空一行。长帖(约 500 字以上)用【小标题】单独成行分节。
|
|
30
|
-
|
|
30
|
+
段子体:一句一行,行与行之间都空一行,零 emoji(现成文字转段子体交给 `topmind-format`)。
|
|
31
31
|
|
|
32
32
|
## 四、来源与核实
|
|
33
33
|
|
|
@@ -84,10 +84,10 @@ thread:第 1 条放钩子和最关键事实,中间条目以「2/5」开头
|
|
|
84
84
|
|
|
85
85
|
## 八、检查工具
|
|
86
86
|
|
|
87
|
-
`python3 scripts/lint_x_post.py 正文.txt`(多条帖子用单独一行 `---`
|
|
87
|
+
`python3 scripts/lint_x_post.py 正文.txt`(多条帖子用单独一行 `---` 分隔;段子加 `--duanzi`;长文兜底稿加 `--long`;`--fix --out 新文件` 自动把 Markdown 改成 X 写法)。
|
|
88
88
|
|
|
89
89
|
| 代码 | 含义 |
|
|
90
90
|
|---|---|
|
|
91
91
|
| E1–E9 | Markdown 列表 / 有序列表 / 标题 / 加粗 / 引用 / 链接 / 表格 / 代码围栏 / 删除线(错误) |
|
|
92
92
|
| W1–W7 | 反引号、列表超两层、同层混用符号、列表超 7 条、话题标签不在末行、标签超 3 个、超字数 |
|
|
93
|
-
| W8–
|
|
93
|
+
| W8–W13 | 点缀表情过多、AI 套话、有数据缺来源、连续空行、正文混入信源 / 配图 / 说明 / 内部标签、段子体出现 emoji(`--duanzi`) |
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
"""format_text.py — 把一段文字格式化成 X 段子体或短文体,只动排版,不改字。
|
|
4
4
|
|
|
5
5
|
用法:
|
|
6
|
-
python3 format_text.py 原文.txt --mode duanzi #
|
|
6
|
+
python3 format_text.py 原文.txt --mode duanzi # 段子体:每句一行,行与行之间空一行;完全不用 emoji,分点只去掉符号
|
|
7
7
|
python3 format_text.py 原文.txt --mode duanzi --split # 同上,并按句末标点(。!?!?)拆句
|
|
8
8
|
python3 format_text.py 原文.txt --mode short # 短文体:合并多余空行,Markdown 列表 → emoji 列表
|
|
9
|
-
python3 format_text.py 原文.txt --mode short --title-emoji 🆕 --open 🐔 --close 🌱
|
|
9
|
+
python3 format_text.py 原文.txt --mode short --title-emoji 🆕 --open 🐔 --close 🌱 # 点缀只用于短文体
|
|
10
10
|
python3 format_text.py 原文.txt --mode duanzi --out 段子.txt
|
|
11
11
|
cat 原文.txt | python3 format_text.py - --mode duanzi
|
|
12
12
|
|
|
@@ -53,6 +53,12 @@ def skeleton(text: str) -> str:
|
|
|
53
53
|
BULLET_RE = re.compile(r"^\s*(?:[0-9]\uFE0F?\u20E3|\U0001F51F|[\u2460-\u2473]|[🔹🔸▫▪•✅❌📌➡→])")
|
|
54
54
|
|
|
55
55
|
|
|
56
|
+
def strip_emoji(s: str) -> str:
|
|
57
|
+
"""段子体用:去掉 emoji 及其变体选择符、零宽连接符,再收拾多余空格。"""
|
|
58
|
+
s = EMOJI_RE.sub("", s).replace("\u200d", "")
|
|
59
|
+
return re.sub(r"[ \t]{2,}", " ", s).strip()
|
|
60
|
+
|
|
61
|
+
|
|
56
62
|
def to_bullet(ln: str) -> str | None:
|
|
57
63
|
"""Markdown 列表行 → emoji 列表行(一级 🔹 / 1️⃣,二级缩进 ▫️);不是列表行返回 None。"""
|
|
58
64
|
m = UL_RE.match(ln)
|
|
@@ -67,20 +73,22 @@ def to_bullet(ln: str) -> str | None:
|
|
|
67
73
|
|
|
68
74
|
|
|
69
75
|
def duanzi(text: str, split: bool) -> list[str]:
|
|
70
|
-
"""
|
|
76
|
+
"""段子体:一句一行、行间空一行,完全不用 emoji。
|
|
77
|
+
分点条目去掉列表符号(Markdown 标记与 emoji 符号都去掉),一条一行、靠行间空行区分;--split 不拆列表条目。
|
|
78
|
+
原文里的 emoji(含人设点缀、情绪表情)一并去掉。"""
|
|
71
79
|
lines: list[str] = []
|
|
72
80
|
for raw in text.splitlines():
|
|
73
81
|
if not raw.strip():
|
|
74
82
|
continue
|
|
75
|
-
|
|
76
|
-
if
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
lines.append(raw.strip())
|
|
83
|
+
m, o = UL_RE.match(raw.rstrip()), OL_RE.match(raw.rstrip())
|
|
84
|
+
if m or o or BULLET_RE.match(raw):
|
|
85
|
+
item = m.group(2) if m else (o.group(3) if o else BULLET_RE.sub("", raw, count=1))
|
|
86
|
+
lines.append(strip_emoji(item))
|
|
80
87
|
elif split:
|
|
81
|
-
lines += [p
|
|
88
|
+
lines += [strip_emoji(p) for p in SENT_RE.split(raw.strip()) if strip_emoji(p)]
|
|
82
89
|
else:
|
|
83
|
-
lines.append(raw
|
|
90
|
+
lines.append(strip_emoji(raw))
|
|
91
|
+
lines = [ln for ln in lines if ln]
|
|
84
92
|
out: list[str] = []
|
|
85
93
|
for ln in lines:
|
|
86
94
|
out += [ln, ""]
|
|
@@ -145,10 +153,10 @@ def main() -> int:
|
|
|
145
153
|
print("错误:原文为空", file=sys.stderr)
|
|
146
154
|
return 2
|
|
147
155
|
|
|
156
|
+
if args.mode == "duanzi" and (args.title_emoji or args.open_e or args.close_e):
|
|
157
|
+
print("错误:段子体完全不用 emoji,不接受 --title-emoji / --open / --close(点缀只用于 --mode short)", file=sys.stderr)
|
|
158
|
+
return 2
|
|
148
159
|
lines = duanzi(text, args.split) if args.mode == "duanzi" else short(text)
|
|
149
|
-
if args.mode == "duanzi" and args.title_emoji:
|
|
150
|
-
print("提示:段子体没有标题行,已忽略 --title-emoji", file=sys.stderr)
|
|
151
|
-
args.title_emoji = None
|
|
152
160
|
lines = decorate(lines, args.title_emoji, args.open_e, args.close_e)
|
|
153
161
|
result = "\n".join(lines) + "\n"
|
|
154
162
|
|
|
@@ -9,11 +9,12 @@ X 的普通帖子不渲染 Markdown。本脚本检查 X 稿,并可把常见 Ma
|
|
|
9
9
|
python3 lint_x_post.py X稿.txt # 检查(一个文件里多条帖子用单独一行 --- 分隔)
|
|
10
10
|
python3 lint_x_post.py X稿.txt --fix --out X稿.fixed.txt # 自动改写后输出到新文件
|
|
11
11
|
python3 lint_x_post.py X发布稿.txt --long # 长文兜底稿:不查话题标签位置和字数
|
|
12
|
+
python3 lint_x_post.py 段子.txt --duanzi # 段子体:出现任何 emoji(含列表符号、人设点缀)记 W13
|
|
12
13
|
cat X稿.txt | python3 lint_x_post.py - # 从标准输入读取
|
|
13
14
|
|
|
14
15
|
警告(不影响退出码,--strict 时算失败)还包括:点缀表情过多(W8)、疑似 AI 套话(W9)、
|
|
15
16
|
有数据但缺来源(W10)、连续多个空行(W11)、正文里混入非发布内容(W12:信源清单 / 配图 / 图注 / 说明 /
|
|
16
|
-
内部标签 / 帖序号等,应按 x-delivery-contract.md
|
|
17
|
+
内部标签 / 帖序号等,应按 x-delivery-contract.md 另列,不放进可复制正文)、段子体出现 emoji(W13,需 --duanzi)。
|
|
17
18
|
普通帖(非 --long)里出现代码围栏 ``` 记 E8(多半是把交付代码块的围栏一起复制进来了),
|
|
18
19
|
删除线 ~~文字~~ 记 E9;--fix 会去掉这两类符号。
|
|
19
20
|
|
|
@@ -133,7 +134,12 @@ def keycap_for(n: int) -> str:
|
|
|
133
134
|
return f"{n})"
|
|
134
135
|
|
|
135
136
|
|
|
136
|
-
|
|
137
|
+
DUANZI_EMOJI_RE = re.compile(
|
|
138
|
+
r"[\U0001F100-\U0001F2FF\U0001F300-\U0001FAFF\u2600-\u27BF\u2B00-\u2BFF\u25AA\u25AB\u2022\u20E3\u2460-\u2473]"
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def lint_post(start: int, lines: list[str], long_mode: bool, duanzi: bool = False):
|
|
137
143
|
"""返回 (errors, warnings),元素为 (行号, 代码, 说明)。"""
|
|
138
144
|
errs, warns = [], []
|
|
139
145
|
in_fence = False
|
|
@@ -153,6 +159,8 @@ def lint_post(start: int, lines: list[str], long_mode: bool):
|
|
|
153
159
|
continue
|
|
154
160
|
in_fence = not in_fence
|
|
155
161
|
continue
|
|
162
|
+
if duanzi and DUANZI_EMOJI_RE.search(ln):
|
|
163
|
+
warns.append((no, "W13", "段子体不用 emoji(含人设点缀和列表符号):分点一条一行、靠行间空行区分"))
|
|
156
164
|
if not long_mode and NONPUB_RE.match(ln):
|
|
157
165
|
warns.append((no, "W12", "正文里混入非发布内容(信源清单 / 配图 / 说明 / 内部标签等):另列,不放进可复制正文"))
|
|
158
166
|
if STRIKE_RE.search(ln):
|
|
@@ -285,6 +293,7 @@ def main() -> int:
|
|
|
285
293
|
ap.add_argument("--long", action="store_true", help="长文兜底稿模式(X发布稿.txt):整份当一篇,不查话题标签位置和字数")
|
|
286
294
|
ap.add_argument("--fix", action="store_true", help="自动改写 Markdown 写法为 X 写法(需 --out;只处理单个文件)")
|
|
287
295
|
ap.add_argument("--out", help="--fix 的输出文件")
|
|
296
|
+
ap.add_argument("--duanzi", action="store_true", help="段子体模式:出现任何 emoji(含列表符号、人设点缀)记 W13")
|
|
288
297
|
ap.add_argument("--strict", action="store_true", help="警告也算失败")
|
|
289
298
|
args = ap.parse_args()
|
|
290
299
|
|
|
@@ -307,7 +316,7 @@ def main() -> int:
|
|
|
307
316
|
print(f"错误:无法读取 {f}({e})", file=sys.stderr)
|
|
308
317
|
return 2
|
|
309
318
|
for idx, (start, lines) in enumerate(split_posts(text, args.long), 1):
|
|
310
|
-
errs, warns = lint_post(start, lines, args.long)
|
|
319
|
+
errs, warns = lint_post(start, lines, args.long, args.duanzi)
|
|
311
320
|
label = "" if args.long else f"#帖{idx} "
|
|
312
321
|
for no, code, msg in errs:
|
|
313
322
|
print(f"{f}:{no}: {label}[{code}] 错误:{msg}")
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
A reusable skill for generating cover art for X long-form posts and WeChat articles. Goal: **striking, eye-catching, theme-focused**.
|
|
6
6
|
|
|
7
|
-
- Version: **v0.4.8** (ships with `@topmindspace/topmind-writing-skills@0.8.
|
|
7
|
+
- Version: **v0.4.8** (ships with `@topmindspace/topmind-writing-skills@0.8.35`)
|
|
8
8
|
|
|
9
9
|
## Style gallery
|
|
10
10
|
|
package/topmind-cover/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
**[中文](./README.md)** | English
|
|
4
4
|
|
|
5
|
-
Lays out existing text for X: **duanzi mode** (one sentence per line, a blank line between every line) or **short-post mode** (paragraphing, emoji bullets, a keyword-matched title emoji, and the account's chicken/cat/plant motif at the start or end). Layout only — the words are never changed; a fidelity check enforces it.
|
|
5
|
+
Lays out existing text for X: **duanzi mode** (one sentence per line, a blank line between every line, no emoji at all, bullets without symbols) or **short-post mode** (paragraphing, emoji bullets, a keyword-matched title emoji, and the account's chicken/cat/plant motif at the start or end). Layout only — the words are never changed; a fidelity check enforces it.
|
|
6
6
|
|
|
7
|
-
- Version: **v0.1.
|
|
7
|
+
- Version: **v0.1.3** (ships with `@topmindspace/topmind-writing-skills@0.8.35`)
|
|
8
8
|
|
|
9
9
|
## Install
|
|
10
10
|
|
|
@@ -15,12 +15,12 @@ npx @topmindspace/topmind-writing-skills install topmind-format
|
|
|
15
15
|
## Usage
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
python3 scripts/format_text.py input.txt --mode duanzi --split --open
|
|
18
|
+
python3 scripts/format_text.py input.txt --mode duanzi --split # duanzi rejects --open / --close / --title-emoji
|
|
19
19
|
python3 scripts/format_text.py input.txt --mode short --title-emoji 🆕 --open 🐔
|
|
20
20
|
python3 scripts/lint_x_post.py output.txt
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
Emoji rules: [references/emoji-system.md](./references/emoji-system.md)
|
|
23
|
+
Emoji rules (short posts only): [references/emoji-system.md](./references/emoji-system.md). X layout rules: [references/x-post-format.md](./references/x-post-format.md).
|
|
24
24
|
|
|
25
25
|
## Scope
|
|
26
26
|
|