@topmindspace/topmind-skills 4.15.0 → 4.15.2
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 +33 -0
- package/INSTALL.md +10 -2
- package/README.en.md +18 -14
- package/README.md +19 -15
- package/README.zh-CN.md +19 -15
- package/bin/install-skills.mjs +48 -8
- package/evals/evals.json +108 -3
- package/install-targets/claude-code.json +1 -2
- package/install-targets/codex.json +1 -2
- package/install-targets/hermes.json +1 -2
- package/install-targets/mimocode.json +1 -2
- package/install-targets/opencode.json +1 -2
- package/install-targets/universal.json +1 -2
- package/package.json +3 -3
- package/shared/host-loading.md +3 -3
- package/shared/trigger-disambiguation.md +21 -2
- package/skills.md +1 -1
- package/topmind/SKILL.md +20 -23
- package/topmind/references/multi-intent.md +2 -0
- package/topmind-capture/SKILL.md +11 -34
- package/topmind-ledger/SKILL.md +11 -18
- package/topmind-loop/SKILL.md +11 -23
- package/topmind-maintain/SKILL.md +11 -24
- package/topmind-memory/SKILL.md +11 -21
- package/topmind-organize/SKILL.md +15 -36
- package/topmind-pack.json +49 -29
- package/topmind-weread/SKILL.md +11 -18
- package/topmind-write/SKILL.md +15 -32
- package/topmind-x/SKILL.md +13 -19
- package/topmind-wechat/DESIGN.md +0 -50
- package/topmind-wechat/SKILL.md +0 -229
- package/topmind-wechat/assets/themes/amber-review.json +0 -35
- package/topmind-wechat/assets/themes/graphite.json +0 -35
- package/topmind-wechat/assets/themes/minimal-ink.json +0 -35
- package/topmind-wechat/assets/themes/newsprint.json +0 -35
- package/topmind-wechat/assets/themes/tech-blue.json +0 -35
- package/topmind-wechat/references/element-spec.md +0 -162
- package/topmind-wechat/references/known-pits.md +0 -86
- package/topmind-wechat/references/theme-map.md +0 -139
- package/topmind-wechat/references/typography-rules.md +0 -62
- package/topmind-wechat/references/wechat-constraints.md +0 -106
- package/topmind-wechat/references/workflow.md +0 -113
- package/topmind-wechat/references/writing-quality.md +0 -137
- package/topmind-wechat/scripts/audit-provenance.py +0 -366
- package/topmind-wechat/scripts/lint-wechat.py +0 -446
- package/topmind-wechat/scripts/md2wechat.py +0 -1599
- package/topmind-wechat/scripts/new-article.py +0 -183
- package/topmind-wechat/scripts/push-to-topstream.py +0 -226
- package/topmind-wechat/scripts/scan_ai_flavor.py +0 -101
- package/topmind-wechat/scripts/sync-mapping.py +0 -220
- package/topmind-wechat/scripts/sync-status.py +0 -187
package/topmind-weread/SKILL.md
CHANGED
|
@@ -1,27 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: topmind-weread
|
|
3
|
-
version: 4.15.0
|
|
4
3
|
description: >-
|
|
5
4
|
同步微信读书划线/想法/统计到专题。Use when 微信读书、划线同步、weread、读书笔记。
|
|
6
5
|
Do NOT use for 普通 URL 捕获、仅整理、出稿、X.
|
|
7
|
-
action_category: connector
|
|
8
|
-
triggers:
|
|
9
|
-
- 微信读书
|
|
10
|
-
- weread
|
|
11
|
-
- 划线同步
|
|
12
|
-
- 读书笔记
|
|
13
|
-
- 阅读统计
|
|
14
|
-
- 书架
|
|
15
|
-
- weread sync
|
|
16
|
-
- sync highlights
|
|
17
|
-
tags: [weread, reading, highlights, sync, capture]
|
|
18
|
-
entrypoint: false
|
|
19
|
-
compatibility: Requires WeRead Skill API key (wrk-*). Desktop WereadService preferred; host may call gateway manually.
|
|
20
|
-
author: TopMindSpace
|
|
21
6
|
license: MIT
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
7
|
+
compatibility: Requires WeRead Skill API key (wrk-*). Desktop WereadService preferred; host may call gateway manually.
|
|
8
|
+
metadata:
|
|
9
|
+
version: "4.15.2"
|
|
10
|
+
action_category: "connector"
|
|
11
|
+
entrypoint: "false"
|
|
12
|
+
triggers: "微信读书, weread, 划线同步, 读书笔记, 阅读统计, 书架, weread sync, sync highlights"
|
|
13
|
+
tags: "weread, reading, highlights, sync, capture"
|
|
14
|
+
author: "TopMindSpace"
|
|
15
|
+
homepage: "https://github.com/topmindspace/topmind-skills"
|
|
16
|
+
updated: "2026-10-08"
|
|
17
|
+
degradation: "../shared/capability-degradation.md"
|
|
25
18
|
---
|
|
26
19
|
|
|
27
20
|
# topmind WeRead
|
package/topmind-write/SKILL.md
CHANGED
|
@@ -1,39 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: topmind-write
|
|
3
|
-
version: 4.15.0
|
|
4
3
|
description: >-
|
|
5
4
|
写作/润色/出稿到专题或交付层(role:delivery)。Use when 写、起草、续写、润色、出稿、交付、write、draft、deliver。
|
|
6
5
|
Do NOT use for 仅捕获、仅结构整理、只写记忆、doctor/loop、社交连接器.
|
|
7
|
-
action_category: write
|
|
8
|
-
triggers:
|
|
9
|
-
- 写
|
|
10
|
-
- 写作
|
|
11
|
-
- 起草
|
|
12
|
-
- 续写
|
|
13
|
-
- 修订
|
|
14
|
-
- 润色
|
|
15
|
-
- 交付
|
|
16
|
-
- 改写
|
|
17
|
-
- de-AI
|
|
18
|
-
- 输出
|
|
19
|
-
- 出稿
|
|
20
|
-
- 定稿
|
|
21
|
-
- 发布
|
|
22
|
-
- 导出
|
|
23
|
-
- 排版
|
|
24
|
-
- write
|
|
25
|
-
- draft
|
|
26
|
-
- deliver
|
|
27
|
-
- publish
|
|
28
|
-
- export
|
|
29
|
-
tags: [write, draft, revise, polish, deliver]
|
|
30
|
-
entrypoint: false
|
|
31
|
-
compatibility: topmind workspace. Delivery role category (often 88-交付 / 88-Delivery).
|
|
32
|
-
author: TopMindSpace
|
|
33
6
|
license: MIT
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
7
|
+
compatibility: topmind workspace. Delivery role category (often 88-交付 / 88-Delivery).
|
|
8
|
+
metadata:
|
|
9
|
+
version: "4.15.2"
|
|
10
|
+
action_category: "write"
|
|
11
|
+
entrypoint: "false"
|
|
12
|
+
triggers: "写, 写作, 起草, 续写, 修订, 润色, 交付, 改写, de-AI, 输出, 出稿, 定稿, 发布, 导出, 排版, write, draft, deliver, publish, export"
|
|
13
|
+
tags: "write, draft, revise, polish, deliver"
|
|
14
|
+
author: "TopMindSpace"
|
|
15
|
+
homepage: "https://github.com/topmindspace/topmind-skills"
|
|
16
|
+
updated: "2026-10-08"
|
|
17
|
+
degradation: "../shared/capability-degradation.md"
|
|
37
18
|
---
|
|
38
19
|
|
|
39
20
|
# topmind Write
|
|
@@ -55,13 +36,15 @@ degradation: ../shared/capability-degradation.md
|
|
|
55
36
|
- 只更新「我的情况」/ 周期反思 → `topmind-memory`
|
|
56
37
|
- 清理/体检/巡检 → maintain / loop
|
|
57
38
|
- 发推 / 微信读书 → connectors
|
|
58
|
-
- **公众号 / 微信排版 /
|
|
39
|
+
- **公众号 / 微信排版 / 公众号定稿** → 外部可选 `topmind-wechat-post`(topmind-writing-skills,已安装时);未安装时由本 skill 按通用写作流程出稿
|
|
40
|
+
- X 长文 → 外部可选 `topmind-x-article`;干货短文 / 引流短帖 → `topmind-briefs` / `topmind-viral-posts`(均已安装时;未安装仍由本 skill 写)
|
|
41
|
+
- 做成幻灯片 → 外部可选 `topmind-presentation`;发推 → `topmind-x`(须用户确认)
|
|
59
42
|
|
|
60
43
|
## Writing Entry Points
|
|
61
44
|
|
|
62
45
|
Draft · Continue · Revise · Polish · Deliver — 按用户当前意图,不是固定流水线。
|
|
63
46
|
|
|
64
|
-
公众号专用:选题包 · 审校改写 · 质量三关 · 定稿 · 微信排版 —
|
|
47
|
+
公众号专用:选题包 · 审校改写 · 质量三关 · 定稿 · 微信排版 — 已安装写作包时转入外部 `topmind-wechat-post`(本包 4.15.2 起不再自带 `topmind-wechat`);不代用户发布。
|
|
65
48
|
|
|
66
49
|
## Workflow
|
|
67
50
|
|
package/topmind-x/SKILL.md
CHANGED
|
@@ -1,27 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: topmind-x
|
|
3
|
-
version: 4.15.0
|
|
4
3
|
description: >-
|
|
5
4
|
X/Twitter:归档/搜索(Bearer)、发帖(xurl)、Agent 可用官方 MCP。Use when 发推、推特、twitter、x.com。
|
|
6
5
|
Do NOT use for 微信读书、非 X 捕获、doctor、长文交付.
|
|
7
|
-
action_category: connector
|
|
8
|
-
triggers:
|
|
9
|
-
- 发推
|
|
10
|
-
- 推特
|
|
11
|
-
- twitter
|
|
12
|
-
- x.com
|
|
13
|
-
- 发帖
|
|
14
|
-
- 推文
|
|
15
|
-
- post tweet
|
|
16
|
-
- x platform
|
|
17
|
-
tags: [x, twitter, social, mcp, agent]
|
|
18
|
-
entrypoint: false
|
|
19
|
-
compatibility: Desktop needs Bearer (read) and/or xurl (post). Agent hosts use official X MCP + xurl bridge.
|
|
20
|
-
author: TopMindSpace
|
|
21
6
|
license: MIT
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
7
|
+
compatibility: Desktop needs Bearer (read) and/or xurl (post). Agent hosts use official X MCP + xurl bridge.
|
|
8
|
+
metadata:
|
|
9
|
+
version: "4.15.2"
|
|
10
|
+
action_category: "connector"
|
|
11
|
+
entrypoint: "false"
|
|
12
|
+
triggers: "发推, 推特, twitter, x.com, 发帖, 推文, post tweet, x platform"
|
|
13
|
+
tags: "x, twitter, social, mcp, agent"
|
|
14
|
+
author: "TopMindSpace"
|
|
15
|
+
homepage: "https://github.com/topmindspace/topmind-skills"
|
|
16
|
+
updated: "2026-10-08"
|
|
17
|
+
degradation: "../shared/capability-degradation.md"
|
|
25
18
|
---
|
|
26
19
|
|
|
27
20
|
# topmind X / Twitter
|
|
@@ -40,7 +33,8 @@ degradation: ../shared/capability-degradation.md
|
|
|
40
33
|
|
|
41
34
|
- 微信读书 → `topmind-weread`
|
|
42
35
|
- 非 X 的剪藏 → `topmind-capture`
|
|
43
|
-
- 长文交付(非推文)→ `topmind-write`
|
|
36
|
+
- 长文交付(非推文)→ `topmind-write`;X 长文 → 外部可选 `topmind-x-article`(已安装时)
|
|
37
|
+
- 只写推文稿、不发 → 外部可选 `topmind-viral-posts` / `topmind-briefs`(已安装时;未安装 → `topmind-write`)
|
|
44
38
|
|
|
45
39
|
## 认证
|
|
46
40
|
|
package/topmind-wechat/DESIGN.md
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# topmind-wechat · 技能侧设计摘要
|
|
2
|
-
|
|
3
|
-
> 技能边界以本文件、`SKILL.md` 和 `references/` 为准。不要另做一份用浏览器本地存储的公众号编辑器。
|
|
4
|
-
|
|
5
|
-
## 定位
|
|
6
|
-
|
|
7
|
-
- write 族**子技能**(`action_category: write` · `entrypoint: false` · pack `optional: true`)
|
|
8
|
-
- 不是日常前台:由 `topmind` / `topmind-write` 在「公众号 / 微信排版」意图下路由
|
|
9
|
-
- 能力真源:`scripts/*.py`(stdlib)+ `references/*` + `assets/themes/*`(5 套,含 `amber-review`)
|
|
10
|
-
|
|
11
|
-
## 路径解析
|
|
12
|
-
|
|
13
|
-
`--base` → `TOPMIND_WECHAT_BASE` → `{TOPMIND_WORKSPACE}/40-创作|20-专题/{year}-公众号`;topstream 可选(`TOPSTREAM_ROOT`)。
|
|
14
|
-
**禁止**把 `/Users/...` 写进脚本默认值(`~/TopWorkSpace/...` 惯例兜底允许)。
|
|
15
|
-
|
|
16
|
-
## 三条路径
|
|
17
|
-
|
|
18
|
-
- **forward**:`notes/*.md` → 公众号稿(`source_file`)
|
|
19
|
-
- **reverse**:选题原创 → 公众号稿 → 可选回推(`target_file: pending`;回推**必须** `--assets`)
|
|
20
|
-
- **站外拉取**:在线精选站/转载整合 → 仍用 `reverse` + `pending`(站外源不进 notes)
|
|
21
|
-
|
|
22
|
-
## 质量三关 + 排版关
|
|
23
|
-
|
|
24
|
-
事实 / 逻辑 / 文字(scan_ai_flavor ≥85 + 报告腔四症状)→ lint 0 error → md2wechat `--embed-images`。
|
|
25
|
-
|
|
26
|
-
Desktop / 移动伴面只实现**约束子集**;完整语义以本目录 Python 为准。
|
|
27
|
-
|
|
28
|
-
## references 索引
|
|
29
|
-
|
|
30
|
-
| 文件 | 管什么 |
|
|
31
|
-
|------|--------|
|
|
32
|
-
| `workflow.md` | 流程/状态机/路径/站外拉取 |
|
|
33
|
-
| `known-pits.md` | 实操坑 |
|
|
34
|
-
| `element-spec.md` | 元素 → HTML 渲染规格 |
|
|
35
|
-
| `theme-map.md` | 主题键 ↔ 题材映射 |
|
|
36
|
-
| `wechat-constraints.md` | 平台硬约束(转换产物) |
|
|
37
|
-
| `typography-rules.md` | 阅读节奏/段长 |
|
|
38
|
-
| `writing-quality.md` | 质量三关 |
|
|
39
|
-
|
|
40
|
-
## 已知分叉与对拍要求
|
|
41
|
-
|
|
42
|
-
| 项 | 真源 | Desktop 子集 | 要求 |
|
|
43
|
-
|----|------|--------------|------|
|
|
44
|
-
| max-item | lint-wechat.py **70** | `WECHAT_MAX_ITEM` | 必须同值 |
|
|
45
|
-
| AI 结构扣分 | scan_ai_flavor.structural | `structuralDeduction()` | 同规则 |
|
|
46
|
-
| stat 管道行 | md2wechat 非 `\|` 丢弃 | wechat-format 同 | 同语义 |
|
|
47
|
-
| embed-images | `--embed-images` | `WechatService.exportViaScript` **优先**;否则 `embedLocalImagesWithChecklist` | 同效果 + 上传清单 |
|
|
48
|
-
| 导出真源 | `md2wechat.py` | 有 Python + 脚本时走 `wechat.exportViaScript` | 内置为回退 |
|
|
49
|
-
|
|
50
|
-
改动任一侧规则时,**同一次改动**更新另一侧并跑 `tests/plugin-wechat-ui.test.mjs` 对拍断言。
|
package/topmind-wechat/SKILL.md
DELETED
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: topmind-wechat
|
|
3
|
-
version: 4.15.0
|
|
4
|
-
description: >-
|
|
5
|
-
公众号文章全生命周期子技能(write 族):交付包、审校改写、质量三关、状态同步、微信内联排版与发布清单。
|
|
6
|
-
支持 forward(底稿→公众号)、reverse(选题原创→回推)、站外拉取(在线精选站→reverse+pending)三条路径;
|
|
7
|
-
内置五套主题、代码高亮、宽表卡片化、前言导读、尾部签名、外链脚注、--embed-images。
|
|
8
|
-
Use when 写公众号、公众号排版、微信排版、定稿、发公众号、公众号交付包、wechat format、mp format。
|
|
9
|
-
Do NOT use for 只改错别字(直接编辑)、小红书/知乎(平台约束不同)、纯网页发布、长文通用润色(走 topmind-write)。
|
|
10
|
-
action_category: write
|
|
11
|
-
triggers:
|
|
12
|
-
- 公众号
|
|
13
|
-
- 微信排版
|
|
14
|
-
- 公众号排版
|
|
15
|
-
- 公众号稿
|
|
16
|
-
- 排版这篇文章
|
|
17
|
-
- 定稿
|
|
18
|
-
- 发公众号
|
|
19
|
-
- 公众号交付
|
|
20
|
-
- wechat
|
|
21
|
-
- mp format
|
|
22
|
-
tags: [wechat, typography, formatting, publishing, markdown, write]
|
|
23
|
-
entrypoint: false
|
|
24
|
-
author: TopMindSpace
|
|
25
|
-
license: MIT
|
|
26
|
-
homepage: https://github.com/topmindspace/topmind
|
|
27
|
-
updated: 2026-09-23
|
|
28
|
-
degradation: ../shared/capability-degradation.md
|
|
29
|
-
compatibility: topmind workspace. Writes via UTR workspace-write / Desktop WorkspaceService. Scripts need Python 3 stdlib only.
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
# topmind-wechat · 公众号创作子技能
|
|
33
|
-
|
|
34
|
-
`topmind-write` 的**公众号专用子技能**。管一篇公众号文章从选题/底稿到发布清单的完整生命周期。
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
选题/底稿 → 创作 → 质量三关 → 定稿(状态+目录) → 排版 → 发布清单 →(可选)回推 notes
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
> **不是并列前台。** 用户说「写一篇长文」→ `topmind-write`;明确公众号/微信排版才进本技能。
|
|
41
|
-
|
|
42
|
-
## 脚本(真源)
|
|
43
|
-
|
|
44
|
-
| 脚本 | 用途 |
|
|
45
|
-
|------|------|
|
|
46
|
-
| `scripts/new-article.py` | 建交付包(骨架稿 + frontmatter + images/diagrams) |
|
|
47
|
-
| `scripts/sync-status.py` | 状态 ⇄ 目录名 ⇄ 字数(草稿 / 定稿 / 已发布) |
|
|
48
|
-
| `scripts/sync-mapping.py` | 映射一致性(frontmatter + 目录 + 可选 notes + topic 总表) |
|
|
49
|
-
| `scripts/push-to-topstream.py` | 可选回推:公众号稿降级为纯 Markdown notes |
|
|
50
|
-
| `scripts/lint-wechat.py` | 排版体检 + 自动修复(中英文间距、段长、AI 腔…) |
|
|
51
|
-
| `scripts/md2wechat.py` | Markdown → 全内联 HTML;**必加 `--embed-images`** |
|
|
52
|
-
| `scripts/scan_ai_flavor.py` | 中文去 AI 味扫描 —— **转发器**,实现在 canonical `qu-aiwei-zh`(`--which` 可查解析结果;本目录不含实现,避免副本漂移) |
|
|
53
|
-
| `scripts/audit-provenance.py` | **改稿保真审计**:双向逐段溯源(本稿→源稿 / 源稿→本稿),抓悄悄扩写与被落下的段。有源稿时定稿必跑 |
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
# 路径解析:CLI --base/--workspace → env TOPMIND_WECHAT_BASE / TOPMIND_WORKSPACE / TOPSTREAM_ROOT → 惯例
|
|
57
|
-
export TOPMIND_WORKSPACE=/path/to/workspace # 推荐
|
|
58
|
-
python3 scripts/new-article.py --slug demo --title "标题" --direction reverse
|
|
59
|
-
python3 scripts/lint-wechat.py --input <包>/公众号稿.md --fix
|
|
60
|
-
python3 scripts/scan_ai_flavor.py <包>/公众号稿.md # 总分与作者姿态分都 ≥85
|
|
61
|
-
python3 scripts/md2wechat.py --input <包>/公众号稿.md --out-dir <包> --slug demo \
|
|
62
|
-
--asset-root <素材根> --embed-images
|
|
63
|
-
python3 scripts/sync-status.py --set 定稿 <包> --apply
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
细节见 [`references/workflow.md`](references/workflow.md) · [`references/known-pits.md`](references/known-pits.md)。
|
|
67
|
-
|
|
68
|
-
## 路径默认
|
|
69
|
-
|
|
70
|
-
| 用途 | 解析 |
|
|
71
|
-
|------|------|
|
|
72
|
-
| 交付包根 | `--base` → `TOPMIND_WECHAT_BASE` → `{ws}/40-创作/2026-公众号` 或 `{ws}/20-专题/2026-公众号` |
|
|
73
|
-
| 工作区 | `TOPMIND_WORKSPACE` |
|
|
74
|
-
| 底稿/回推 | `--topstream` → `TOPSTREAM_ROOT` → 可选;不存在则跳过 notes 校验 |
|
|
75
|
-
| 终稿交付 | 可 `save-output` 拷贝到 role:delivery(`88-交付/`),包仍留在创作类专题 |
|
|
76
|
-
|
|
77
|
-
## 三条路径
|
|
78
|
-
|
|
79
|
-
### forward(底稿 → 公众号)
|
|
80
|
-
|
|
81
|
-
```
|
|
82
|
-
底稿 notes/*.md → 审校改写 → 质量三关 → 定稿 → 排版 → 发布
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
`new-article.py --direction forward --source-file notes/xxx.md`
|
|
86
|
-
|
|
87
|
-
### reverse(选题原创)
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
选题包 → 调研素材 → 多轮改稿 → 三关 → 定稿 → 排版 → 发布 →(可选)push-to-topstream
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
`new-article.py --direction reverse`(`target_file: pending`)
|
|
94
|
-
|
|
95
|
-
### 站外拉取(转载整合 / 在线精选站)
|
|
96
|
-
|
|
97
|
-
源不在本工作区、也不在 topstream `notes/` 时,**仍落 `reverse` + `target_file: pending`**。
|
|
98
|
-
**不要用 `forward`**:它要求 `source_file` 以 `notes/` 开头且文件真实存在,站外源必然过不了 `sync-mapping.py`。
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
python3 scripts/new-article.py --slug <中文短名> --title "<标题>" --direction reverse
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
取源坑(Next.js 站点):正文在 RSC 载荷里,优先 `GET /api/notes/<id>`;图片在 `/api/uploads/<hash>`,记 hash→本地名映射;同图双 hash 用 `md5` 去重。差异与口径写进包内 `README.md`。
|
|
105
|
-
|
|
106
|
-
**回推纪律**:notes 保持纯 Markdown。`::: 容器` / 徽章 / `==高亮==` 只进公众号稿。回推**务必带 `--assets`**(否则 GitHub 上 `images/` 死链):
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
python3 scripts/push-to-topstream.py <包> --target notes/xxx.md --assets # dry-run
|
|
110
|
-
python3 scripts/push-to-topstream.py <包> --target notes/xxx.md --assets --apply \
|
|
111
|
-
--asset-names "00-封面.jpg=01-cover.jpg,…"
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## 交付包与状态
|
|
115
|
-
|
|
116
|
-
```text
|
|
117
|
-
YYYY-MM-DD-<中文短名> # 草稿
|
|
118
|
-
YYYY-MM-DD-<中文短名>-released # 定稿 / 已发布
|
|
119
|
-
├── 公众号稿.md # 唯一改稿入口
|
|
120
|
-
├── <slug>-公众号版.html # 浏览器打开 → 复制正文 → 粘贴后台
|
|
121
|
-
├── 图片上传清单.md
|
|
122
|
-
├── images/ diagrams/
|
|
123
|
-
└── README.md # 包说明(可选)
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
**frontmatter(映射真源)**
|
|
127
|
-
|
|
128
|
-
```yaml
|
|
129
|
-
status: 草稿 # 草稿 | 定稿 | 已发布
|
|
130
|
-
direction: reverse # forward | reverse
|
|
131
|
-
source_file: "" # forward 填 notes/xxx.md
|
|
132
|
-
target_file: pending # reverse:pending | notes/xxx.md
|
|
133
|
-
word_count: 0 # 纯中文字数,sync-status 维护
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
状态与目录名**不要手改**:
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
python3 scripts/sync-status.py --set 定稿 <包> --apply
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
## 质量三关(定稿前必过)
|
|
143
|
-
|
|
144
|
-
### 关 1 · 事实
|
|
145
|
-
|
|
146
|
-
- 承重数字回**一手来源**;厂商口径 / 据报道 分开写
|
|
147
|
-
- 查不到一手来源的传闻**删**
|
|
148
|
-
- 改稿续写:正文已有数字**回源重核**(上一轮文本最不可信)
|
|
149
|
-
- 多口径(主轮/复跑)显式拆开;表格从数据源生成,禁止手抄
|
|
150
|
-
- 外部工具改过的稿:**先核数字再动文字**;「比值对但绝对值错」= 全段重核
|
|
151
|
-
- **有源稿时(`reverse` / 站外拉取)跑一次双向溯源审计**,别靠「我记得只改了三处」:
|
|
152
|
-
|
|
153
|
-
```bash
|
|
154
|
-
python3 scripts/audit-provenance.py --draft <包>/公众号稿.md --source <包>/源稿-*.md
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
正向查「本稿有、源稿找不到」(扩写藏在这里),反向查「源稿有、本稿落下」。**退出码 1 不是失败,是「有待判定项」**——每一项要么归入已声明的修正/增补,要么就是不该有的改动;逐条在包内 README 声明后即收口。源稿里后加的块(勘误等)用 `--skip '^>\s*\[!'` 排除。
|
|
158
|
-
|
|
159
|
-
### 关 2 · 逻辑
|
|
160
|
-
|
|
161
|
-
- 单边结论旁配反方证据
|
|
162
|
-
- 结构前后一致;同一事实多处同值
|
|
163
|
-
|
|
164
|
-
### 关 3 · 文字(去 AI 味)
|
|
165
|
-
|
|
166
|
-
```bash
|
|
167
|
-
python3 scripts/scan_ai_flavor.py <包>/公众号稿.md # 总分 ≥85(人话)
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
- **同时看「作者姿态分」(E 类,与总分独立)**,目标同样 ≥85。实测两者会严重背离:同一篇 AI 完整版总分 92 / 姿态 21,手改发布版 100 / 100——**总分只差 8 分,姿态差 79 分**,只看总分会被骗
|
|
171
|
-
- ⚠️ 这里调的是 canonical `qu-aiwei-zh` 的脚本(本目录的 `scripts/scan_ai_flavor.py` 是转发器)。**若输出里没有「作者姿态层」一节,说明拿到的是 E 类之前的旧版本**,分数不可信——先 `--which` 确认实际执行的是哪一份
|
|
172
|
-
- 删套话/黑话/工程圈行话;降调段末加粗金句
|
|
173
|
-
- **满分 ≠ 有人味**:再查「段末金句癖 / 节奏过分整齐 / 没有场景与我 / 报告体标注」
|
|
174
|
-
- **口语化 ≠ 有人味**:删社交垫词(元叙述、空转过渡、姿态句)
|
|
175
|
-
- 判据:**这句话删掉之后,读者少知道了什么?**
|
|
176
|
-
- **姿态分只对文章有效**:清单 / 词表 / 说明书不适用(检测器会把被引用的反例当真命中),脚本命中 ≥70% 落在表格行时会提示「疑似清单文档」,看到提示先确认再改
|
|
177
|
-
|
|
178
|
-
详见 [`references/writing-quality.md`](references/writing-quality.md)。
|
|
179
|
-
|
|
180
|
-
## 排版要点(写稿时)
|
|
181
|
-
|
|
182
|
-
- 开头 150 字内钩子;单段 ≤110 字;列表项 ≤70 字
|
|
183
|
-
- 二级标题序号化;容器:`::: stat|pull|note|tip|warn|danger|dialogue`
|
|
184
|
-
- **`::: stat` 内必须是 `数值 | 说明` 管道行**,否则静默丢弃
|
|
185
|
-
- 评测稿:**图承担数据,正文只解读**;健康密度 **300–450 字/图**
|
|
186
|
-
- 个股用词红线:禁用 买入/推荐/目标价…;文末投资声明
|
|
187
|
-
|
|
188
|
-
更多:[`references/typography-rules.md`](references/typography-rules.md) · [`references/wechat-constraints.md`](references/wechat-constraints.md)。
|
|
189
|
-
|
|
190
|
-
## 排版与导出(必读)
|
|
191
|
-
|
|
192
|
-
```bash
|
|
193
|
-
python3 scripts/md2wechat.py \
|
|
194
|
-
--input <包>/公众号稿.md --out-dir <包> --slug <slug> \
|
|
195
|
-
--asset-root <素材根> --embed-images \
|
|
196
|
-
[--theme assets/themes/minimal-ink.json]
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
1. **永远 `--embed-images`**,否则粘贴丢图(相对路径被序列化成 file://)
|
|
200
|
-
2. **图片 basename 铁律**:正文引用名 = `images/` 目标名;禁止两套同名图共处
|
|
201
|
-
3. 合规自检出现 `✗` 改生成器,不要手改 HTML
|
|
202
|
-
|
|
203
|
-
坑清单:[`references/known-pits.md`](references/known-pits.md)。
|
|
204
|
-
|
|
205
|
-
## 主题
|
|
206
|
-
|
|
207
|
-
| 文件 | 风格 | 适用 |
|
|
208
|
-
|------|------|------|
|
|
209
|
-
| `assets/themes/minimal-ink.json`(默认) | 黑白灰 + 砖红 | 深度研析 / 观点 / 随笔 |
|
|
210
|
-
| `assets/themes/tech-blue.json` | 科技蓝 | AI/技术 |
|
|
211
|
-
| `assets/themes/newsprint.json` | 报纸衬线 | 人文评论 |
|
|
212
|
-
| `assets/themes/graphite.json` | 石墨克制 | 严肃报告 |
|
|
213
|
-
| `assets/themes/amber-review.json` | 琥珀评测 | 产品评测 |
|
|
214
|
-
|
|
215
|
-
`md2wechat.py --list-themes` 看全部;`--theme genre:评测` 可按题材自动选。
|
|
216
|
-
渲染规格见 [`references/element-spec.md`](references/element-spec.md) · 主题映射见 [`references/theme-map.md`](references/theme-map.md)。
|
|
217
|
-
|
|
218
|
-
**平台红线速查**(详见 [`references/wechat-constraints.md`](references/wechat-constraints.md)):禁 `div`/`pre`/`h1`/`figure`/`thead`/flex/float/gradient/shadow;表格 `table-layout` 不写 fixed;列数 ≥4 转卡片。
|
|
219
|
-
|
|
220
|
-
## 与 Desktop「公众号创作」
|
|
221
|
-
|
|
222
|
-
Desktop mini-app(`topmind-wechat` 插件)是本技能的**可视化工作流伴面**:包列表 → 改稿 → 三关 → 预览 → 导出。写回仍走 WorkspaceService;脚本语义以本技能为准。
|
|
223
|
-
|
|
224
|
-
## When NOT to use
|
|
225
|
-
|
|
226
|
-
- 只想改几个句子 → 直接编辑
|
|
227
|
-
- 小红书 / 知乎 / 掘金 → 平台约束不同
|
|
228
|
-
- 通用长文交付 → `topmind-write`
|
|
229
|
-
- 只去 AI 味不排版 → 中文走 `humanizer-zh`(先立保真边界)+ `qu-aiwei-zh`(再扫描定位);英文走 `humanizer`
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "amber-review",
|
|
3
|
-
"name": "琥珀评测",
|
|
4
|
-
"genre": ["评测", "模型评测", "数据对比", "榜单", "速览"],
|
|
5
|
-
"accent": "#B45309",
|
|
6
|
-
"accent_light": "#E8C79A",
|
|
7
|
-
"accent_soft": "#FBF2E4",
|
|
8
|
-
"text": "#3A3226",
|
|
9
|
-
"text_strong": "#231A0E",
|
|
10
|
-
"text_muted": "#8A7A62",
|
|
11
|
-
"text_light": "#A3927A",
|
|
12
|
-
"surface": "#FAF6EF",
|
|
13
|
-
"border": "#EADFCB",
|
|
14
|
-
"code_bg": "#2B2620",
|
|
15
|
-
"code_text": "#EFE7DA",
|
|
16
|
-
"code_scheme": "mono",
|
|
17
|
-
"c_note": "#C7B9A2",
|
|
18
|
-
"c_tip": "#4F8763",
|
|
19
|
-
"c_warn": "#C98A2B",
|
|
20
|
-
"c_danger": "#BC4F3E",
|
|
21
|
-
"radius": "6px",
|
|
22
|
-
"font_size": "16px",
|
|
23
|
-
"line_height": "1.75",
|
|
24
|
-
"para_gap": "22px",
|
|
25
|
-
"align": "left",
|
|
26
|
-
"h2_style": "number",
|
|
27
|
-
"toc": true,
|
|
28
|
-
"toc_max": 5,
|
|
29
|
-
"toc_min_h2": 4,
|
|
30
|
-
"toc_min_chars": 2000,
|
|
31
|
-
"table_max_cols": 3,
|
|
32
|
-
"img_border": "#EDE2D0",
|
|
33
|
-
"font_stack": "-apple-system,BlinkMacSystemFont,'Helvetica Neue','PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif",
|
|
34
|
-
"mono_stack": "Menlo,Monaco,Consolas,'Courier New',monospace"
|
|
35
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "graphite",
|
|
3
|
-
"name": "石墨灰阶",
|
|
4
|
-
"genre": ["技术说明", "专业评论", "方法", "原理"],
|
|
5
|
-
"accent": "#52525B",
|
|
6
|
-
"accent_light": "#52525B",
|
|
7
|
-
"accent_soft": "#EFEFF1",
|
|
8
|
-
"text": "#3A3A3A",
|
|
9
|
-
"text_strong": "#1C1C1C",
|
|
10
|
-
"text_muted": "#7A7A7A",
|
|
11
|
-
"text_light": "#9E9E9E",
|
|
12
|
-
"surface": "#F4F4F4",
|
|
13
|
-
"border": "#E2E2E2",
|
|
14
|
-
"code_bg": "#262626",
|
|
15
|
-
"code_text": "#E4E4E4",
|
|
16
|
-
"code_scheme": "mono",
|
|
17
|
-
"c_note": "#BDBDBD",
|
|
18
|
-
"c_tip": "#6E7F6E",
|
|
19
|
-
"c_warn": "#A08B5E",
|
|
20
|
-
"c_danger": "#9C5B52",
|
|
21
|
-
"radius": "0px",
|
|
22
|
-
"font_size": "16px",
|
|
23
|
-
"line_height": "1.75",
|
|
24
|
-
"para_gap": "22px",
|
|
25
|
-
"align": "left",
|
|
26
|
-
"h2_style": "underline",
|
|
27
|
-
"toc": true,
|
|
28
|
-
"toc_max": 5,
|
|
29
|
-
"toc_min_h2": 4,
|
|
30
|
-
"toc_min_chars": 2000,
|
|
31
|
-
"table_max_cols": 3,
|
|
32
|
-
"img_border": "#EAEAEA",
|
|
33
|
-
"font_stack": "-apple-system,BlinkMacSystemFont,'Helvetica Neue','PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif",
|
|
34
|
-
"mono_stack": "'SF Mono',Menlo,Consolas,'Courier New',monospace"
|
|
35
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "minimal-ink",
|
|
3
|
-
"name": "极简黑白灰",
|
|
4
|
-
"genre": ["默认", "观点", "深度分析", "随笔"],
|
|
5
|
-
"accent": "#A6524A",
|
|
6
|
-
"accent_light": "#E3BAB3",
|
|
7
|
-
"accent_soft": "#FAF0EE",
|
|
8
|
-
"text": "#333333",
|
|
9
|
-
"text_strong": "#1A1A1A",
|
|
10
|
-
"text_muted": "#888888",
|
|
11
|
-
"text_light": "#999999",
|
|
12
|
-
"surface": "#F7F7F7",
|
|
13
|
-
"border": "#E8E8E8",
|
|
14
|
-
"code_bg": "#2C2C2C",
|
|
15
|
-
"code_text": "#E8E8E8",
|
|
16
|
-
"code_scheme": "mono",
|
|
17
|
-
"c_note": "#C9C9C9",
|
|
18
|
-
"c_tip": "#5B8C5A",
|
|
19
|
-
"c_warn": "#C08A3E",
|
|
20
|
-
"c_danger": "#B5544C",
|
|
21
|
-
"radius": "4px",
|
|
22
|
-
"font_size": "16px",
|
|
23
|
-
"line_height": "1.75",
|
|
24
|
-
"para_gap": "22px",
|
|
25
|
-
"align": "left",
|
|
26
|
-
"h2_style": "number",
|
|
27
|
-
"toc": true,
|
|
28
|
-
"toc_max": 5,
|
|
29
|
-
"toc_min_h2": 4,
|
|
30
|
-
"toc_min_chars": 2000,
|
|
31
|
-
"table_max_cols": 3,
|
|
32
|
-
"img_border": "#F0F0F0",
|
|
33
|
-
"font_stack": "-apple-system,BlinkMacSystemFont,'Helvetica Neue','PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif",
|
|
34
|
-
"mono_stack": "Menlo,Monaco,Consolas,'Courier New',monospace"
|
|
35
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "newsprint",
|
|
3
|
-
"name": "报纸纸感",
|
|
4
|
-
"genre": ["复盘", "特稿", "行业观察", "长文"],
|
|
5
|
-
"accent": "#8C5A3C",
|
|
6
|
-
"accent_light": "#D8C0A8",
|
|
7
|
-
"accent_soft": "#F3E9DE",
|
|
8
|
-
"text": "#2B2B2B",
|
|
9
|
-
"text_strong": "#14110E",
|
|
10
|
-
"text_muted": "#7A7268",
|
|
11
|
-
"text_light": "#9C938A",
|
|
12
|
-
"surface": "#F5F3EE",
|
|
13
|
-
"border": "#E2DDD2",
|
|
14
|
-
"code_bg": "#2E2B27",
|
|
15
|
-
"code_text": "#EDE8DF",
|
|
16
|
-
"code_scheme": "mono",
|
|
17
|
-
"c_note": "#B4AEA2",
|
|
18
|
-
"c_tip": "#5F7A55",
|
|
19
|
-
"c_warn": "#B07C33",
|
|
20
|
-
"c_danger": "#A24B3C",
|
|
21
|
-
"radius": "0px",
|
|
22
|
-
"font_size": "16px",
|
|
23
|
-
"line_height": "1.8",
|
|
24
|
-
"para_gap": "24px",
|
|
25
|
-
"align": "left",
|
|
26
|
-
"h2_style": "center",
|
|
27
|
-
"toc": true,
|
|
28
|
-
"toc_max": 5,
|
|
29
|
-
"toc_min_h2": 4,
|
|
30
|
-
"toc_min_chars": 2000,
|
|
31
|
-
"table_max_cols": 3,
|
|
32
|
-
"img_border": "#E5E1D8",
|
|
33
|
-
"font_stack": "'Songti SC','Noto Serif CJK SC','Source Han Serif SC',Georgia,'Times New Roman',serif",
|
|
34
|
-
"mono_stack": "'SF Mono',Menlo,Consolas,'Courier New',monospace"
|
|
35
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "tech-blue",
|
|
3
|
-
"name": "科技蓝",
|
|
4
|
-
"genre": ["教程", "实操", "工具测评", "建站"],
|
|
5
|
-
"accent": "#185FA5",
|
|
6
|
-
"accent_light": "#A9C9E8",
|
|
7
|
-
"accent_soft": "#EAF2FA",
|
|
8
|
-
"text": "#333333",
|
|
9
|
-
"text_strong": "#12233A",
|
|
10
|
-
"text_muted": "#6B7C93",
|
|
11
|
-
"text_light": "#96A3B4",
|
|
12
|
-
"surface": "#F2F6FB",
|
|
13
|
-
"border": "#DCE6F2",
|
|
14
|
-
"code_bg": "#1B2733",
|
|
15
|
-
"code_text": "#DCE6F2",
|
|
16
|
-
"code_scheme": "mono",
|
|
17
|
-
"c_note": "#A8B8C8",
|
|
18
|
-
"c_tip": "#3F8F6A",
|
|
19
|
-
"c_warn": "#C08A3E",
|
|
20
|
-
"c_danger": "#C0554A",
|
|
21
|
-
"radius": "6px",
|
|
22
|
-
"font_size": "16px",
|
|
23
|
-
"line_height": "1.75",
|
|
24
|
-
"para_gap": "22px",
|
|
25
|
-
"align": "left",
|
|
26
|
-
"h2_style": "number",
|
|
27
|
-
"toc": true,
|
|
28
|
-
"toc_max": 5,
|
|
29
|
-
"toc_min_h2": 4,
|
|
30
|
-
"toc_min_chars": 2000,
|
|
31
|
-
"table_max_cols": 3,
|
|
32
|
-
"img_border": "#E4EDF7",
|
|
33
|
-
"font_stack": "-apple-system,BlinkMacSystemFont,'Helvetica Neue','PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif",
|
|
34
|
-
"mono_stack": "Menlo,Monaco,Consolas,'Courier New',monospace"
|
|
35
|
-
}
|