@topmindspace/tms-skills 0.1.6 → 0.1.8

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 (34) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +48 -69
  3. package/package.json +1 -1
  4. package/top-ppt-html/README.md +25 -6
  5. package/top-ppt-html/SKILL.md +6 -6
  6. package/top-ppt-html/agents/openai.yaml +1 -1
  7. package/top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.html +10 -5
  8. package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.html +10 -5
  9. package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.html +10 -5
  10. package/top-ppt-html/assets/examples/2026-09-26-topmind-tms-skills-showcase.html +4016 -0
  11. package/top-ppt-html/assets/examples/2026-09-26-topmind-tms-skills-showcase.model.json +315 -0
  12. package/top-ppt-html/assets/pptx-export.js +9 -4
  13. package/top-ppt-html/assets/showcase/showcase-cover.png +0 -0
  14. package/top-ppt-html/assets/showcase/showcase-gates.png +0 -0
  15. package/top-ppt-html/assets/showcase/showcase-modes.png +0 -0
  16. package/top-ppt-html/assets/showcase/showcase-split.png +0 -0
  17. package/top-ppt-html/assets/showcase/style-business-blue-cover.png +0 -0
  18. package/top-ppt-html/assets/showcase/style-graphite-cover.png +0 -0
  19. package/top-ppt-html/assets/showcase/style-mckinsey-cover.png +0 -0
  20. package/top-ppt-html/assets/templates/architecture.html +10 -5
  21. package/top-ppt-html/assets/templates/presentation.html +10 -5
  22. package/top-ppt-html/assets/templates/research.html +10 -5
  23. package/top-ppt-html/assets/theme-overview-architecture.png +0 -0
  24. package/top-ppt-html/assets/theme-overview-research.png +0 -0
  25. package/top-ppt-html/assets/theme-overview.png +0 -0
  26. package/top-ppt-html/package-lock.json +2 -2
  27. package/top-ppt-html/package.json +1 -1
  28. package/top-ppt-html/references/playbook.md +1 -1
  29. package/top-ppt-html/scripts/build_examples.py +4 -3
  30. package/top-ppt-html/scripts/build_pptx.js +12 -5
  31. package/top-ppt-html/scripts/package_skill.py +4 -3
  32. package/top-ppt-html/scripts/smoke_pptx.sh +1 -0
  33. package/top-ppt-html/scripts/test_feedback_gates.py +96 -0
  34. package/top-ppt-html/scripts/validate_pptx.py +60 -37
package/CHANGELOG.md CHANGED
@@ -1,3 +1,34 @@
1
+ ## 0.1.8 — 2026-09-26
2
+
3
+ ### Showcase · docs · release polish
4
+
5
+ - **产品 Showcase**:新增 Mode A 样张 `top-ppt-html/assets/examples/2026-09-26-topmind-tms-skills-showcase.html`(+ model)——介绍 TopMind / tms-skills / top-ppt-html(三模式·风格主题·质量门禁·Fast Mode);`validate_report --strict` 与 `smoke_pptx` **0/0**。
6
+ - **截图**:刷新 `theme-overview*.png`;新增 `docs/showcase/`(showcase 全页 + 三黄金样张关键页)与精简 `top-ppt-html/assets/showcase/`(进技能包,供 README)。
7
+ - **README 吸引力**:根 README + 技能 README 增加 banner、风格/模式画廊、showcase 链接与安装钉版本 **0.1.8**。
8
+ - **Banner**:`docs/assets/tms-skills-banner.png`。
9
+ - **打包**:`package_skill` 纳入 `assets/showcase/*`;examples 最小数量仍 ≥3(黄金样张 + 可选 showcase)。
10
+ - **文档清理**:用户向 README 对齐当前产品面;PUBLISHING 版本线 → 0.1.8;`build_examples` 说明允许 showcase 并存。
11
+ - 版本对齐 **0.1.8**(根 + 技能 package/lock / SKILL metadata / README)。
12
+
13
+ ### 红线未动
14
+ 反截断、图表多样性地板、Mode A craft、runtime SHA 同版本门禁、中文「演示文稿」术语、整仓 npm 发版。
15
+
16
+ ## 0.1.7 — 2026-09-26
17
+
18
+ ### top-ppt-html · defect opt (D8/D9/D11/D13)
19
+
20
+ - **P0 D8**:`chartBottom(hasSoWhat, hasFootnote)` 不再 footnote 短路;`Math.min(soWhatY, footnoteY, contentBottomWithNote)` 与 flagY 让位同口径。双通道(`build_pptx.js` / `pptx-export.js`)对齐;flagBar 在 withNote 时底边不越过 `contentBottomWithNote`;Agenda 预留 0.25in 避免 severe 误伤。
21
+ - **P0 D9**:`annotation_band_overlap_check` 报告页内**全部**侵入者(去掉首条即 `break`)。
22
+ - **P1 D11**:有 so-what 时 `band_top = soWhatY`(6.05),捕获 (6.05, 6.40] 侵入;crush = 自带顶之上压下;注释自形状/窄 accent 条豁免保留。
23
+ - **P1 D13**:`ci_skill_gates.sh --with-pptx` 必跑 `smoke_pptx` × business-blue **与** research-mckinsey(覆盖 soWhat+footnote);graphite-dark 可选。
24
+ - **CHROME_DRIFT**:页码只认 `N / M`,不再把年份/Exhibit 编号当页脚(research-mckinsey 假阳性清除)。
25
+ - **Fast Mode / 效率**:演讲/汇报线索→Mode A;明确跳过 vs 仍须(质检红线不降);L0+L1 / `extract_snippet` 纪律不变。
26
+ - **门禁**:`test_feedback_gates` 锁定 D8/D9/D11/CHROME;research-mckinsey `--strict` **0/0**。
27
+ - 版本对齐 **0.1.7**(根 + 技能 package / SKILL metadata / README / PUBLISHING)。
28
+
29
+ ### 红线未动
30
+ 反截断、图表多样性地板、Mode A craft、runtime SHA 同版本门禁、中文「演示文稿」术语保持。
31
+
1
32
  ## 0.1.6 — 2026-09-25
2
33
 
3
34
  ### CI / Release 硬化
package/README.md CHANGED
@@ -1,117 +1,96 @@
1
1
  # tms-skills
2
2
 
3
- **TopMindspace 智能体技能 monorepo** — 可安装的智能体技能集合,当前包含 **top-ppt-html**(优雅、大气、正式场合演讲/汇报演示文稿)。
3
+ <p align="center">
4
+ <img src="docs/assets/tms-skills-banner.png" alt="tms-skills — TopMindspace agent skills" width="960" />
5
+ </p>
4
6
 
5
- 让 idea 飞,好想法被看见。
7
+ **TopMindspace 智能体技能 monorepo** — 把好想法做成可上台的交付。
6
8
 
7
- ## 技能一览
9
+ 当前主技能 **[top-ppt-html](./top-ppt-html/)**:优雅、大气的正式场合**演示文稿**(单文件 HTML + 版式保真可编辑 PPTX)。
8
10
 
9
- | 技能 | 版本 | 做什么 |
10
- |------|------|--------|
11
- | [`top-ppt-html`](./top-ppt-html/) | 0.1.6 | 优雅大气的正式场合演讲/汇报演示文稿:单文件 HTML + 版式保真可编辑 16:9 PPTX |
11
+ > 让 idea 飞,好想法被看见。
12
12
 
13
- 安装器包 [`@topmindspace/tms-skills`](https://www.npmjs.com/package/@topmindspace/tms-skills) 亦为 **0.1.6**(整仓发版:安装器与当前技能同 tag;未来多技能仍可各自演进,默认随仓库 release)。
13
+ ## 一眼看到工艺
14
14
 
15
- 更多技能以仓库根目录下的技能目录加入(每个目录含 `SKILL.md`)。
15
+ | 演示 · business-blue | 研究 · mckinsey | 架构 · graphite-dark |
16
+ |:---:|:---:|:---:|
17
+ | ![bizblue](docs/showcase/presentation-business-blue/bizblue-cover.png) | ![mckinsey](docs/showcase/research-mckinsey/mckinsey-cover.png) | ![graphite](docs/showcase/architecture-graphite-dark/graphite-cover.png) |
16
18
 
17
- ## 安装
19
+ 产品介绍样张(Mode A · ~10 页):
18
20
 
19
- 两条通道,装出来同一套技能。**npm = 钉版本快照**;**GitHub = 跟仓库 HEAD**。
21
+ | Cover | 三模式 | 质量门禁 |
22
+ |:---:|:---:|:---:|
23
+ | ![cover](docs/showcase/topmind-showcase/showcase-cover.png) | ![modes](docs/showcase/topmind-showcase/showcase-s4.png) | ![gates](docs/showcase/topmind-showcase/showcase-s6.png) |
20
24
 
25
+ - 交互画廊:[top-ppt-html/assets/style-gallery.html](./top-ppt-html/assets/style-gallery.html)
26
+ - Showcase HTML:[top-ppt-html/assets/examples/2026-09-26-topmind-tms-skills-showcase.html](./top-ppt-html/assets/examples/2026-09-26-topmind-tms-skills-showcase.html)
27
+ - 主题总览图:`top-ppt-html/assets/theme-overview*.png`(Gate 0)
28
+ - 更多截图:[docs/showcase/](./docs/showcase/)
21
29
 
22
- > **警告 / Warning**:不要安装 `@topmindspace/tms-skills@^2`。npm 上的 **2.0.0–2.1.1** 已弃用(仓库重置前的过时线);当前线是 **0.1.x**(`latest` 指向 0.1.x)。请安装 `@topmindspace/tms-skills@0.1.x`。
23
- >
24
- > Do **not** install `^2`. Versions **2.0.0–2.1.1 are deprecated**; use **0.1.x** (`latest` tracks 0.1.x).
30
+ ## 技能一览
25
31
 
32
+ | 技能 | 版本 | 做什么 |
33
+ |------|------|--------|
34
+ | [`top-ppt-html`](./top-ppt-html/) | **0.1.8** | 正式场合演讲/汇报演示文稿:HTML 可翻页 + 16:9 可编辑 PPTX;三模式 × 九风格;strict 0/0 门禁 |
26
35
 
27
- ### npm(推荐)
36
+ 安装器 [`@topmindspace/tms-skills`](https://www.npmjs.com/package/@topmindspace/tms-skills) 同为 **0.1.8**(整仓同 tag 发版)。
37
+
38
+ ## 安装
39
+
40
+ **npm = 钉版本快照**;**GitHub = 跟仓库 HEAD**。
41
+
42
+ > **警告**:不要安装 `@topmindspace/tms-skills@^2`(2.0.0–2.1.1 已弃用)。当前线 **0.1.x**(`latest`)。
28
43
 
29
44
  ```bash
30
45
  npx @topmindspace/tms-skills list
31
46
  npx @topmindspace/tms-skills install top-ppt-html
32
47
  npx @topmindspace/tms-skills install top-ppt-html --to ./.claude/skills
33
- npx @topmindspace/tms-skills@0.1.6 install top-ppt-html # 钉版本
48
+ npx @topmindspace/tms-skills@0.1.8 install top-ppt-html # 钉版本
34
49
  ```
35
50
 
36
- ### GitHub 直装
37
-
38
51
  ```bash
52
+ # 跟 HEAD
39
53
  npx github:topmindspace/tms-skills install top-ppt-html
40
-
41
- git clone https://github.com/topmindspace/tms-skills.git
42
- node tms-skills/bin/tms-skills.js install top-ppt-html
43
54
  ```
44
55
 
45
- ### 手工
56
+ 默认探测:`./.agents` → `./.claude` → `./.cursor` → `./.codex` → `./.mimocode`,再用户级 `~/.claude` 等;也可用 `--to`。不要 `npm install top-ppt-html`(技能 id 不是独立包)。
46
57
 
47
- 解压 GitHub Release 的 `top-ppt-html.zip` 到技能目录。
58
+ PPTX 精导需在技能目录 `npm install`(pptxgenjs)。HTML 生成仅 Python 标准库。
48
59
 
49
- 安装器把根目录下的技能目录 `<id>/`(含 `SKILL.md`)复制到目标目录;智能体通过 frontmatter(`name` + `description`)发现技能。
60
+ ## 黄金样张
50
61
 
51
- 默认探测顺序(`resolveDefaultTarget`):项目级 `./.agents` → `./.claude` → `./.cursor` → `./.codex` → `./.mimocode`;再用户级 `~/.claude` → `~/.agents` → `~/.cursor` → `~/.codex`;都没有则落 `./.agents/skills`。也可用 `--to` 显式指定。
52
-
53
- | 宿主 | 项目级 | 用户级 |
54
- |------|--------|--------|
55
- | 通用 / Codex | `.agents/skills` | `~/.agents/skills` |
56
- | Claude Code | `.claude/skills` | `~/.claude/skills` |
57
- | Cursor | `.cursor/skills`(兼读 `.agents`) | `~/.cursor/skills` |
58
- | Codex 兼容 | `.codex/skills` | `~/.codex/skills` |
59
- | 本仓库另含 | `.mimocode/skills` | — |
60
-
61
- > **排错**:不要 `npm install <skill-id>`(技能 id 不是独立 npm 包)。「找不到包」→ 换 GitHub 直装,或 `--registry https://registry.npmjs.org/`。
62
-
63
- ### 可选依赖(仅 PPTX 精导)
64
-
65
- HTML 生成零第三方依赖(Python 标准库)。PPTX 导出需要 Node + pptxgenjs:
66
-
67
- ```bash
68
- cd <install-dir>/top-ppt-html
69
- npm install
70
- ```
62
+ | 模式 | 文件 |
63
+ |------|------|
64
+ | A 演示 | [`2026-09-09-presentation-business-blue`](./top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.html) |
65
+ | B 研究 | [`2026-09-09-research-mckinsey`](./top-ppt-html/assets/examples/2026-09-09-research-mckinsey.html) |
66
+ | C 架构 | [`2026-09-09-architecture-graphite-dark`](./top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.html) |
67
+ | 产品 Showcase | [`2026-09-26-topmind-tms-skills-showcase`](./top-ppt-html/assets/examples/2026-09-26-topmind-tms-skills-showcase.html) |
71
68
 
72
69
  ## 仓库结构
73
70
 
74
71
  ```
75
72
  tms-skills/
76
- ├─ top-ppt-html/ # 技能(SKILL.md + assets + references + scripts + evals)
73
+ ├─ top-ppt-html/ # 技能(SKILL.md + assets + references + scripts)
77
74
  ├─ bin/tms-skills.js # CLI:list / install
78
- ├─ docs/ # 发布规范 · CI/Release 说明(ci.md)
79
- ├─ scripts/ # 仓库级工具(隐私扫描)
80
- ├─ .github/workflows/ # CI + Release
75
+ ├─ docs/ # 发布规范 · showcase 截图 · banner
76
+ ├─ scripts/ # 仓库级门禁 / 隐私扫描
81
77
  ├─ package.json # @topmindspace/tms-skills
82
- ├─ LICENSE · CHANGELOG.md · README.md
78
+ └─ LICENSE · CHANGELOG.md · README.md
83
79
  ```
84
80
 
85
- ## 发布与同步
81
+ ## 发布与 CI
86
82
 
87
83
  | 动作 | GitHub | npm |
88
84
  |------|:------:|:---:|
89
- | push 到 main | 立即可见 | **不变** |
85
+ | push main | 立即可见 | **不变** |
90
86
  | tag `vX.Y.Z` | Release + zip | **自动 publish** |
91
87
 
92
- - **push 不会更新 npm**;必须 bump 版本并打 tag。
93
- - **Release 只保留最近 2 个**(CI 只删旧 Release,**git tags 保留**);npm 可钉任意历史版本。
94
- - 安装器与技能 **版本各自独立**;默认 patch/minor,major 仅破坏性变更。
95
-
96
- 详见 [docs/PUBLISHING.md](./docs/PUBLISHING.md)。
97
-
98
- ## CI
99
-
100
- | 工作流 | 触发 | 做什么 |
101
- |--------|------|--------|
102
- | `ci.yml` | push / PR | 打包门禁、审计、隐私扫描、CLI 冒烟 |
103
- | `release.yml` | tag `v*` | 门禁 → zip → Release → npm publish(已存在则跳过)→ prune Release 留 2(tags 保留) |
104
-
105
88
  ```bash
106
89
  npm run check && npm run audit && npm run privacy
90
+ # PPTX 冒烟(含 McKinsey):bash scripts/ci_skill_gates.sh --with-pptx
107
91
  ```
108
92
 
109
- ## 开发新技能
110
-
111
- 1. 根目录建 `<skill-id>/`,`SKILL.md` 的 `name` 与目录一致。
112
- 2. 人类说明写 `README.md`;智能体入口保持 `SKILL.md`。
113
- 3. 发布前 `scripts/package_skill.py --check`。
114
- 4. 登记:根 README、`npm run sync:files`、`CHANGELOG.md`(CI 按发现的技能跑门禁,无需再硬编码)。
93
+ 详见 [docs/PUBLISHING.md](./docs/PUBLISHING.md) · [docs/ci.md](./docs/ci.md)。
115
94
 
116
95
  ## 许可证
117
96
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topmindspace/tms-skills",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "TopMindspace 智能体技能 monorepo — 通过 npm / GitHub npx 安装技能(top-ppt-html:优雅大气正式场合演讲/汇报演示文稿等)。",
5
5
  "license": "MIT",
6
6
  "author": "TopMindspace",
@@ -1,14 +1,32 @@
1
1
  # TopPPT HTML
2
2
 
3
+ <p align="center">
4
+ <img src="assets/showcase/showcase-cover.png" alt="TopMind × tms-skills showcase cover" width="720" />
5
+ </p>
6
+
3
7
  **让 idea 飞,好想法被看见。** 面向**演讲与正式场合**的高品质演示文稿技能:把主张、调研、分析、架构方案,生成为**优雅、美观、大气**的可翻页 HTML + **版式保真可编辑 PPTX**。核心工艺是版式、排版、色彩与内容组织——克制图标/图表配文,而非 gadget 堆砌或咨询 dump 默认。
4
8
 
5
- - 技能标识:`top-ppt-html`(安装/打包目录名与此一致);品牌名:**TopPPT HTML**
6
- - 版本:**v0.1.6**(与 `@topmindspace/tms-skills@0.1.6` 同 tag)
9
+ - 技能标识:`top-ppt-html`;品牌名:**TopPPT HTML**
10
+ - 版本:**v0.1.8**(与 `@topmindspace/tms-skills@0.1.8` 同 tag)
7
11
  - **智能体入口**:`SKILL.md` → `references/playbook.md`(L1)→ L2 按需
8
12
  - **人类维护者**:本 README(安装 / 命令 / 目录);勿把本文件当生成规范
9
13
 
10
- ## 一、技能简介(人类速览)
14
+ ### 风格 × 模式一览
15
+
16
+ | business-blue · 演示 | mckinsey · 研究 | graphite-dark · 架构 |
17
+ |:---:|:---:|:---:|
18
+ | ![bb](assets/showcase/style-business-blue-cover.png) | ![mk](assets/showcase/style-mckinsey-cover.png) | ![gr](assets/showcase/style-graphite-cover.png) |
11
19
 
20
+ | Showcase · HTML+PPTX | 三模式 | 质量门禁 |
21
+ |:---:|:---:|:---:|
22
+ | ![sp](assets/showcase/showcase-split.png) | ![md](assets/showcase/showcase-modes.png) | ![gt](assets/showcase/showcase-gates.png) |
23
+
24
+ - 交互画廊:[`assets/style-gallery.html`](./assets/style-gallery.html)
25
+ - 产品 Showcase:[`assets/examples/2026-09-26-topmind-tms-skills-showcase.html`](./assets/examples/2026-09-26-topmind-tms-skills-showcase.html)(Mode A · business-blue · ~10 页)
26
+ - 主题参考图(Gate 0):`assets/theme-overview*.png`
27
+ - 仓库级大图集:[`docs/showcase/`](../docs/showcase/)(不进技能 zip)
28
+
29
+ ## 一、技能简介(人类速览)
12
30
  | 维度 | 能力 |
13
31
  |------|------|
14
32
  | 产出 | 单文件 HTML(可翻页、亮暗双主题、header 工具栏)+ 16:9 可编辑 PPTX(精导通道) |
@@ -94,10 +112,11 @@ top-ppt-html/
94
112
  ├─ assets/ # │ 且
95
113
  │ ├─ templates/ # 三份模式模板(presentation/research/architecture) │ 入库
96
114
  │ │ # + engine.css / ui.js(公共引擎/UI,sync_runtime 注入源)
97
- │ ├─ examples/ # 3 份黄金样张 + model(每模式 1;风格见 style-gallery) │
115
+ │ ├─ examples/ # 3 黄金样张 + showcase(HTML+model) │
98
116
  │ ├─ pptx-export.js # PPTX 预览运行时(含常量/schema 注入块) │
99
117
  │ ├─ style-gallery.html # 风格 × 模式 × 亮暗主题交互画廊 │
100
- │ └─ theme-overview*.png # 3 张主题参考图(整体=演示 / 研究 / 架构) │
118
+ │ ├─ theme-overview*.png # 3 张主题参考图(整体=演示 / 研究 / 架构) │
119
+ │ └─ showcase/ # README 用精简截图(完整集见 docs/showcase) │
101
120
  ├─ references/ # 规范(L1 常读 1 篇 + L2 按需;components/charts 已按族拆分)│ ├─ playbook.md # ★ L1 唯一常读入口:模式/页型/组合/图表/配色/校验 │
102
121
  │ ├─ components.md # 逻辑索引(§ 路由到下列物理文件) │
103
122
  │ ├─ components-atoms.md # §1–§15c 结构组件 │
@@ -167,7 +186,7 @@ python scripts/check_triggers.py
167
186
  | `references/chart-decision-tree.md` | L2 图表决策树 + 七种误用 |
168
187
  | `references/default-surface.md` | Mode A L1.5:12 页型 + 核图 8 + V1–V4 |
169
188
  | `references/presentation-craft.md` | Mode A L1.5 工艺(反截断 / 大气正式) |
170
- | `assets/examples/` | 3 份黄金样张(每模式 1) |
189
+ | `assets/examples/` | 3 份黄金样张(每模式 1)+ TopMind showcase |
171
190
  | `evals/trigger-queries.json` | description 触发正/负例;`check_triggers.py` |
172
191
  | `docs/archive/` | 历史规范 / 旧示例 |
173
192
 
@@ -4,7 +4,7 @@ description: "Use when 用户要做报告、演示、汇报、PPT、slides、dec
4
4
  license: MIT
5
5
  compatibility: "Python 3 stdlib for HTML generation; Node >=18 + pptxgenjs for PPTX; optional playwright for browser regression / theme captures."
6
6
  metadata:
7
- version: "0.1.6"
7
+ version: "0.1.8"
8
8
  author: TopMindspace
9
9
  ---
10
10
  # TopPPT HTML
@@ -25,17 +25,17 @@ metadata:
25
25
 
26
26
  ## Fast Mode · 快速模式(用户显式 opt-in)
27
27
 
28
- 触发词任一即进入(**跳过 Gate 0 与六项问询**):`快速模式` / `fast` / `直接生成` / `一键出稿` / `fast mode` / `少问一句`。
28
+ 触发词即进入(**跳过 Gate 0 与六项**):`快速模式` / `fast` / `直接生成` / `一键出稿` / `fast mode` / `少问一句`。
29
29
 
30
30
  | 参数 | 默认 | 推断 |
31
31
  |------|------|------|
32
- | mode | **B** | **路演/汇报/发布/演讲/demo/融资→A**;架构/拓扑→C;未点明→B |
32
+ | mode | **B** | **路演/汇报/发布/演讲/demo/融资/宣讲→A**;架构/拓扑→C;未点明→B |
33
33
  | style | B→mckinsey · A→business-blue · C→graphite-dark | |
34
34
  | theme | light(graphite→dark) | |
35
35
  | 篇幅 | A=10 / B=12 / C=6 | |
36
- | format | **html only**(默认;**仅当用户要 PPT / 交付含 PPTX 才开** B 通道) | |
36
+ | format | **html only**(**仅当用户要 PPT/PPTX 才开** B 通道) | |
37
37
 
38
- 流程:一行宣布「Fast 选用:…」→ **最小大纲**(`outline-design.md`「轻量最小集」)→ playbook §二轻量链(骨架→模型单写→回填→strict→`quality_gate --deliver`;**PPTX 显式 opt-in**)。路径轻量;末可附 `assets/style-gallery.html`。开场声明「已跳过参考图」。**标准模式**仍强制 Gate 0 + 六项。
38
+ **跳过** Gate 0/六项/完整大纲。**仍须** 最小大纲→模型单写→strict 0/0→`quality_gate --deliver`(反截断、图表多样性、Mode A craft 不降)。读面 L0+L1(A/Fast 可加 L1.5);代码一律 `extract_snippet`。一行宣布「Fast 选用:…」→ playbook §二轻量链;声明已跳过参考图。**标准模式**仍强制 Gate 0 + 六项。
39
39
 
40
40
  ## 唯一入口流程
41
41
 
@@ -121,7 +121,7 @@ metadata:
121
121
 
122
122
  ## 版本口径
123
123
 
124
- 包 semver(现 0.1.6)≠ 布局 schema 线(layout-constants / model-schema 的 version,现 `0.1`);patch 不抬 schema。
124
+ 包 semver(现 0.1.8)≠ 布局 schema 线(layout-constants / model-schema 的 version,现 `0.1`);patch 不抬 schema。
125
125
 
126
126
  ## 环境依赖
127
127
 
@@ -1,5 +1,5 @@
1
1
  # Codex / ChatGPT Skills UI metadata (optional)
2
2
  display_name: "TopPPT HTML"
3
- short_description: "Elegant, atmospheric formal decks for speeches — HTML + editable 16:9 PPTX."
3
+ short_description: "Elegant, atmospheric formal presentations for speeches — HTML + editable 16:9 PPTX."
4
4
  default_prompt: "Generate an elegant formal presentation or report as HTML (PPTX on request via B-channel)."
5
5
  allow_implicit_invocation: true
@@ -1976,7 +1976,7 @@ window.REPORT_MODEL = {
1976
1976
 
1977
1977
  /* __TOPPPT_RUNTIME_START__ */
1978
1978
  /* ══ PPTX 导出运行时(assets/pptx-export.js 的内联副本 · 由 scripts/sync_runtime.py 注入,禁止手改) ══ */
1979
- /* __TOPPPT_RUNTIME_SHA__:68c55206c33160af */
1979
+ /* __TOPPPT_RUNTIME_SHA__:77ca318e7a510e01 */
1980
1980
  /* ═══════════════════════════════════════════════════════════════════════════
1981
1981
  * TopPPT HTML· 浏览器端 PPTX 预览运行时
1982
1982
  * 零依赖、随报告单文件分发;OOXML 序列化器(仅供预览,页面不导出文件)。
@@ -2231,6 +2231,7 @@ function dataColors(style, theme) {
2231
2231
  var LAY = PT.layout || {};
2232
2232
  var CONTENT_TOP = (LAY.contentTop != null) ? LAY.contentTop : 2.5;
2233
2233
  var CONTENT_BOTTOM = (LAY.contentBottom != null) ? LAY.contentBottom : 6.9;
2234
+ var CONTENT_BOTTOM_NOTE = (LAY.contentBottomWithNote != null) ? LAY.contentBottomWithNote : 6.4;
2234
2235
 
2235
2236
  /* ── 自适应排版工具(与 build_pptx.js 同算法,保证两通道字号/换行一致) ── */
2236
2237
  function estLines(text, widthIn, fontPt) {
@@ -2305,9 +2306,12 @@ function fitRowH(avail, n, pref, floor) {
2305
2306
  return Math.max(lo, Math.min(pref, avail / Math.max(1, n)));
2306
2307
  }
2307
2308
  function chartBottom(hasSoWhat, hasFootnote) {
2308
- if (hasFootnote) return PT.exhibit.footnoteY - 0.12;
2309
- if (hasSoWhat) return PT.exhibit.soWhatY - 0.12;
2310
- return CONTENT_BOTTOM;
2309
+ /* D8: tightest of soWhat/footnote/contentBottomWithNote — no short-circuit */
2310
+ var bot = CONTENT_BOTTOM;
2311
+ if (hasSoWhat) bot = Math.min(bot, PT.exhibit.soWhatY - 0.12);
2312
+ if (hasFootnote) bot = Math.min(bot, PT.exhibit.footnoteY - 0.12);
2313
+ if (hasSoWhat || hasFootnote) bot = Math.min(bot, CONTENT_BOTTOM_NOTE);
2314
+ return bot;
2311
2315
  }
2312
2316
 
2313
2317
  /* ── XML 工具 ── */
@@ -3195,7 +3199,7 @@ function slidesOf(model, S) {
3195
3199
  head(ag, 'AGENDA', '报告大纲');
3196
3200
  var colN = items.length > 8 ? 2 : 1;
3197
3201
  var perCol = Math.ceil(items.length / colN) || 1;
3198
- var rowH = Math.min(1.05, (CONTENT_BOTTOM - CONTENT_TOP) / perCol);
3202
+ var rowH = Math.min(1.05, (CONTENT_BOTTOM - CONTENT_TOP - 0.25) / Math.max(1, perCol));
3199
3203
  var numSz = rowH >= 0.85 ? 30 : (rowH >= 0.65 ? 22 : 18);
3200
3204
  var tSz = rowH >= 0.85 ? 16 : 14, dSz = rowH >= 0.85 ? 12 : 11;
3201
3205
  items.forEach(function (it, i) {
@@ -3232,6 +3236,7 @@ function slidesOf(model, S) {
3232
3236
  flagY = CONTENT_BOTTOM - flagH;
3233
3237
  if (sec.footnote) flagY = Math.min(flagY, PT.exhibit.footnoteY - flagH - 0.06);
3234
3238
  if (sec.soWhat) flagY = Math.min(flagY, PT.exhibit.soWhatY - flagH - 0.06);
3239
+ if (sec.footnote || sec.soWhat) flagY = Math.min(flagY, CONTENT_BOTTOM_NOTE - flagH);
3235
3240
  bodyBottom = Math.min(bodyBottom, flagY - (_F.gap || 0.12));
3236
3241
  }
3237
3242
 
@@ -2375,7 +2375,7 @@ window.REPORT_MODEL = {
2375
2375
 
2376
2376
  /* __TOPPPT_RUNTIME_START__ */
2377
2377
  /* ══ PPTX 导出运行时(assets/pptx-export.js 的内联副本 · 由 scripts/sync_runtime.py 注入,禁止手改) ══ */
2378
- /* __TOPPPT_RUNTIME_SHA__:68c55206c33160af */
2378
+ /* __TOPPPT_RUNTIME_SHA__:77ca318e7a510e01 */
2379
2379
  /* ═══════════════════════════════════════════════════════════════════════════
2380
2380
  * TopPPT HTML· 浏览器端 PPTX 预览运行时
2381
2381
  * 零依赖、随报告单文件分发;OOXML 序列化器(仅供预览,页面不导出文件)。
@@ -2630,6 +2630,7 @@ function dataColors(style, theme) {
2630
2630
  var LAY = PT.layout || {};
2631
2631
  var CONTENT_TOP = (LAY.contentTop != null) ? LAY.contentTop : 2.5;
2632
2632
  var CONTENT_BOTTOM = (LAY.contentBottom != null) ? LAY.contentBottom : 6.9;
2633
+ var CONTENT_BOTTOM_NOTE = (LAY.contentBottomWithNote != null) ? LAY.contentBottomWithNote : 6.4;
2633
2634
 
2634
2635
  /* ── 自适应排版工具(与 build_pptx.js 同算法,保证两通道字号/换行一致) ── */
2635
2636
  function estLines(text, widthIn, fontPt) {
@@ -2704,9 +2705,12 @@ function fitRowH(avail, n, pref, floor) {
2704
2705
  return Math.max(lo, Math.min(pref, avail / Math.max(1, n)));
2705
2706
  }
2706
2707
  function chartBottom(hasSoWhat, hasFootnote) {
2707
- if (hasFootnote) return PT.exhibit.footnoteY - 0.12;
2708
- if (hasSoWhat) return PT.exhibit.soWhatY - 0.12;
2709
- return CONTENT_BOTTOM;
2708
+ /* D8: tightest of soWhat/footnote/contentBottomWithNote — no short-circuit */
2709
+ var bot = CONTENT_BOTTOM;
2710
+ if (hasSoWhat) bot = Math.min(bot, PT.exhibit.soWhatY - 0.12);
2711
+ if (hasFootnote) bot = Math.min(bot, PT.exhibit.footnoteY - 0.12);
2712
+ if (hasSoWhat || hasFootnote) bot = Math.min(bot, CONTENT_BOTTOM_NOTE);
2713
+ return bot;
2710
2714
  }
2711
2715
 
2712
2716
  /* ── XML 工具 ── */
@@ -3594,7 +3598,7 @@ function slidesOf(model, S) {
3594
3598
  head(ag, 'AGENDA', '报告大纲');
3595
3599
  var colN = items.length > 8 ? 2 : 1;
3596
3600
  var perCol = Math.ceil(items.length / colN) || 1;
3597
- var rowH = Math.min(1.05, (CONTENT_BOTTOM - CONTENT_TOP) / perCol);
3601
+ var rowH = Math.min(1.05, (CONTENT_BOTTOM - CONTENT_TOP - 0.25) / Math.max(1, perCol));
3598
3602
  var numSz = rowH >= 0.85 ? 30 : (rowH >= 0.65 ? 22 : 18);
3599
3603
  var tSz = rowH >= 0.85 ? 16 : 14, dSz = rowH >= 0.85 ? 12 : 11;
3600
3604
  items.forEach(function (it, i) {
@@ -3631,6 +3635,7 @@ function slidesOf(model, S) {
3631
3635
  flagY = CONTENT_BOTTOM - flagH;
3632
3636
  if (sec.footnote) flagY = Math.min(flagY, PT.exhibit.footnoteY - flagH - 0.06);
3633
3637
  if (sec.soWhat) flagY = Math.min(flagY, PT.exhibit.soWhatY - flagH - 0.06);
3638
+ if (sec.footnote || sec.soWhat) flagY = Math.min(flagY, CONTENT_BOTTOM_NOTE - flagH);
3634
3639
  bodyBottom = Math.min(bodyBottom, flagY - (_F.gap || 0.12));
3635
3640
  }
3636
3641
 
@@ -3577,7 +3577,7 @@ window.REPORT_MODEL = {
3577
3577
 
3578
3578
  /* __TOPPPT_RUNTIME_START__ */
3579
3579
  /* ══ PPTX 导出运行时(assets/pptx-export.js 的内联副本 · 由 scripts/sync_runtime.py 注入,禁止手改) ══ */
3580
- /* __TOPPPT_RUNTIME_SHA__:68c55206c33160af */
3580
+ /* __TOPPPT_RUNTIME_SHA__:77ca318e7a510e01 */
3581
3581
  /* ═══════════════════════════════════════════════════════════════════════════
3582
3582
  * TopPPT HTML· 浏览器端 PPTX 预览运行时
3583
3583
  * 零依赖、随报告单文件分发;OOXML 序列化器(仅供预览,页面不导出文件)。
@@ -3832,6 +3832,7 @@ function dataColors(style, theme) {
3832
3832
  var LAY = PT.layout || {};
3833
3833
  var CONTENT_TOP = (LAY.contentTop != null) ? LAY.contentTop : 2.5;
3834
3834
  var CONTENT_BOTTOM = (LAY.contentBottom != null) ? LAY.contentBottom : 6.9;
3835
+ var CONTENT_BOTTOM_NOTE = (LAY.contentBottomWithNote != null) ? LAY.contentBottomWithNote : 6.4;
3835
3836
 
3836
3837
  /* ── 自适应排版工具(与 build_pptx.js 同算法,保证两通道字号/换行一致) ── */
3837
3838
  function estLines(text, widthIn, fontPt) {
@@ -3906,9 +3907,12 @@ function fitRowH(avail, n, pref, floor) {
3906
3907
  return Math.max(lo, Math.min(pref, avail / Math.max(1, n)));
3907
3908
  }
3908
3909
  function chartBottom(hasSoWhat, hasFootnote) {
3909
- if (hasFootnote) return PT.exhibit.footnoteY - 0.12;
3910
- if (hasSoWhat) return PT.exhibit.soWhatY - 0.12;
3911
- return CONTENT_BOTTOM;
3910
+ /* D8: tightest of soWhat/footnote/contentBottomWithNote — no short-circuit */
3911
+ var bot = CONTENT_BOTTOM;
3912
+ if (hasSoWhat) bot = Math.min(bot, PT.exhibit.soWhatY - 0.12);
3913
+ if (hasFootnote) bot = Math.min(bot, PT.exhibit.footnoteY - 0.12);
3914
+ if (hasSoWhat || hasFootnote) bot = Math.min(bot, CONTENT_BOTTOM_NOTE);
3915
+ return bot;
3912
3916
  }
3913
3917
 
3914
3918
  /* ── XML 工具 ── */
@@ -4796,7 +4800,7 @@ function slidesOf(model, S) {
4796
4800
  head(ag, 'AGENDA', '报告大纲');
4797
4801
  var colN = items.length > 8 ? 2 : 1;
4798
4802
  var perCol = Math.ceil(items.length / colN) || 1;
4799
- var rowH = Math.min(1.05, (CONTENT_BOTTOM - CONTENT_TOP) / perCol);
4803
+ var rowH = Math.min(1.05, (CONTENT_BOTTOM - CONTENT_TOP - 0.25) / Math.max(1, perCol));
4800
4804
  var numSz = rowH >= 0.85 ? 30 : (rowH >= 0.65 ? 22 : 18);
4801
4805
  var tSz = rowH >= 0.85 ? 16 : 14, dSz = rowH >= 0.85 ? 12 : 11;
4802
4806
  items.forEach(function (it, i) {
@@ -4833,6 +4837,7 @@ function slidesOf(model, S) {
4833
4837
  flagY = CONTENT_BOTTOM - flagH;
4834
4838
  if (sec.footnote) flagY = Math.min(flagY, PT.exhibit.footnoteY - flagH - 0.06);
4835
4839
  if (sec.soWhat) flagY = Math.min(flagY, PT.exhibit.soWhatY - flagH - 0.06);
4840
+ if (sec.footnote || sec.soWhat) flagY = Math.min(flagY, CONTENT_BOTTOM_NOTE - flagH);
4836
4841
  bodyBottom = Math.min(bodyBottom, flagY - (_F.gap || 0.12));
4837
4842
  }
4838
4843