@topmindspace/tms-skills 0.1.0

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 (99) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/LICENSE +21 -0
  3. package/README.md +102 -0
  4. package/bin/tms-skills.js +160 -0
  5. package/package.json +48 -0
  6. package/top-ppt-html/README.md +254 -0
  7. package/top-ppt-html/SKILL.md +111 -0
  8. package/top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.html +3926 -0
  9. package/top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.model.json +168 -0
  10. package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.html +3926 -0
  11. package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.model.json +168 -0
  12. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.html +4325 -0
  13. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.model.json +321 -0
  14. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.html +4325 -0
  15. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.model.json +321 -0
  16. package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.html +4325 -0
  17. package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.model.json +321 -0
  18. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.html +5527 -0
  19. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.model.json +914 -0
  20. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.html +5527 -0
  21. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.model.json +914 -0
  22. package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.html +5527 -0
  23. package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.model.json +914 -0
  24. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.html +5527 -0
  25. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.model.json +914 -0
  26. package/top-ppt-html/assets/pptx-export.js +1944 -0
  27. package/top-ppt-html/assets/style-gallery.html +589 -0
  28. package/top-ppt-html/assets/templates/architecture.html +3728 -0
  29. package/top-ppt-html/assets/templates/engine.css +840 -0
  30. package/top-ppt-html/assets/templates/presentation.html +3738 -0
  31. package/top-ppt-html/assets/templates/research.html +4017 -0
  32. package/top-ppt-html/assets/templates/ui.js +520 -0
  33. package/top-ppt-html/assets/theme-overview-architecture.png +0 -0
  34. package/top-ppt-html/assets/theme-overview-presentation.png +0 -0
  35. package/top-ppt-html/assets/theme-overview-research.png +0 -0
  36. package/top-ppt-html/assets/theme-overview.png +0 -0
  37. package/top-ppt-html/evals/prompts.csv +15 -0
  38. package/top-ppt-html/evals/rubric.schema.json +25 -0
  39. package/top-ppt-html/evals/run_evals.py +220 -0
  40. package/top-ppt-html/evals/trace.example.json +16 -0
  41. package/top-ppt-html/package.json +35 -0
  42. package/top-ppt-html/references/charts-basic.md +624 -0
  43. package/top-ppt-html/references/charts-discipline.md +108 -0
  44. package/top-ppt-html/references/charts-extended.md +482 -0
  45. package/top-ppt-html/references/charts.md +28 -0
  46. package/top-ppt-html/references/components-atoms.md +624 -0
  47. package/top-ppt-html/references/components.md +30 -0
  48. package/top-ppt-html/references/content-rules.md +490 -0
  49. package/top-ppt-html/references/design-system-engine.md +235 -0
  50. package/top-ppt-html/references/design-system.md +478 -0
  51. package/top-ppt-html/references/failure-modes.md +214 -0
  52. package/top-ppt-html/references/high-fidelity.md +127 -0
  53. package/top-ppt-html/references/icons.md +397 -0
  54. package/top-ppt-html/references/industry-benchmark.md +105 -0
  55. package/top-ppt-html/references/infographics-stats.md +308 -0
  56. package/top-ppt-html/references/infographics-structure.md +226 -0
  57. package/top-ppt-html/references/infographics.md +43 -0
  58. package/top-ppt-html/references/layout-grammar.md +315 -0
  59. package/top-ppt-html/references/layouts-architecture.md +108 -0
  60. package/top-ppt-html/references/layouts-combo.md +600 -0
  61. package/top-ppt-html/references/layouts-research.md +160 -0
  62. package/top-ppt-html/references/modes.md +254 -0
  63. package/top-ppt-html/references/outline-design.md +275 -0
  64. package/top-ppt-html/references/playbook.md +266 -0
  65. package/top-ppt-html/references/pptx-export.md +209 -0
  66. package/top-ppt-html/references/reform-plan.md +252 -0
  67. package/top-ppt-html/references/styles.md +370 -0
  68. package/top-ppt-html/references/tech-design.md +138 -0
  69. package/top-ppt-html/scripts/audit_css.py +109 -0
  70. package/top-ppt-html/scripts/audit_docs.py +176 -0
  71. package/top-ppt-html/scripts/audit_skill.py +220 -0
  72. package/top-ppt-html/scripts/audit_styles.py +351 -0
  73. package/top-ppt-html/scripts/build_examples.py +2276 -0
  74. package/top-ppt-html/scripts/build_pptx.js +2380 -0
  75. package/top-ppt-html/scripts/capture_theme_overview.js +78 -0
  76. package/top-ppt-html/scripts/checks_html.py +127 -0
  77. package/top-ppt-html/scripts/cross_verify.py +294 -0
  78. package/top-ppt-html/scripts/env_probe.py +158 -0
  79. package/top-ppt-html/scripts/extract_model.py +210 -0
  80. package/top-ppt-html/scripts/extract_snippet.py +374 -0
  81. package/top-ppt-html/scripts/gen_channel_a.js +214 -0
  82. package/top-ppt-html/scripts/layout-constants.json +3377 -0
  83. package/top-ppt-html/scripts/layout_slots.json +830 -0
  84. package/top-ppt-html/scripts/lib_layout_regions.js +412 -0
  85. package/top-ppt-html/scripts/measure_height.py +178 -0
  86. package/top-ppt-html/scripts/model-schema.json +547 -0
  87. package/top-ppt-html/scripts/negative_tests.py +307 -0
  88. package/top-ppt-html/scripts/package_skill.py +291 -0
  89. package/top-ppt-html/scripts/prepare_images.py +341 -0
  90. package/top-ppt-html/scripts/probe_image_export.py +188 -0
  91. package/top-ppt-html/scripts/quality_gate.py +301 -0
  92. package/top-ppt-html/scripts/regression.py +308 -0
  93. package/top-ppt-html/scripts/render_compare.py +275 -0
  94. package/top-ppt-html/scripts/render_from_model.py +698 -0
  95. package/top-ppt-html/scripts/scaffold_report.py +1054 -0
  96. package/top-ppt-html/scripts/section-file-map.json +105 -0
  97. package/top-ppt-html/scripts/sync_runtime.py +662 -0
  98. package/top-ppt-html/scripts/validate_pptx.py +1510 -0
  99. package/top-ppt-html/scripts/validate_report.py +1456 -0
@@ -0,0 +1,547 @@
1
+ {
2
+ "$comment": "TopPPT HTML · REPORT_MODEL DSL schema 单源。双端同源:scripts/sync_runtime.py 把本文件注入 assets/pptx-export.js 的 __TOPPPT_SCHEMA__ 标记块(浏览器端 validateModel);scripts/extract_model.py 直接读本文件做本地校验。禁止在两端手写副本。字段路径约定:'a.b:c' 中 ':array' 要求非空数组,':str' 要求非空字符串,无后缀仅做真值检查;'anyof:a|b:c' 表示「任一满足即通过」(用于素材图片页:src / items / placeholder 三选一)。pageTypes[].modes = 该页型允许的模式(越界仅告警,不阻断)。commonSectionFields 为任意页型可选的通用字段(flags = 待核实标注清单,image = 素材图片/配图占位)。chartTypes = 图表类型白名单(起含原生与形状两条通道,通道归属见 scripts/layout-constants.json 的 charts.registry)。图片规格与占位约定见同文件 imageSpec。",
3
+ "version": "0.1",
4
+ "modes": [
5
+ "presentation",
6
+ "research",
7
+ "architecture"
8
+ ],
9
+ "model": {
10
+ "required": [
11
+ "title",
12
+ "sections:array",
13
+ "closing.title",
14
+ "closing.points:array"
15
+ ],
16
+ "optional": [
17
+ "mode",
18
+ "style",
19
+ "theme",
20
+ "subtitle",
21
+ "meta",
22
+ "agenda:array"
23
+ ],
24
+ "agendaMin": {
25
+ "presentation": 3,
26
+ "research": 3,
27
+ "architecture": 0
28
+ },
29
+ "sectionsMin": 1,
30
+ "sectionsRecommended": 3,
31
+ "agendaComfortMax": 16
32
+ },
33
+ "commonSectionFields": [
34
+ "eyebrow",
35
+ "title",
36
+ "lead",
37
+ "soWhat",
38
+ "footnote",
39
+ "flags",
40
+ "image",
41
+ "exhibitNo",
42
+ "layoutPreset"
43
+ ],
44
+ "flagsHint": "flags = 待核实/待二次修改条目字符串数组(如 '2027 增速 xx%(口径未定)');渲染为 accent 强调色标注行,提示用户核对。",
45
+ "imageHint": "image = 素材图片/配图占位对象。三选一必填:src(用户图,data: 内联或相对路径,零外链铁律禁 http(s))|items(多图版式:grid/compare/wall,元素 {src?, alt?, caption?, placeholder?})|placeholder:true(无图时出配图占位,原生形状渲染、pictures 不增)。其余可选:layout(full/half/bleed/grid/compare/wall,见 layout-constants.json imageSpec.layouts)、fit(cover 默认 / contain)、caption、alt、hint、ratio。",
46
+ "imageLayoutHint": "layout 与 HTML 版式对应:full=版心全宽图|half=左图右注(points 为右栏注解)|bleed=通栏出血|grid=多图网格(items 2/3/4/6 张)|compare=双图 A/B 对比(items 2 张)|wall=Logo 墙(items 3–12 张小图)。占位符标签文本由双引擎按 imageSpec 拼同一串,保证 A/B 通道逐页文本一致。",
47
+ "chartTypes": [
48
+ "bar",
49
+ "hbar",
50
+ "stack",
51
+ "stackline",
52
+ "line",
53
+ "dualline",
54
+ "area",
55
+ "donut",
56
+ "multidonut",
57
+ "pie",
58
+ "radar",
59
+ "scatter",
60
+ "bubble",
61
+ "waterfall",
62
+ "gauge",
63
+ "pareto",
64
+ "funnel",
65
+ "gantt",
66
+ "vsbar",
67
+ "progress",
68
+ "sparkline",
69
+ "slope",
70
+ "dumbbell",
71
+ "lollipop",
72
+ "dotplot",
73
+ "bulletchart",
74
+ "waffle",
75
+ "radialbar",
76
+ "rose",
77
+ "candlestick"
78
+ ],
79
+ "chartTypesHint": "chart.type 可取值 = 本表(30 类:16 原生 + 14 形状还原)。其余 6 类复杂信息图(sankey/treemap/boxplot/network/marimekko/streamgraph)是**专属页型**而非 chart.type——它们要按列/段/节点等结构化载荷表达,故走 sections[].type。不变量:charts.registry.types == chartTypes ∪ 上述 6 类页型(sync_runtime.py 校验)。",
80
+ "chartDataTable": {
81
+ "$comment": "数据表策略:图表页的数据可追溯开关。notes = 数据写入演讲者备注(默认,零版面占用);inline = 页内附原生小字号表格;appendix = 自动生成附录数据页(原生表格);off = 不附(仅 sparkline 这类纯装饰微图允许)。pptx=shape 的非原生图表至少 notes。",
82
+ "enum": [
83
+ "notes",
84
+ "inline",
85
+ "appendix",
86
+ "off"
87
+ ],
88
+ "default": "notes",
89
+ "rule": "非原生图表(registry.pptx=shape)的 dataTable 不得为 off;缺失时按 registry 默认值补齐。"
90
+ },
91
+ "pageTypes": {
92
+ "points": {
93
+ "label": "要点列表页",
94
+ "modes": [
95
+ "presentation",
96
+ "research",
97
+ "architecture"
98
+ ],
99
+ "required": [
100
+ "points:array"
101
+ ],
102
+ "optional": [
103
+ "metrics:array"
104
+ ]
105
+ },
106
+ "metrics": {
107
+ "label": "指标带页(4–6 个核心数字)",
108
+ "modes": [
109
+ "presentation",
110
+ "research"
111
+ ],
112
+ "required": [
113
+ "metrics:array"
114
+ ]
115
+ },
116
+ "kpi": {
117
+ "label": "大数指标页(hero 大数字 + 支撑指标行)",
118
+ "modes": [
119
+ "presentation",
120
+ "research"
121
+ ],
122
+ "required": [
123
+ "hero:array"
124
+ ],
125
+ "optional": [
126
+ "metrics:array"
127
+ ]
128
+ },
129
+ "table": {
130
+ "label": "对比表页",
131
+ "modes": [
132
+ "presentation",
133
+ "research",
134
+ "architecture"
135
+ ],
136
+ "required": [
137
+ "table.head:array",
138
+ "table.rows:array"
139
+ ],
140
+ "optional": [
141
+ "table.colW:array"
142
+ ]
143
+ },
144
+ "timeline": {
145
+ "label": "时间线 / 路线页",
146
+ "modes": [
147
+ "presentation",
148
+ "research"
149
+ ],
150
+ "required": [
151
+ "phases:array"
152
+ ]
153
+ },
154
+ "steps": {
155
+ "label": "步骤条页(N 步横排 + 箭头,可分组)",
156
+ "modes": [
157
+ "presentation",
158
+ "research",
159
+ "architecture"
160
+ ],
161
+ "required": [
162
+ "steps:array"
163
+ ],
164
+ "optional": [
165
+ "groups:array",
166
+ "note"
167
+ ]
168
+ },
169
+ "bar": {
170
+ "label": "图表页(chart.type 见 chartTypes;native 通道走原生数据图表,shape 通道走高保真形状还原 + 数据表)",
171
+ "modes": [
172
+ "presentation",
173
+ "research"
174
+ ],
175
+ "required": [
176
+ "chart.labels:array",
177
+ "chart.values:array"
178
+ ],
179
+ "optional": [
180
+ "chart.type",
181
+ "chart.series:array",
182
+ "chart.points:array",
183
+ "chart.max",
184
+ "chart.unit",
185
+ "chart.colors:array",
186
+ "chart.start:array",
187
+ "chart.target:array",
188
+ "chart.dataTable",
189
+ "note"
190
+ ]
191
+ },
192
+ "donut": {
193
+ "label": "环形图页(原生 pie 楔形 + 图例)",
194
+ "modes": [
195
+ "presentation",
196
+ "research"
197
+ ],
198
+ "required": [
199
+ "chart.labels:array",
200
+ "chart.values:array"
201
+ ],
202
+ "optional": [
203
+ "chart.unit",
204
+ "chart.centerLabel",
205
+ "chart.colors:array",
206
+ "chart.dataTable",
207
+ "note"
208
+ ]
209
+ },
210
+ "heatmap": {
211
+ "label": "热力矩阵页(行 × 列 + 强度色阶)",
212
+ "modes": [
213
+ "presentation",
214
+ "research"
215
+ ],
216
+ "required": [
217
+ "rowHeads:array",
218
+ "colHeads:array",
219
+ "cells:array"
220
+ ],
221
+ "optional": [
222
+ "unit",
223
+ "scaleLabel:array",
224
+ "note"
225
+ ]
226
+ },
227
+ "bullet": {
228
+ "label": "达成对比页(实际 vs 目标条)",
229
+ "modes": [
230
+ "presentation",
231
+ "research"
232
+ ],
233
+ "required": [
234
+ "items:array"
235
+ ],
236
+ "optional": [
237
+ "unit",
238
+ "max",
239
+ "note"
240
+ ]
241
+ },
242
+ "pyramid": {
243
+ "label": "金字塔页(层级递进,顶层最窄)",
244
+ "modes": [
245
+ "presentation",
246
+ "research",
247
+ "architecture"
248
+ ],
249
+ "required": [
250
+ "levels:array"
251
+ ],
252
+ "optional": [
253
+ "note"
254
+ ]
255
+ },
256
+ "image": {
257
+ "label": "素材图片页(full/half/bleed/grid/compare/wall,效果与位置锁定;支持配图占位)",
258
+ "modes": [
259
+ "presentation",
260
+ "research",
261
+ "architecture"
262
+ ],
263
+ "required": [
264
+ "anyof:image.src:str|image.items:array|image.placeholder"
265
+ ],
266
+ "optional": [
267
+ "image.caption",
268
+ "image.alt",
269
+ "image.layout",
270
+ "image.fit",
271
+ "image.ratio",
272
+ "image.hint",
273
+ "points:array",
274
+ "note"
275
+ ]
276
+ },
277
+ "cards": {
278
+ "label": "卡片网格页(cards 元素须为 {title, points:[[k,v]…]},不接受元组)",
279
+ "modes": [
280
+ "presentation",
281
+ "research"
282
+ ],
283
+ "required": [
284
+ "cards:array"
285
+ ],
286
+ "optional": [
287
+ "columns"
288
+ ]
289
+ },
290
+ "split": {
291
+ "label": "双区组合页(left / right 各可为 要点|图表|表格|图片:type = points(默认)| table | image | 图表类型名;图表/表格字段直接挂在对应侧)",
292
+ "modes": [
293
+ "presentation",
294
+ "research"
295
+ ],
296
+ "required": [
297
+ "anyof:left.points:array|left.type:str"
298
+ ],
299
+ "optional": [
300
+ "left.cap",
301
+ "left.image",
302
+ "left.labels:array",
303
+ "left.values:array",
304
+ "left.series:array",
305
+ "left.points:array",
306
+ "left.max",
307
+ "left.unit",
308
+ "left.colors:array",
309
+ "left.dataTable",
310
+ "left.head:array",
311
+ "left.rows:array",
312
+ "left.colW:array",
313
+ "right.type",
314
+ "right.cap",
315
+ "right.image",
316
+ "right.labels:array",
317
+ "right.values:array",
318
+ "right.series:array",
319
+ "right.points:array",
320
+ "right.max",
321
+ "right.unit",
322
+ "right.colors:array",
323
+ "right.dataTable",
324
+ "right.head:array",
325
+ "right.rows:array",
326
+ "right.colW:array"
327
+ ]
328
+ },
329
+ "comparison": {
330
+ "label": "对比页(左右双栏 + 可选结论条)",
331
+ "modes": [
332
+ "presentation",
333
+ "research"
334
+ ],
335
+ "required": [
336
+ "left.title",
337
+ "left.points:array",
338
+ "right.title",
339
+ "right.points:array"
340
+ ],
341
+ "optional": [
342
+ "verdict"
343
+ ]
344
+ },
345
+ "quote": {
346
+ "label": "引用 / 金句页(深色全幅)",
347
+ "modes": [
348
+ "presentation",
349
+ "research"
350
+ ],
351
+ "required": [
352
+ "quote",
353
+ "author"
354
+ ],
355
+ "optional": [
356
+ "context"
357
+ ]
358
+ },
359
+ "diagram": {
360
+ "label": "分层架构页(architecture 模式走全幅几何)",
361
+ "modes": [
362
+ "presentation",
363
+ "research",
364
+ "architecture"
365
+ ],
366
+ "required": [
367
+ "layers:array"
368
+ ],
369
+ "optional": [
370
+ "legend:array"
371
+ ]
372
+ },
373
+ "exhibit": {
374
+ "label": "Exhibit 编号图表页(research R2)",
375
+ "modes": [
376
+ "research"
377
+ ],
378
+ "required": [
379
+ "chart.labels:array",
380
+ "chart.values:array"
381
+ ],
382
+ "optional": [
383
+ "exhibitNo",
384
+ "chart.type",
385
+ "chart.series:array",
386
+ "chart.points:array",
387
+ "chart.max",
388
+ "chart.unit",
389
+ "chart.colors:array",
390
+ "chart.dataTable",
391
+ "note"
392
+ ]
393
+ },
394
+ "twocol": {
395
+ "label": "双栏论证页(research R1)",
396
+ "modes": [
397
+ "research"
398
+ ],
399
+ "required": [
400
+ "paragraphs:array"
401
+ ]
402
+ },
403
+ "threecol": {
404
+ "label": "三栏证据页(research R6)",
405
+ "modes": [
406
+ "research"
407
+ ],
408
+ "required": [
409
+ "paragraphs:array"
410
+ ]
411
+ },
412
+ "halftable": {
413
+ "label": "半表半图页(research R7)",
414
+ "modes": [
415
+ "research"
416
+ ],
417
+ "required": [
418
+ "table.head:array",
419
+ "table.rows:array",
420
+ "chart.labels:array",
421
+ "chart.values:array"
422
+ ],
423
+ "optional": [
424
+ "table.colW:array",
425
+ "chart.type",
426
+ "chart.series:array",
427
+ "chart.points:array",
428
+ "chart.max",
429
+ "chart.unit",
430
+ "chart.colors:array",
431
+ "chart.dataTable",
432
+ "note"
433
+ ]
434
+ },
435
+ "matrix": {
436
+ "label": "矩阵图页(research R8)",
437
+ "modes": [
438
+ "research"
439
+ ],
440
+ "required": [
441
+ "rowHeads:array",
442
+ "colHeads:array",
443
+ "cells:array"
444
+ ]
445
+ },
446
+ "lane": {
447
+ "label": "泳道页(architecture A2)",
448
+ "modes": [
449
+ "architecture"
450
+ ],
451
+ "required": [
452
+ "lanes:array"
453
+ ]
454
+ },
455
+ "sankey": {
456
+ "label": "桑基图页(节点-流带,流向与流量)",
457
+ "modes": [
458
+ "research",
459
+ "architecture"
460
+ ],
461
+ "required": [
462
+ "flows:array"
463
+ ],
464
+ "optional": [
465
+ "unit",
466
+ "chart.dataTable",
467
+ "note"
468
+ ]
469
+ },
470
+ "treemap": {
471
+ "label": "树图页(面积编码的层级构成)",
472
+ "modes": [
473
+ "research",
474
+ "architecture"
475
+ ],
476
+ "required": [
477
+ "items:array"
478
+ ],
479
+ "optional": [
480
+ "unit",
481
+ "chart.dataTable",
482
+ "note"
483
+ ]
484
+ },
485
+ "boxplot": {
486
+ "label": "箱线图页(分布对比:min/q1/median/q3/max)",
487
+ "modes": [
488
+ "research",
489
+ "architecture"
490
+ ],
491
+ "required": [
492
+ "groups:array"
493
+ ],
494
+ "optional": [
495
+ "unit",
496
+ "chart.dataTable",
497
+ "note"
498
+ ]
499
+ },
500
+ "network": {
501
+ "label": "关系网络页(节点-边拓扑)",
502
+ "modes": [
503
+ "research",
504
+ "architecture"
505
+ ],
506
+ "required": [
507
+ "nodes:array",
508
+ "edges:array"
509
+ ],
510
+ "optional": [
511
+ "chart.dataTable",
512
+ "note"
513
+ ]
514
+ },
515
+ "marimekko": {
516
+ "label": "马赛克图页(列宽 × 列高双重编码)",
517
+ "modes": [
518
+ "research",
519
+ "architecture"
520
+ ],
521
+ "required": [
522
+ "cols:array",
523
+ "cells:array"
524
+ ],
525
+ "optional": [
526
+ "unit",
527
+ "chart.dataTable",
528
+ "note"
529
+ ]
530
+ },
531
+ "streamgraph": {
532
+ "label": "流带图页(时间上的构成演变)",
533
+ "modes": [
534
+ "research",
535
+ "architecture"
536
+ ],
537
+ "required": [
538
+ "series:array"
539
+ ],
540
+ "optional": [
541
+ "labels:array",
542
+ "chart.dataTable",
543
+ "note"
544
+ ]
545
+ }
546
+ }
547
+ }