skill-forge-hub 1.0.4 → 1.0.5
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 +18 -0
- package/README.md +82 -150
- package/annual-report/SKILL.md +23 -3
- package/annual-report/resources/data-collection.md +20 -4
- package/annual-report/resources/disk-and-html.md +3 -3
- package/annual-report/resources/reference.html +31 -10
- package/annual-report/resources/usage-guide.md +8 -0
- package/annual-report/user-config.md +5 -5
- package/article-to-html/SKILL.md +26 -7
- package/article-to-html/design-system.md +9 -3
- package/article-to-html/resources/reference.html +631 -0
- package/article-to-html/resources/usage-guide.md +9 -1
- package/article-to-html/user-config.md +6 -3
- package/cli.js +2 -2
- package/daily-report/SKILL.md +23 -3
- package/daily-report/resources/content-rules.md +1 -1
- package/daily-report/resources/data-collection.md +24 -4
- package/daily-report/resources/disk-and-html.md +2 -2
- package/daily-report/resources/reference.html +24 -3
- package/daily-report/resources/usage-guide.md +8 -0
- package/daily-report/user-config.md +5 -5
- package/deck-stage/SKILL.md +15 -4
- package/deck-stage/resources/cover-template.html +3 -3
- package/deck-stage/resources/data-schema.md +11 -1
- package/deck-stage/resources/pptx-builder.js +1 -1
- package/deck-stage/resources/usage-guide.md +9 -2
- package/docs/architecture.md +89 -0
- package/docs/images/article-to-html.png +0 -0
- package/docs/images/daily-report.png +0 -0
- package/docs/images/deck-stage.png +0 -0
- package/docs/images/magic-deck.png +0 -0
- package/docs/images/meeting-minutes.png +0 -0
- package/docs/images/prompt-pouch.png +0 -0
- package/docs/install.md +71 -0
- package/magic-deck/SKILL.md +23 -8
- package/magic-deck/resources/content-guide.md +5 -4
- package/magic-deck/resources/deck-spec.md +18 -11
- package/magic-deck/resources/reference.html +110 -32
- package/magic-deck/resources/usage-guide.md +10 -2
- package/magic-deck/user-config.md +4 -4
- package/meeting-minutes/SKILL.md +51 -0
- package/meeting-minutes/resources/content-rules.md +57 -0
- package/meeting-minutes/resources/disk-and-html.md +26 -0
- package/meeting-minutes/resources/meeting-type-dictionary.md +24 -0
- package/meeting-minutes/resources/reference.html +436 -0
- package/meeting-minutes/resources/usage-guide.md +63 -0
- package/meeting-minutes/user-config.md +56 -0
- package/meta-forge/SKILL.md +6 -6
- package/meta-forge/resources/forge-rules.md +55 -10
- package/meta-forge/resources/usage-guide.md +7 -3
- package/meta-forge/user-config.md +1 -1
- package/monthly-report/SKILL.md +62 -0
- package/monthly-report/resources/content-rules.md +40 -0
- package/monthly-report/resources/data-collection.md +44 -0
- package/monthly-report/resources/date-parsing.md +18 -0
- package/monthly-report/resources/disk-and-html.md +29 -0
- package/monthly-report/resources/industry-dictionary.md +21 -0
- package/monthly-report/resources/reference.html +531 -0
- package/monthly-report/resources/usage-guide.md +75 -0
- package/monthly-report/user-config.md +53 -0
- package/package.json +9 -2
- package/prompt-pouch/SKILL.md +17 -2
- package/prompt-pouch/resources/data-format.md +1 -1
- package/prompt-pouch/resources/reference.html +56 -24
- package/prompt-pouch/resources/usage-guide.md +10 -3
- package/quarterly-report/SKILL.md +63 -0
- package/quarterly-report/resources/content-rules.md +42 -0
- package/quarterly-report/resources/data-collection.md +46 -0
- package/quarterly-report/resources/date-parsing.md +19 -0
- package/quarterly-report/resources/disk-and-html.md +22 -0
- package/quarterly-report/resources/industry-dictionary.md +21 -0
- package/quarterly-report/resources/reference.html +509 -0
- package/quarterly-report/resources/usage-guide.md +76 -0
- package/quarterly-report/user-config.md +53 -0
- package/spec-doc2spec/SKILL.md +21 -22
- package/spec-doc2spec/resources/checklist.md +7 -0
- package/spec-doc2spec/resources/images.md +14 -5
- package/spec-doc2spec/resources/structure.md +19 -10
- package/spec-doc2spec/resources/usage-guide.md +10 -8
- package/spec-doc2spec/user-config.md +2 -2
- package/spec-spec2doc/SKILL.md +4 -4
- package/spec-spec2doc/resources/checklist.md +6 -0
- package/spec-spec2doc/resources/pdf-path.md +1 -0
- package/spec-spec2doc/resources/usage-guide.md +2 -2
- package/template/SKILL.md +1 -1
- package/weekly-report/SKILL.md +23 -3
- package/weekly-report/resources/content-rules.md +1 -1
- package/weekly-report/resources/data-collection.md +24 -4
- package/weekly-report/resources/disk-and-html.md +2 -2
- package/weekly-report/resources/reference.html +24 -3
- package/weekly-report/resources/usage-guide.md +8 -0
- package/weekly-report/user-config.md +5 -5
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<meta name="sf-template" content="magic-deck@2">
|
|
7
|
+
<meta name="deck-id" content="REF-DECK-0000">
|
|
6
8
|
<title>Reference 骨架 — magic-deck 定稿样例</title>
|
|
7
9
|
<style>
|
|
8
10
|
/* ══════════ 0. 基础 ══════════ */
|
|
@@ -405,6 +407,13 @@ button,select,input{ font-family:inherit; }
|
|
|
405
407
|
[data-template="nature"] .bignum{ border-radius:50% 50% 8px 8px; }
|
|
406
408
|
[data-template="nature"] .toc-item{ border-radius:18px 6px 18px 6px; }
|
|
407
409
|
[data-template="nature"] .card:hover{ transform:translateY(-4px) rotate(-.6deg); }
|
|
410
|
+
/* T17 stats 统计图表:KPI 大数字顶横排 + 双线分区 + 图表框架,数据看板 */
|
|
411
|
+
[data-template="stats"] .s-head{ border-bottom:2px solid var(--accent); padding-bottom:14px; }
|
|
412
|
+
[data-template="stats"] .s-head h2{ font-size:30px; }
|
|
413
|
+
[data-template="stats"] .bignum{ border:none; border-top:3px solid var(--accent); border-radius:0 0 10px 10px; }
|
|
414
|
+
[data-template="stats"] .bignum b{ font-size:56px; }
|
|
415
|
+
[data-template="stats"] .chart-card{ border:1px solid var(--accent); }
|
|
416
|
+
[data-template="stats"] .card{ border-radius:8px; }
|
|
408
417
|
|
|
409
418
|
/* ══════════ 6. 操作元素(固定样式) ══════════ */
|
|
410
419
|
.toolbar{ position:fixed; right:18px; top:14px; z-index:10;
|
|
@@ -472,7 +481,7 @@ body:hover .nav{ opacity:1; }
|
|
|
472
481
|
.cp-foot .tbtn{ border:1px solid var(--border); background:var(--tag-bg); cursor:pointer; }
|
|
473
482
|
.cp-foot .tbtn.primary{ background:var(--accent); color:var(--bg); border-color:transparent; }
|
|
474
483
|
/* ═══ 模板应用面板 ═══ */
|
|
475
|
-
.tpl-panel{ width:
|
|
484
|
+
.tpl-panel{ width:1060px; max-width:96vw; max-height:90vh; display:flex; flex-direction:column; padding:24px 26px;
|
|
476
485
|
border-radius:16px; background:var(--panel-solid); border:1px solid var(--border); color:var(--text); }
|
|
477
486
|
.tpl-panel h3{ font-size:18px; margin:0; }
|
|
478
487
|
.tpl-tabs{ display:flex; gap:8px; }
|
|
@@ -483,7 +492,7 @@ body:hover .nav{ opacity:1; }
|
|
|
483
492
|
.tpl-cat{ grid-column:1/-1; font-size:11px; color:var(--muted); letter-spacing:2px; margin:6px 0 -4px; }
|
|
484
493
|
.tpl-card .nm .pg{ font-style:normal; font-size:10px; font-weight:400; color:var(--muted); margin-left:6px; letter-spacing:.5px; }
|
|
485
494
|
.tpl-head-note{ font-size:12px; color:var(--muted); }
|
|
486
|
-
.tpl-cards{ display:grid; grid-template-columns:repeat(
|
|
495
|
+
.tpl-cards{ display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin:14px 0 12px; overflow-y:auto; max-height:64vh; padding:2px; }
|
|
487
496
|
.tpl-card{ display:flex; flex-direction:column; align-items:stretch; gap:7px; padding:9px; border-radius:12px;
|
|
488
497
|
background:var(--panel); border:1px solid var(--border); cursor:pointer; transition:all .15s ease; text-align:left; }
|
|
489
498
|
.tpl-card:hover{ border-color:var(--accent); }
|
|
@@ -682,6 +691,8 @@ body:hover .nav{ opacity:1; }
|
|
|
682
691
|
/* ── L5 标题文字动画(运行时拆分 h1/h2/h3/.s-title 为 span,复用入场机制)── */
|
|
683
692
|
.tchar, .tword{ display:inline-block; }
|
|
684
693
|
.tline{ display:block; }
|
|
694
|
+
/* 渐变字兜底:拆分 span 不继承 background,补回渐变剪裁防止标题变透明只剩辉光 */
|
|
695
|
+
.s-title .tchar, .s-title .tword, .s-title .tline{ background:inherit; -webkit-background-clip:text; background-clip:text; }
|
|
685
696
|
|
|
686
697
|
/* ── 入场开关(deck[data-anim="off"] 全部停用)── */
|
|
687
698
|
.deck[data-anim="off"] .slide [data-anim]{ opacity:1 !important; animation:none !important; }
|
|
@@ -783,8 +794,8 @@ body:hover .nav{ opacity:1; }
|
|
|
783
794
|
</div>
|
|
784
795
|
<div class="toolbar">
|
|
785
796
|
<div class="group">
|
|
786
|
-
<button class="tbtn" id="btnTemplate" title="
|
|
787
|
-
<button class="tbtn" id="btnTheme" title="
|
|
797
|
+
<button class="tbtn" id="btnTemplate" title="十七套版式模板:可应用到全部页面 / 仅本页 / 勾选页面,支持预览本页,标题自动映射">🎨 模板</button>
|
|
798
|
+
<button class="tbtn" id="btnTheme" title="十七套主题配色面板:色点即点即换,范围可选全部页面或仅本页">🎨 主题</button>
|
|
788
799
|
</div>
|
|
789
800
|
<div class="group" title="编辑:撤销 / 重做(支持模板应用、增删页、换主题等所有编辑操作)">
|
|
790
801
|
<button class="tbtn" id="btnUndo" title="撤销上一步(Ctrl+Z)" disabled>↶ 撤销</button>
|
|
@@ -923,7 +934,7 @@ body:hover .nav{ opacity:1; }
|
|
|
923
934
|
<div class="logo" data-anim="pop"></div>
|
|
924
935
|
<div class="s-title" data-anim="fade-up">魔法幻灯<br>Magic Deck</div>
|
|
925
936
|
<div class="sub" data-anim="fade-up" data-anim-delay="120">HTML 形态 · PPT 体验 · 单文件离线放映</div>
|
|
926
|
-
<div class="sign" data-anim="fade-in" data-anim-delay="300">GENERATED BY
|
|
937
|
+
<div class="sign" data-anim="fade-in" data-anim-delay="300">GENERATED BY AI TEAM</div>
|
|
927
938
|
</section>
|
|
928
939
|
|
|
929
940
|
<!-- 页 2 目录 -->
|
|
@@ -984,7 +995,7 @@ body:hover .nav{ opacity:1; }
|
|
|
984
995
|
<div class="s-head"><h2>里程碑</h2><span class="tag">TIMELINE</span></div>
|
|
985
996
|
<div class="grid3">
|
|
986
997
|
<div class="card"><h4>立项与架构<span class="en">2026 Q1</span></h4><p>完成技术选型与十六主题变量体系。</p></div>
|
|
987
|
-
<div class="card"><h4>模板库建设<span class="en">2026 Q2</span></h4><p
|
|
998
|
+
<div class="card"><h4>模板库建设<span class="en">2026 Q2</span></h4><p>十七套版式骨架与主题正交组合。</p></div>
|
|
988
999
|
<div class="card"><h4>单页换肤<span class="en">2026 Q3</span></h4><p>整份或单页自由切换主题。</p></div>
|
|
989
1000
|
</div>
|
|
990
1001
|
</section>
|
|
@@ -994,8 +1005,8 @@ body:hover .nav{ opacity:1; }
|
|
|
994
1005
|
<div class="s-head"><h2>数据一览</h2><span class="tag">DATA</span></div>
|
|
995
1006
|
<div class="grid4">
|
|
996
1007
|
<div class="bignum"><b>99.9%</b><span>可用性</span></div>
|
|
997
|
-
<div class="bignum"><b>
|
|
998
|
-
<div class="bignum"><b>
|
|
1008
|
+
<div class="bignum"><b>17</b><span>版式模板</span></div>
|
|
1009
|
+
<div class="bignum"><b>17</b><span>配色主题</span></div>
|
|
999
1010
|
<div class="bignum"><b>0</b><span>外部依赖</span></div>
|
|
1000
1011
|
</div>
|
|
1001
1012
|
</section>
|
|
@@ -1005,7 +1016,7 @@ body:hover .nav{ opacity:1; }
|
|
|
1005
1016
|
<div class="s-head"><h2>发布流程四步走</h2><span class="tag">STEPS</span></div>
|
|
1006
1017
|
<div class="grid4">
|
|
1007
1018
|
<div class="card"><h4>撰写内容<span class="en">Draft</span></h4><p>结构与文案一气呵成。</p></div>
|
|
1008
|
-
<div class="card"><h4>套用版式<span class="en">Layout</span></h4><p
|
|
1019
|
+
<div class="card"><h4>套用版式<span class="en">Layout</span></h4><p>十七套版式任意切换。</p></div>
|
|
1009
1020
|
<div class="card"><h4>细节打磨<span class="en">Polish</span></h4><p>主题配色逐页微调。</p></div>
|
|
1010
1021
|
<div class="card"><h4>发布放映<span class="en">Publish</span></h4><p>全屏放映或分享 HTML。</p></div>
|
|
1011
1022
|
</div>
|
|
@@ -1090,9 +1101,9 @@ body:hover .nav{ opacity:1; }
|
|
|
1090
1101
|
</div>
|
|
1091
1102
|
</section>
|
|
1092
1103
|
|
|
1093
|
-
<!-- 页 15
|
|
1104
|
+
<!-- 页 15 领域模板库(二十二套领域 / 业务成套模板,点卡片直达面板生成整套页面) -->
|
|
1094
1105
|
<section class="slide" data-title="领域模板">
|
|
1095
|
-
<div class="s-head"><h2>领域模板库 ·
|
|
1106
|
+
<div class="s-head"><h2>领域模板库 · 二十二套</h2><span class="tag">DOMAIN</span></div>
|
|
1096
1107
|
<div class="prof-grid">
|
|
1097
1108
|
<div class="card prof-demo" data-prof="thesis" data-anim="fade-up" data-anim-delay="40"><h4>毕业答辩<span class="en">Thesis</span></h4></div>
|
|
1098
1109
|
<div class="card prof-demo" data-prof="proposal" data-anim="fade-up" data-anim-delay="65"><h4>开题报告<span class="en">Proposal</span></h4></div>
|
|
@@ -1104,6 +1115,7 @@ body:hover .nav{ opacity:1; }
|
|
|
1104
1115
|
<div class="card prof-demo" data-prof="product" data-anim="fade-up" data-anim-delay="215"><h4>产品发布<span class="en">Product</span></h4></div>
|
|
1105
1116
|
<div class="card prof-demo" data-prof="tech" data-anim="fade-up" data-anim-delay="240"><h4>科技发布<span class="en">Tech</span></h4></div>
|
|
1106
1117
|
<div class="card prof-demo" data-prof="marketing" data-anim="fade-up" data-anim-delay="265"><h4>营销方案<span class="en">Marketing</span></h4></div>
|
|
1118
|
+
<div class="card prof-demo" data-prof="sales" data-anim="fade-up" data-anim-delay="280"><h4>销售方案<span class="en">Sales</span></h4></div>
|
|
1107
1119
|
<div class="card prof-demo" data-prof="training" data-anim="fade-up" data-anim-delay="290"><h4>企业培训<span class="en">Training</span></h4></div>
|
|
1108
1120
|
<div class="card prof-demo" data-prof="ceremony" data-anim="fade-up" data-anim-delay="315"><h4>年会盛典<span class="en">Ceremony</span></h4></div>
|
|
1109
1121
|
<div class="card prof-demo" data-prof="finance" data-anim="fade-up" data-anim-delay="340"><h4>金融分析<span class="en">Finance</span></h4></div>
|
|
@@ -1123,7 +1135,7 @@ body:hover .nav{ opacity:1; }
|
|
|
1123
1135
|
<section class="slide endpage" data-title="结束">
|
|
1124
1136
|
<div class="s-title">谢谢观看</div>
|
|
1125
1137
|
<p>按 F 全屏放映 · 按 ? 查看全部热键</p>
|
|
1126
|
-
<p class="sign">GENERATED BY
|
|
1138
|
+
<p class="sign">GENERATED BY AI TEAM</p>
|
|
1127
1139
|
</section>
|
|
1128
1140
|
|
|
1129
1141
|
</div></main>
|
|
@@ -1142,7 +1154,7 @@ body:hover .nav{ opacity:1; }
|
|
|
1142
1154
|
<tr><td><kbd>Ctrl</kbd>+<kbd>Z</kbd> / <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>Z</kbd></td><td>撤销 / 重做</td></tr>
|
|
1143
1155
|
<tr><td><kbd>Esc</kbd></td><td>关弹层 / 退全屏</td></tr>
|
|
1144
1156
|
</table>
|
|
1145
|
-
<div class="help-note">「🎨 主题」面板 16 套配色即点即换,范围可选全部页面或仅本页。「🎨
|
|
1157
|
+
<div class="help-note">「🎨 主题」面板 16 套配色即点即换,范围可选全部页面或仅本页。「🎨 模板」=十七套版式模板应用到全部页/仅本页/勾选页,支持「预览本页」先看效果,标题自动映射,切回经典商务即恢复原排版。右侧边栏双 Tab:「▤ 页面」缩略图跳页、悬停操作条复页/上移/下移/删页,头部「+新页」选版式插页;「⚙ 工具」收纳动画库(翻页八套 + 入场十二式 + 离场十二式 + 强调八式 + 标题文字逐字/逐词/逐行,可设全部页面/仅本页范围)与复制截图(本页/选页批量,只含主体内容,截图逐张下载 PNG),点选即应用并自动记忆。「↶/↷」撤销重做(Ctrl+Z)。</div>
|
|
1146
1158
|
</div>
|
|
1147
1159
|
</div>
|
|
1148
1160
|
<div class="help-mask" id="tplMask">
|
|
@@ -1339,10 +1351,37 @@ themeGrid.addEventListener('click', function(e){
|
|
|
1339
1351
|
var sc = themeMask.querySelector('input[name="thScope"]:checked');
|
|
1340
1352
|
if (sc && sc.value === 'current') setSlideTheme(it.getAttribute('data-theme'));
|
|
1341
1353
|
else setGlobalTheme(it.getAttribute('data-theme'));
|
|
1354
|
+
saveThemeState();
|
|
1342
1355
|
renderThemeDots();
|
|
1343
1356
|
buildThumbs();
|
|
1344
1357
|
});
|
|
1345
1358
|
|
|
1359
|
+
/* 稳定身份命名空间:localStorage 键按页内嵌唯一 ID(meta deck-id)命名——Chrome/Safari 下 file:// 与 localhost 共享同源存储,固定键名会导致多份演示稿主题/动画互相串台;ID 与文件路径解耦,改名/移动目录记忆不丢 */
|
|
1360
|
+
var DECK_ID = ((document.querySelector('meta[name="deck-id"]') || {}).content || 'ref-deck').trim();
|
|
1361
|
+
/* ID 格式自愈(格式定死执行层):meta 非法或缺失(占位残留/手写变体/误沿用旧值)时按路径键自愈为 crypto.randomUUID() 标准 v4,同路径跨打开稳定;合法 UUID 原样使用(复制文件副本=同一身份共享数据,是特性) */
|
|
1362
|
+
if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(DECK_ID)) {
|
|
1363
|
+
var __sfHealKey = 'sf-heal:' + location.pathname;
|
|
1364
|
+
try { DECK_ID = localStorage.getItem(__sfHealKey) || DECK_ID; } catch (e) {}
|
|
1365
|
+
if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(DECK_ID)) {
|
|
1366
|
+
try { DECK_ID = crypto.randomUUID(); } catch (e) {
|
|
1367
|
+
DECK_ID = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c){ var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8); return v.toString(16); });
|
|
1368
|
+
}
|
|
1369
|
+
try { localStorage.setItem(__sfHealKey, DECK_ID); } catch (e) {}
|
|
1370
|
+
}
|
|
1371
|
+
var __sfMeta = document.querySelector('meta[name="deck-id"]');
|
|
1372
|
+
if (__sfMeta) __sfMeta.setAttribute('content', DECK_ID);
|
|
1373
|
+
console.warn('[magic-deck] meta deck-id 非法或缺失,已自愈为标准 v4 ID(' + DECK_ID + '),建议重新生成页面固化');
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
var MD_NS = 'md-deck:' + DECK_ID;
|
|
1377
|
+
|
|
1378
|
+
/* 主题记忆:全局主题 + 本页主题(按页码索引)序列化到 localStorage,刷新恢复;失败静默 */
|
|
1379
|
+
function saveThemeState(){
|
|
1380
|
+
var per = {};
|
|
1381
|
+
slides.forEach(function(s, k){ var t = s.getAttribute('data-theme'); if (t) per[k] = t; });
|
|
1382
|
+
try{ localStorage.setItem(MD_NS + '-theme', JSON.stringify({ global: document.documentElement.getAttribute('data-theme') || 'tech', slides: per })); }catch(e){}
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1346
1385
|
|
|
1347
1386
|
/* ── 模板应用(全部/本页/选页;标题自动映射到模板固定位置,内容不丢) ── */
|
|
1348
1387
|
var TPLS = [
|
|
@@ -1377,7 +1416,9 @@ var TPLS = [
|
|
|
1377
1416
|
{ id:'dark', name:'暗夜深色', ic:'◐', ds:'页面级反色,浅色主题下也全黑',
|
|
1378
1417
|
mini:'<i style="left:0;top:0;width:100%;height:100%;background:#0d1117"></i><i style="left:8%;top:20%;width:40%;height:10%;background:#58a6ff;opacity:.85"></i><i style="left:8%;top:44%;width:60%;height:6%;background:#30363d"></i><i style="left:8%;top:60%;width:50%;height:6%;background:#30363d"></i><i style="left:74%;top:18%;width:16%;height:34%;border-radius:50%;background:conic-gradient(#58a6ff 0 60%,#30363d 60% 100%)"></i>' },
|
|
1379
1418
|
{ id:'nature', name:'自然清新', ic:'❀', ds:'圆润有机形状,教育与生活主题',
|
|
1380
|
-
mini:'<i style="left:8%;top:16%;width:30%;height:64%;border-radius:40% 15% 40% 15%;border:2px solid var(--accent)"></i><i style="left:44%;top:16%;width:26%;height:40%;border-radius:15% 40% 15% 40%;border:2px solid var(--accent2)"></i><i style="left:76%;top:26%;width:10%;height:22%;border-radius:50%;background:var(--accent)"></i>' }
|
|
1419
|
+
mini:'<i style="left:8%;top:16%;width:30%;height:64%;border-radius:40% 15% 40% 15%;border:2px solid var(--accent)"></i><i style="left:44%;top:16%;width:26%;height:40%;border-radius:15% 40% 15% 40%;border:2px solid var(--accent2)"></i><i style="left:76%;top:26%;width:10%;height:22%;border-radius:50%;background:var(--accent)"></i>' },
|
|
1420
|
+
{ id:'stats', name:'统计图表', ic:'◧', ds:'KPI 大数字横排 + 图表框架,数据看板',
|
|
1421
|
+
mini:'<i style="left:5%;top:8%;width:28%;height:18%;border-top:3px solid var(--accent);border-radius:0 0 4px 4px;background:var(--panel)"></i><i style="left:36%;top:8%;width:28%;height:18%;border-top:3px solid var(--accent);border-radius:0 0 4px 4px;background:var(--panel)"></i><i style="left:67%;top:8%;width:28%;height:18%;border-top:3px solid var(--accent);border-radius:0 0 4px 4px;background:var(--panel)"></i><i style="left:5%;top:40%;width:56%;height:52%;border:1px solid var(--accent);border-radius:4px"></i><i style="left:67%;top:40%;width:28%;height:52%;border:1px solid var(--border);border-radius:4px"></i>' }
|
|
1381
1422
|
];
|
|
1382
1423
|
|
|
1383
1424
|
/* ── 成套模板生成器:领域 / 业务 21 式(面板「💼 领域」Tab 一键生成整套页面) ── */
|
|
@@ -1387,7 +1428,7 @@ var P = (function(){
|
|
|
1387
1428
|
function head(h2, tag){ return '<div class="s-head"><h2>' + h2 + '</h2><span class="tag">' + tag + '</span></div>'; }
|
|
1388
1429
|
return {
|
|
1389
1430
|
cover: function(title, sub){
|
|
1390
|
-
return '<section class="slide cover" data-title="封面"><div class="logo" data-anim="pop"></div><div class="s-title" data-anim="fade-up">' + title + '</div><div class="sub" data-anim="fade-up" data-anim-delay="120">' + sub + '</div><div class="sign" data-anim="fade-in" data-anim-delay="300">GENERATED BY
|
|
1431
|
+
return '<section class="slide cover" data-title="封面"><div class="logo" data-anim="pop"></div><div class="s-title" data-anim="fade-up">' + title + '</div><div class="sub" data-anim="fade-up" data-anim-delay="120">' + sub + '</div><div class="sign" data-anim="fade-in" data-anim-delay="300">GENERATED BY AI TEAM</div></section>';
|
|
1391
1432
|
},
|
|
1392
1433
|
toc: function(title, items){
|
|
1393
1434
|
var inner = head(title, 'CONTENTS') + '<div class="toc">';
|
|
@@ -1461,7 +1502,7 @@ var P = (function(){
|
|
|
1461
1502
|
return sec(title, tpl, inner);
|
|
1462
1503
|
},
|
|
1463
1504
|
end: function(){
|
|
1464
|
-
return '<section class="slide endpage" data-title="结束"><div class="s-title">谢谢观看</div><p>按 F 全屏放映 · 按 ? 查看全部热键</p><p class="sign">GENERATED BY
|
|
1505
|
+
return '<section class="slide endpage" data-title="结束"><div class="s-title">谢谢观看</div><p>按 F 全屏放映 · 按 ? 查看全部热键</p><p class="sign">GENERATED BY AI TEAM</p></section>';
|
|
1465
1506
|
}
|
|
1466
1507
|
};
|
|
1467
1508
|
})();
|
|
@@ -1476,7 +1517,7 @@ var PROF_CATS = [
|
|
|
1476
1517
|
{ id:'life', name:'生活场景' }
|
|
1477
1518
|
];
|
|
1478
1519
|
|
|
1479
|
-
/*
|
|
1520
|
+
/* 二十二套成套模板:pages = 封面 + 目录 + 内容页 + 图表页 + 结束页,一键整份替换 */
|
|
1480
1521
|
var PROF = [
|
|
1481
1522
|
{ id:'thesis', cat:'edu', name:'毕业答辩', ds:'课题研究 · 方法创新 · 成果致谢', main:'minimal', pages:[
|
|
1482
1523
|
P.cover('毕业答辩<br>基于深度学习的图像分割方法研究', '答辩人:张三 · 指导教师:李四教授 · 2026 年 6 月'),
|
|
@@ -1637,7 +1678,7 @@ var PROF = [
|
|
|
1637
1678
|
P.points('品牌故事', 'STORY', 'magazine', ['创立于 2016 年,名字取自云南的山野', '坚持「不时不食」,只做当季菜', '每一道菜背后都有一位手艺人']),
|
|
1638
1679
|
P.cards('招牌菜单', 'MENU', 'magazine', [{h:'汽锅鸡', en:'Steam Pot', p:'古法汽锅,原汁原味'}, {h:'野生菌火锅', en:'Mushroom', p:'当季鲜菌,山珍荟萃'}, {h:'鲜花饼', en:'Flower Cake', p:'现烤现卖,玫瑰馅料'}]),
|
|
1639
1680
|
P.points('食材溯源', 'SOURCE', 'magazine', ['清晨 5 点直采,当日送达门店', '与 27 家农户签订直供协议', '扫码即可查看每一份食材的产地故事']),
|
|
1640
|
-
P.chart('口碑数据', 'REPUTATION', 'magazine', 'bars', {t:'各平台评分', en:'BARS GROW', data:[{n:'
|
|
1681
|
+
P.chart('口碑数据', 'REPUTATION', 'magazine', 'bars', {t:'各平台评分', en:'BARS GROW', data:[{n:'点评平台', v:92}, {n:'外卖平台', v:90}, {n:'种草平台', v:95}, {n:'短视频平台', v:88}]}, '经营表现', ['人均客单价 128 元', '全年客流 40 万人次', '顾客复购率 58%']),
|
|
1641
1682
|
P.end()
|
|
1642
1683
|
]},
|
|
1643
1684
|
{ id:'travel', cat:'life', name:'旅游攻略', ds:'行程总览 · 景点美食 · 预算构成', main:'magazine', pages:[
|
|
@@ -1665,6 +1706,15 @@ var PROF = [
|
|
|
1665
1706
|
P.nums('预期成效', 'IMPACT', 'minimal', [{b:'100', s:'所学校'}, {b:'5万', s:'本图书'}, {b:'1万+', s:'儿童受益'}, {b:'200', s:'名志愿者'}]),
|
|
1666
1707
|
P.points('如何参与', 'JOIN', 'minimal', ['捐一本书,写一句寄语', '成为线上共读志愿者', '企业冠名捐赠图书角']),
|
|
1667
1708
|
P.end()
|
|
1709
|
+
]},
|
|
1710
|
+
{ id:'sales', cat:'corp', name:'销售方案', ds:'客户痛点 · 方案价值 · 案例与报价', main:'executive', pages:[
|
|
1711
|
+
P.cover('企业智能客服<br>解决方案建议书', '销售中心 · 张经理 · 2026 年 11 月'),
|
|
1712
|
+
P.toc('目录', ['客户痛点', '方案价值', '成功案例', '报价与服务']),
|
|
1713
|
+
P.points('客户痛点', 'PAIN', 'executive', ['人工客服成本高企,7×24 服务难以保障', '咨询渠道分散,客户问题响应不及时', '会话数据未沉淀,商机线索大量流失']),
|
|
1714
|
+
P.cards('方案价值', 'VALUE', 'executive', [{h:'智能应答', en:'AI Bot', p:'常见问题秒回,拦截 80% 重复咨询'}, {h:'人机协同', en:'Hybrid', p:'复杂问题无缝转人工,情绪识别预警'}, {h:'数据洞察', en:'Insight', p:'全渠道会话分析,商机自动挖掘跟进'}]),
|
|
1715
|
+
P.nums('成功案例', 'CASES', 'executive', [{b:'62%', s:'人力成本下降'}, {b:'92%', s:'客户满意度'}, {b:'3.2s', s:'平均响应'}, {b:'500+', s:'服务企业数'}]),
|
|
1716
|
+
P.chart('报价与服务', 'QUOTE', 'executive', 'pie', {t:'项目投入构成', en:'PIE SWEEP', data:[{n:'软件服务', v:55}, {n:'实施交付', v:25}, {n:'培训运维', v:20}]}, '服务承诺', ['标准版年费 18 万元,30 天交付上线', '7×24 运维保障,SLA 99.9%', '免费 POC 试用 14 天,效果看得见']),
|
|
1717
|
+
P.end()
|
|
1668
1718
|
]}
|
|
1669
1719
|
];
|
|
1670
1720
|
|
|
@@ -2183,7 +2233,7 @@ function blankSlideHtml(tpl){
|
|
|
2183
2233
|
+ '<div class="s-head"><h2>新页面标题</h2><span class="tag">' + tp.name + '</span></div>'
|
|
2184
2234
|
+ '<div class="grid2">'
|
|
2185
2235
|
+ '<div class="card"><h4>要点一<span class="en">Point 1</span></h4><p>在这里写下要点内容,然后按 F 放映。</p></div>'
|
|
2186
|
-
+ '<div class="card"><h4>要点二<span class="en">Point 2</span></h4><p>支持全部
|
|
2236
|
+
+ '<div class="card"><h4>要点二<span class="en">Point 2</span></h4><p>支持全部 17 套版式与 17 套主题。</p></div>'
|
|
2187
2237
|
+ '</div></section>';
|
|
2188
2238
|
}
|
|
2189
2239
|
function addPage(tpl){
|
|
@@ -2507,7 +2557,23 @@ slides.forEach(function(s){
|
|
|
2507
2557
|
if (tp && tp !== 'classic') applyTpl(s, tp);
|
|
2508
2558
|
});
|
|
2509
2559
|
var themeParam = new URLSearchParams(location.search).get('theme');
|
|
2510
|
-
|
|
2560
|
+
var themeIds = THEMES.map(function(t){ return t[0]; });
|
|
2561
|
+
if (themeIds.indexOf(themeParam) > -1) setGlobalTheme(themeParam);
|
|
2562
|
+
else { /* 无显式 URL 参数时恢复主题记忆(md-deck-theme JSON:global + slides 页码索引;删页/排序后本页主题可能错位,重新点选即可) */
|
|
2563
|
+
var savedTheme = null; try{ savedTheme = localStorage.getItem(MD_NS + '-theme') || localStorage.getItem('md-deck:' + location.pathname + '-theme'); }catch(e){}
|
|
2564
|
+
if (savedTheme){
|
|
2565
|
+
var st = null; try{ st = JSON.parse(savedTheme); }catch(e){}
|
|
2566
|
+
if (st && typeof st === 'object'){
|
|
2567
|
+
if (st.global && themeIds.indexOf(st.global) > -1) setGlobalTheme(st.global);
|
|
2568
|
+
if (st.slides && typeof st.slides === 'object'){
|
|
2569
|
+
Object.keys(st.slides).forEach(function(k){
|
|
2570
|
+
var i = parseInt(k, 10);
|
|
2571
|
+
if (isFinite(i) && slides[i] && themeIds.indexOf(st.slides[k]) > -1) slides[i].setAttribute('data-theme', st.slides[k]);
|
|
2572
|
+
});
|
|
2573
|
+
}
|
|
2574
|
+
}
|
|
2575
|
+
}
|
|
2576
|
+
}
|
|
2511
2577
|
var tplParam = new URLSearchParams(location.search).get('tpl');
|
|
2512
2578
|
if (tplParam && TPLS.some(function(t){ return t.id === tplParam; })) applyScope(tplParam, 'all', []);
|
|
2513
2579
|
var sm = location.hash.match(/^#\/(\d+)$/);
|
|
@@ -2522,10 +2588,10 @@ fit();
|
|
|
2522
2588
|
buildThumbs();
|
|
2523
2589
|
if (!jumped) go(0);
|
|
2524
2590
|
|
|
2525
|
-
/* ═══ 动画控制:翻页八套 + 入场/离场/强调 + 标题文字动画 + 应用范围(localStorage
|
|
2591
|
+
/* ═══ 动画控制:翻页八套 + 入场/离场/强调 + 标题文字动画 + 应用范围(localStorage 记忆,键按页内嵌 deck-id 隔离多文件,失败静默)═══ */
|
|
2526
2592
|
var deckEl = document.getElementById('deck');
|
|
2527
2593
|
var TRANS_LIST = ['slide-lr','fade','slide-ud','zoom','flip','cube','wipe','dissolve'];
|
|
2528
|
-
var sideTabSaved = null; try{ sideTabSaved = localStorage.getItem('md-deck-side-tab'); }catch(e){}
|
|
2594
|
+
var sideTabSaved = null; try{ sideTabSaved = localStorage.getItem(MD_NS + '-side-tab') || localStorage.getItem('md-deck:' + location.pathname + '-side-tab'); }catch(e){}
|
|
2529
2595
|
var leaving = false;
|
|
2530
2596
|
|
|
2531
2597
|
function openSideTab(name){
|
|
@@ -2571,7 +2637,7 @@ function leaveThenGo(i){
|
|
|
2571
2637
|
(function(){
|
|
2572
2638
|
/* 应用范围:全部页面 / 仅本页 */
|
|
2573
2639
|
var scope = 'all';
|
|
2574
|
-
var savedScope = null; try{ savedScope = localStorage.getItem('md-deck-anim-scope'); }catch(e){}
|
|
2640
|
+
var savedScope = null; try{ savedScope = localStorage.getItem(MD_NS + '-anim-scope') || localStorage.getItem('md-deck:' + location.pathname + '-anim-scope'); }catch(e){}
|
|
2575
2641
|
if (savedScope === 'current' || savedScope === 'all') scope = savedScope;
|
|
2576
2642
|
var scopeRadios = Array.prototype.slice.call(document.querySelectorAll('input[name="animScope"]'));
|
|
2577
2643
|
function syncScope(){
|
|
@@ -2583,7 +2649,7 @@ function leaveThenGo(i){
|
|
|
2583
2649
|
}
|
|
2584
2650
|
syncScope();
|
|
2585
2651
|
scopeRadios.forEach(function(r){ r.addEventListener('change', function(){
|
|
2586
|
-
if (r.checked){ scope = r.value; try{ localStorage.setItem('
|
|
2652
|
+
if (r.checked){ scope = r.value; try{ localStorage.setItem(MD_NS + '-anim-scope', scope); }catch(e){} syncScope(); }
|
|
2587
2653
|
}); });
|
|
2588
2654
|
function animSlides(){ return scope === 'all' ? slides : [slides[cur]]; }
|
|
2589
2655
|
function animEls(s){
|
|
@@ -2595,9 +2661,9 @@ function leaveThenGo(i){
|
|
|
2595
2661
|
function setTransition(v){
|
|
2596
2662
|
deckEl.setAttribute('data-transition', v);
|
|
2597
2663
|
tgBtns.forEach(function(b){ b.classList.toggle('on', b.getAttribute('data-tg') === v); });
|
|
2598
|
-
try{ localStorage.setItem('
|
|
2664
|
+
try{ localStorage.setItem(MD_NS + '-transition', v); }catch(e){}
|
|
2599
2665
|
}
|
|
2600
|
-
var savedT = null; try{ savedT = localStorage.getItem('md-deck-transition'); }catch(e){}
|
|
2666
|
+
var savedT = null; try{ savedT = localStorage.getItem(MD_NS + '-transition') || localStorage.getItem('md-deck:' + location.pathname + '-transition'); }catch(e){}
|
|
2601
2667
|
if (savedT && TRANS_LIST.indexOf(savedT) !== -1){ setTransition(savedT); }
|
|
2602
2668
|
else { setTransition(deckEl.getAttribute('data-transition') || 'slide-lr'); }
|
|
2603
2669
|
tgBtns.forEach(function(b){ b.addEventListener('click', function(){ setTransition(b.getAttribute('data-tg')); }); });
|
|
@@ -2606,9 +2672,9 @@ function leaveThenGo(i){
|
|
|
2606
2672
|
var chkA = document.getElementById('chkAnim');
|
|
2607
2673
|
function setAnim(v){
|
|
2608
2674
|
deckEl.setAttribute('data-anim', v ? 'on' : 'off');
|
|
2609
|
-
try{ localStorage.setItem('
|
|
2675
|
+
try{ localStorage.setItem(MD_NS + '-anim', v ? 'on' : 'off'); }catch(e){}
|
|
2610
2676
|
}
|
|
2611
|
-
var savedA = null; try{ savedA = localStorage.getItem('md-deck-anim'); }catch(e){}
|
|
2677
|
+
var savedA = null; try{ savedA = localStorage.getItem(MD_NS + '-anim') || localStorage.getItem('md-deck:' + location.pathname + '-anim'); }catch(e){}
|
|
2612
2678
|
if (savedA === 'off' || savedA === 'on'){ setAnim(savedA === 'on'); chkA.checked = savedA === 'on'; }
|
|
2613
2679
|
else { chkA.checked = deckEl.getAttribute('data-anim') !== 'off'; }
|
|
2614
2680
|
chkA.addEventListener('change', function(){ setAnim(chkA.checked); });
|
|
@@ -2674,25 +2740,37 @@ function leaveThenGo(i){
|
|
|
2674
2740
|
animSlides().forEach(function(s){
|
|
2675
2741
|
s.querySelectorAll('h1,h2,h3,.s-title').forEach(function(el){
|
|
2676
2742
|
restoreText(el);
|
|
2743
|
+
if (el.classList.contains('s-title')){
|
|
2744
|
+
/* 渐变字(background-clip:text)拆 span 会丢父级渐变(span 行内块不参与文字剪裁),
|
|
2745
|
+
视觉成「蒙层」,改用整体入场动画代替逐字/逐词/逐行 */
|
|
2746
|
+
if (mode === 'none'){
|
|
2747
|
+
if (el.hasAttribute('data-md-whole')){
|
|
2748
|
+
el.removeAttribute('data-md-whole');
|
|
2749
|
+
if (el.getAttribute('data-anim') === 'fade-up'){ el.removeAttribute('data-anim'); el.removeAttribute('data-anim-delay'); }
|
|
2750
|
+
}
|
|
2751
|
+
} else if (!el.hasAttribute('data-anim')){ el.setAttribute('data-anim', 'fade-up'); el.setAttribute('data-md-whole', '1'); }
|
|
2752
|
+
return;
|
|
2753
|
+
}
|
|
2677
2754
|
if (mode !== 'none') splitText(el, mode);
|
|
2678
2755
|
});
|
|
2679
2756
|
});
|
|
2680
2757
|
mark(textBtns, mode, 'data-ta');
|
|
2681
2758
|
}
|
|
2682
|
-
var savedTA = null; try{ savedTA = localStorage.getItem('md-deck-text-anim'); }catch(e){}
|
|
2683
|
-
|
|
2759
|
+
var savedTA = null; try{ savedTA = localStorage.getItem(MD_NS + '-text-anim') || localStorage.getItem('md-deck:' + location.pathname + '-text-anim'); }catch(e){}
|
|
2760
|
+
/* 入场动画总开关关闭时不回填文字动画(与开关语义一致,避免「关不掉」) */
|
|
2761
|
+
if ((savedTA === 'char' || savedTA === 'word' || savedTA === 'line') && deckEl.getAttribute('data-anim') !== 'off'){ applyText(savedTA); }
|
|
2684
2762
|
else { mark(textBtns, 'none', 'data-ta'); }
|
|
2685
2763
|
textBtns.forEach(function(b){ b.addEventListener('click', function(){
|
|
2686
2764
|
var m = b.getAttribute('data-ta');
|
|
2687
2765
|
applyText(m);
|
|
2688
|
-
try{ localStorage.setItem('
|
|
2766
|
+
try{ localStorage.setItem(MD_NS + '-text-anim', m); }catch(e){}
|
|
2689
2767
|
}); });
|
|
2690
2768
|
|
|
2691
2769
|
/* 双 Tab 切换 */
|
|
2692
2770
|
Array.prototype.forEach.call(document.querySelectorAll('.sp-tab'), function(b){
|
|
2693
2771
|
b.addEventListener('click', function(){
|
|
2694
2772
|
openSideTab(b.getAttribute('data-tab'));
|
|
2695
|
-
try{ localStorage.setItem('
|
|
2773
|
+
try{ localStorage.setItem(MD_NS + '-side-tab', b.getAttribute('data-tab')); }catch(e){}
|
|
2696
2774
|
});
|
|
2697
2775
|
});
|
|
2698
2776
|
openSideTab(sideTabSaved === 'tools' ? 'tools' : 'pages');
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
## 能干什么(三句话版)
|
|
6
6
|
|
|
7
7
|
1. **内容变幻灯**:把一段文字、一份大纲或一个文件,做成单文件 HTML 幻灯片——16:9 舞台、双击即开、离线可用
|
|
8
|
-
2.
|
|
8
|
+
2. **现场改版**:版式模板十七套(经典商务 / 极简留白 / 杂志画册 / 黑金发布 / 统计图表……)与主题配色十七套即点即换,可套全部页或仅当前页;「💼 领域」Tab 还有二十二套成套模板(毕业答辩 / 年终汇报 / 商业计划书 / 政务汇报……),一键生成整套页面
|
|
9
9
|
3. **放映与出料**:自动播放 / 全屏纯净放映 / 翻页动画与元素动画库;逐页 PNG 截图与本页 / 选页文字复制(均不含工具栏等操作元素)
|
|
10
10
|
|
|
11
11
|
## 放映热键
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
## 工具栏与边栏
|
|
28
28
|
|
|
29
|
-
- **🎨
|
|
29
|
+
- **🎨 模板**:十七套版式骨架,应用范围可选全部页面 / 仅本页 / 勾选页面;先「预览本页」看效果再应用,切回「经典商务」恢复原排版、内容不丢
|
|
30
30
|
- **🎨 主题**:十七套配色,色点即点即换,范围可选全部页面或仅本页
|
|
31
31
|
- **↶ ↷ 撤销 / 重做**:模板应用、增删页、换主题等所有编辑操作都可回退
|
|
32
32
|
- **▤ 页导航**:右侧缩略图边栏——点缩略图跳页、+新页(16 版式任选)、复页、排序、删页
|
|
@@ -40,3 +40,11 @@
|
|
|
40
40
|
- **改完怎么保存?** 页面的编辑与换肤作用于当前打开的内存副本,刷新后回到原始文件;要固化效果请把新的版式 / 主题告诉 AI,让它重新生成 HTML
|
|
41
41
|
- **放映时怎么干净?** 按 F 进全屏:工具栏、页码、箭头、弹层全部隐藏,画面纯黑背景只留幻灯内容,与 PPT 软件放映一致
|
|
42
42
|
- **能拿到 PPT 吗?** magic-deck 产出 HTML 幻灯;要 .pptx 文件请用「登台 deck-stage」技能(报告 / 素材转专业 PPT,原生可编辑)
|
|
43
|
+
|
|
44
|
+
## 效果不对怎么办
|
|
45
|
+
|
|
46
|
+
- 页面效果不对(某页布局乱 / 主题错乱 / 动画不动 / 交互失灵 / 蒙层关不掉),对 AI 说「这个页面效果不对,对照参考模板修复」,把问题描述清楚(第几页、什么现象,能截图最好)
|
|
47
|
+
- 本技能的设计标准答案就在技能目录里:`resources/reference.html`(双击可打开放映看标准效果)+ `resources/deck-spec.md`(规格说明),AI 修复时以此为唯一对照
|
|
48
|
+
- AI 的处理流程固定:先打开 reference.html 作标准 → 再读你那份问题 html 文件 → 逐处比对找出跑偏的地方 → 以 reference 为准修复 → 自动翻完全部页面确认零报错、截图对比修复前后,自证修好了再交付
|
|
49
|
+
- 放映时的现场改动(换模板/换主题/增删页)刷新会回到原始文件——想固化效果就说「按这个效果重新生成」,这不算报修,AI 会按当前效果重建 HTML
|
|
50
|
+
- 参考模板本身有缺陷时(生成结果与 reference 一模一样但仍有问题,如历史过的「切模板后出现关不掉的蒙层」)说一句「参考模板也有这个问题」,AI 会连模板一起修并同步回 reference.html,避免以后再犯
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
CONFIG_VERSION: 2 # 配置结构版本:skill 升级时若配置结构变化会递增;AI 每次执行前对比 SKILL.md「配置版本机制」节声明的当前版本,不一致时按 SKILL.md 的迁移规则处理(先备份本文件为带时间戳 .bak,再迁移,最后对话告知用户)
|
|
13
13
|
|
|
14
14
|
# ── 落盘与外观 ──
|
|
15
|
-
DIR: ~/Desktop #
|
|
15
|
+
DIR: ~/Desktop # 幻灯片落盘总目录:每次生成在此目录下新建「{文件名}/」子目录存放 slides.html 与后续衍生文件(截图等)——总目录统一管理、各次产出互不干扰;临时口头指定任意目录永远优先
|
|
16
16
|
FILENAME: auto # 文件名(不含扩展名):auto = 按本次内容主题+用途自动总结中文名(如「智能探针系统-产品介绍」,便于日后按名找回继续改);也可口头指定文件名(永远优先);或写死固定名如 slides(重名自动加日期后缀,不覆盖)
|
|
17
17
|
OPEN_HTML: true # 生成后自动打开浏览器放映
|
|
18
18
|
THEME: tech # 默认主题(十七套:tech 深蓝科技 / biz 浅色商务 / mono IDEA 黑亮 / light IDEA 白亮 / warm 温暖渐变 / aurora 极光紫 / dracula 德古拉紫 / nord 北欧冰蓝 / midnight 东京夜色 / matrix 终端荧光绿 / cyber 赛博霓虹 / apple 苹果极简 / stripe 条纹紫蓝 / notion 纸感暖白 / gruvbox 复古暖橙 / gold 黑金奢华 / ocean 深洋蓝;放映时「🎨 主题」面板色点即点即换:范围可选全部页面或仅本页)
|
|
@@ -28,13 +28,13 @@ LOOP_DEFAULT: false # 循环播放默认关(放映时可勾选)
|
|
|
28
28
|
FROM_START_DEFAULT: true # 从头播放默认开(取消勾选=从当前页继续)
|
|
29
29
|
|
|
30
30
|
# ── 页脚署名 ──
|
|
31
|
-
SIGNATURE: GENERATED BY
|
|
31
|
+
SIGNATURE: GENERATED BY AI TEAM # 封面/结束页署名
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
## 📝 模板、主题与动画(像真 PPT 一样可选)
|
|
36
36
|
|
|
37
|
-
-
|
|
37
|
+
- **内置模板十七套**(版式骨架):classic 经典商务(默认)/ minimal 极简留白 / magazine 杂志画册 / keynote 黑金发布 / timeline 时间线叙事 / steps 流程步骤 / poster 海报宣传 / vintage 复古报纸 / finance 金融报表 / blueprint 蓝图工程 / education 教学板书 / executive 高管简报 / metro 扁平磁贴 / bento 模块网格 / dark 暗夜深色 / nature 自然清新 / stats 统计图表。改上方 `TEMPLATE` 即换生成默认,或生成时口头点名(如「用杂志风模板」)当次生效;放映时随时经工具栏「🎨 模板」面板切换(全部页面/仅本页/选择页面),可先「预览本页」看效果再应用,标题自动映射到模板固定位置,切回经典商务即恢复原排版
|
|
38
38
|
- **内置主题十七套**(配色,放映时随时换):tech 深蓝科技(默认)/ biz 浅色商务 / mono IDEA 黑亮 / light IDEA 白亮 / warm 温暖渐变 / aurora 极光紫 / dracula 德古拉紫 / nord 北欧冰蓝 / midnight 东京夜色 / matrix 终端荧光绿 / cyber 赛博霓虹 / apple 苹果极简 / stripe 条纹紫蓝 / notion 纸感暖白 / gruvbox 复古暖橙 / gold 黑金奢华 / ocean 深洋蓝。「🎨 主题」面板点色点=整份切换;范围选「仅本页」后再点色点=只给当前页换肤,选回「全部页面」即恢复整份模式
|
|
39
39
|
- **动画库**(动效,与模板/主题正交,放映时收纳在右侧边栏「⚙ 工具」Tab,应用范围可选全部页面/仅本页):翻页风格八套——slide-lr 左右滑移(默认)/ fade 淡入淡出 / slide-ud 上下滑移 / zoom 缩放推进 / flip 3D 翻页 / cube 立方翻转 / wipe 平移擦除 / dissolve 溶解模糊,改上方 `TRANSITION` 即换生成默认,放映时即点即换;元素入场动画十二式(fade-up 上浮 / fade-in 淡入 / fade-down 下沉 / zoom-in 缩放 / slide-left 左滑 / slide-right 右滑 / slide-up 上滑 / slide-down 下滑 / pop 弹出 / bounce-in 弹跳 / flip-in 翻转 / blur 模糊浮现,另有 none 无动画),生成时元素挂 `data-anim` 属性声明、同页多元素挂 `data-anim-delay` 错落,翻到该页自动播放;离场动画十二式(元素挂 `data-anim-leave`,翻页前元素先离场 0.45s 再切页);强调动画八式(pulse 脉冲 / swing 摆动 / shake 抖动 / breathe 呼吸 / flash 闪烁 / tada 放大 / spin 旋转 / glow 发光,元素挂 `data-anim-emphasis` 循环播放);标题文字动画四式(none 无动画默认 / char 逐字 / word 逐词 / line 逐行);`ANIM: false` 时入场动画整份关闭(或放映时「开启」勾选框取消),所有选择浏览器记忆
|
|
40
|
-
- **自定义模板片段**(可选):在 `resources/templates/` 下放 `my-*.html`(仅 body 内容片段,不含 html/head/script
|
|
40
|
+
- **自定义模板片段**(可选):在 `resources/templates/` 下放 `my-*.html`(仅 body 内容片段,不含 html/head/script),生成时用户点名模板名即可套用;未点名用内置十七套模板
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: meeting-minutes
|
|
3
|
+
description: 生成会议纪要(默认会议信息/会议结论/议题讨论/决议与行动项/下次会议五段结构,中文顿号序号),适配各行业各类型会议(内置 12 类会议类型词典:周例会/项目评审/复盘会/客户会议等)。行动项带负责人与截止时间,是汇报链的源头——日报/周报/月报/季报可直接引用会议行动项。数据来源灵活:直接口述、给一段文字、发文件(Word/PDF/Excel/PPT 等)或图片,都能整理成纪要;也可从会议录音/速记草稿整理。支持自定义模板(可永久或临时指定)。支持自然语言指定会议(今天的会/昨天的会/上周的周例会等)。当用户请求写会议纪要、会议记录、整理会议内容、记会议、做会议总结、/meeting-minutes,或询问会议纪要用法(会议纪要怎么用/会议纪要使用说明)时使用。
|
|
4
|
+
allowed-tools: Bash, Read, Write
|
|
5
|
+
disable-model-invocation: false
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 会议纪要生成
|
|
9
|
+
|
|
10
|
+
整理本次会话口述 + 提供的文字/文件/图片/录音材料,生成五段式会议纪要(会议信息/会议结论/议题讨论/决议与行动项/下次会议),对话输出 md 正文 + 落盘 md/txt/html/content-png 并自动打开 html。
|
|
11
|
+
|
|
12
|
+
## 生成流程
|
|
13
|
+
|
|
14
|
+
0. **读用户配置**(DISK/FORMATS/DIR/SERIES_GROUP/OPEN_HTML/TEMPLATE/ROLE/CONFIRM、自定义模板)→ 先 Read 同目录 `user-config.md`
|
|
15
|
+
1. **提取会议要素**(会议主题/日期/类型/地点/主持人/参会人)→ 读 `resources/content-rules.md` 的「会议要素提取」节
|
|
16
|
+
2. **收集会议内容**(会话口述 + 文字/文件/图片/录音材料,合并去重)→ 读 `resources/content-rules.md` 的「素材来源」节
|
|
17
|
+
3. **内容归类与润色**(五段式结构 / 行动项三要素 / 纯文字模式 / 输出格式 / 写作风格)→ 读 `resources/content-rules.md`
|
|
18
|
+
4. **会议类型词条**(话术含会议类型词时按词典取要素侧重与行动项模板)→ 读 `resources/meeting-type-dictionary.md`
|
|
19
|
+
5. **落盘与截图**(md/txt/html/content-png + 自动打开 html)→ 读 `resources/disk-and-html.md`
|
|
20
|
+
6. **使用咨询**(用户只问「会议纪要怎么用」等用法、未要求生成)→ 读 `resources/usage-guide.md`,将其内容原样输出(首行标题改为「会议纪要生成器使用指南」),不收集材料、不生成纪要、不落盘、不开浏览器
|
|
21
|
+
|
|
22
|
+
## ⚙️ 配置与自定义模板
|
|
23
|
+
|
|
24
|
+
**执行本 skill 前必须先 Read 同目录 `user-config.md`**:默认配置(DISK/FORMATS/DIR/SERIES_GROUP/OPEN_HTML/TEMPLATE/ROLE/CONFIRM)与自定义模板都在该文件中,以它为准。升级技能时 user-config.md 不会被覆盖,你的修改永久保留。
|
|
25
|
+
|
|
26
|
+
## 配置版本机制(升级保护)
|
|
27
|
+
|
|
28
|
+
本 skill 当前配置版本为 `2`(对应 user-config.md 中的 `CONFIG_VERSION`)。执行时若发现 user-config.md 的 CONFIG_VERSION 与本节声明不一致:
|
|
29
|
+
|
|
30
|
+
1. 先将旧 user-config.md 备份为 `user-config.md.bak-<时间戳>`(同目录,绝不删除旧值)
|
|
31
|
+
2. 按本节「配置升级规则」迁移字段:新增字段补默认值、改名字段按映射改写、删除字段的值保留在备份中并在对话提示用户手动确认
|
|
32
|
+
3. 更新 CONFIG_VERSION 为当前版本
|
|
33
|
+
4. 对话中明确告知用户「检测到配置版本从 X 升级到 Y,旧配置已备份至 <路径>」
|
|
34
|
+
|
|
35
|
+
配置升级规则(v1→v2):新增 `SERIES_GROUP: auto`(纪要系列分组,见 user-config.md 注释);其余字段不变。
|
|
36
|
+
|
|
37
|
+
**无法迁移项处理**:值域失效(旧值不在新值域)/ 语义漂移(同名键含义变化)/ 数据不兼容,停下问、不猜值;旧值永远在 .bak-时间戳备份里,报告必附回滚一句话。
|
|
38
|
+
|
|
39
|
+
## 产物升级(回炉)
|
|
40
|
+
|
|
41
|
+
生成 HTML 时头部写版本戳 `<meta name="sf-template" content="meeting-minutes@3">`(模板升级时递增 @N 并同步 reference.html 与本文档)。用户说「升级旧产物/回炉旧页面/旧纪要换新样式」时:扫落盘目录下本技能命名的 html,读版本戳筛出旧版(无版本戳或缺少 `<meta name="minutes-id">` 稳定 ID 的产物视为 v0 最旧版,一并进清单) → 列清单(文件/旧版本/手改状态——旧 html 正文与同目录 md 正文对比,不一致视为可能手改过)→ AskUserQuestion 选全部或部分 → 逐份升级:浅升级(仅 CSS/JS 变化)对旧页替换 `<style>` 块与交互脚本、正文内容原样保留;深升级(DOM 结构变化)从同目录 md 底稿按当前 reference.html 重建,先备份旧版 `.bak-时间戳` → 报告三段式:✅ 已升级清单 / ⚠️ 手改保留说明 / 🟡 失败项原因。模板改动分级:业务改动(板块/段落/标题体系)、数据格式改动(字段/存储结构)、页面改动(样式/布局/交互)任一发生即模板升级,版本戳 +1 并同步 reference.html 与本文档;纯措辞润色不 bump。每次生成 HTML 时顺扫落盘目录读版本戳:发现旧版产物主动告知「技能模板已升级至 vN,检测到 X 份旧版纪要(vN-1 或无版本戳的历史产物),说『把我旧纪要都升级成新样式』即可一键升级」,不让用户背触发语。
|
|
42
|
+
|
|
43
|
+
## 规则速览
|
|
44
|
+
|
|
45
|
+
- 五段式骨架行业无关:会议信息(主题/日期/地点/主持人/参会人)/ 会议结论(一句话 TL;DR + 核心决策 2-5 项)/ 议题讨论(议题名 + 结论 + 讨论要点)/ 决议与行动项(事项 + 负责人 + 截止时间,每项三要素齐全)/ 下次会议(主题/时间,没有则写「待定」)
|
|
46
|
+
- **行动项是汇报链源头**:每条行动项必须带负责人与截止时间;日报/周报/月报/季报生成时可直接引用本纪要的行动项作为任务来源
|
|
47
|
+
- 中文顿号序号(1、2、3);段内无内容写「暂无」;去口语化,保留事实与数字
|
|
48
|
+
- **系列分组落盘**:SERIES_GROUP=auto 时从会议主题提取稳定系列名(去日期词/序号词,如「11月12日产品周例会」→「产品周例会」),落盘确认时报系列名给用户可改口;提取到 → `meetings/{系列名}/`(系列名目录名清洗:非法字符 / \ : * ? " < > | 替换为 -);未提取到 → 回退月份平铺 `meetings/YYYY-MM/`。说「把我旧纪要按系列整理」→ 扫 meetings/ 下全部 meeting-minutes-* 文件,从文件名 slug 或 md 头部主题提取系列名建目录归置(md/txt/html/png 全套移动),报告三段式:✅ 已整理清单 / ⚠️ 无法归类留在原地的清单 / 🟡 失败项原因;整理前先列移动计划让用户确认,移动后不删空月份目录(留给用户自行处置)
|
|
49
|
+
- **THEME**:html 页面主题,tech 深蓝科技(默认)/ biz 浅色商务 / mono IDEA 黑亮 / light IDEA 白亮 / warm 温暖渐变;生成时写 `<html data-theme="THEME值">` 定默认,页面右下角换肤坞随点随换(localStorage 记忆(键按页内嵌唯一 ID 隔离、多份产物互不串台、改名/移动目录记忆不丢(生成时头部写 `<meta name="minutes-id" content="<UUID>">`,每次 crypto.randomUUID() 生成标准 UUID v4(8-4-4-4-12 十六进制,禁止手写变体、禁止沿用占位与旧值);落盘写文件前顺扫落盘目录下本技能命名的 html,读各文件 id meta 查重,撞号重掷至不重复))、?shot 截图模式与打印隐藏)
|
|
50
|
+
- 会议类型按 `resources/meeting-type-dictionary.md` 词典取要素侧重与行动项模板(未提类型按 ROLE 画像推断,推断不出用通用模板)
|
|
51
|
+
- 完整规则(要素提取 / 素材来源 / 写作风格约束 / 使用提示)见 `resources/content-rules.md`
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# 内容规则(五段式)
|
|
2
|
+
|
|
3
|
+
五段式骨架行业无关(任何行业、任何类型会议通用),要素侧重与行动项模板由会议类型词典适配。
|
|
4
|
+
|
|
5
|
+
## 会议要素提取
|
|
6
|
+
|
|
7
|
+
- 会议日期:优先用户口述(今天的会/昨天的会/上周三的会 → 按当前系统日期换算);口述未明确时从材料(文件名/文件头/图片中的日期)提取;都无则问用户一句「会议是哪天开的」再生成
|
|
8
|
+
- 会议主题:用户口述或材料标题;无主题时按议题概括(如「XX 项目进度协调会」)
|
|
9
|
+
- 系列名提取(SERIES_GROUP=auto/series 时):从会议主题中提取稳定系列名——去掉日期词/序号词/单次会议限定词(「11月12日产品周例会」→「产品周例会」;「第3次技术评审」→「技术评审」);类型词典词(周例会/评审会/复盘会等)可作系列名主体;提取结果落盘确认时报给用户可改口;提取不到 → 无系列名,按 SERIES_GROUP 回退
|
|
10
|
+
- 会议类型:话术含类型词(周例会/评审/复盘/客户会等)→ 按类型词典取要素侧重;未提 → 按 ROLE 画像推断最可能类型;推断不出 → 通用模板
|
|
11
|
+
- 地点/主持人/参会人:口述或材料中有则写全,缺失项写「未提及」;参会人按材料中的姓名如实列,不编造
|
|
12
|
+
- 文件名/目录用会议日期:见 `resources/disk-and-html.md`
|
|
13
|
+
|
|
14
|
+
## 段结构
|
|
15
|
+
|
|
16
|
+
**段一 会议信息**
|
|
17
|
+
- 主题 + 日期(精确到日)+ 时间(有则写)+ 地点(有则写)+ 主持人(有则写)+ 参会人(有则列)
|
|
18
|
+
|
|
19
|
+
**段二 会议结论**
|
|
20
|
+
- 一句话 TL;DR:这次会议拍板的核心结论(如「双周聚合发布节奏正式确认,单批 ≤6 版本,11-25 前完成验证前置改造」)
|
|
21
|
+
- 核心决策 2-5 项:会上明确的决定(定方案/定时间/定指标/定分工),每条一句话
|
|
22
|
+
|
|
23
|
+
**段三 议题讨论**
|
|
24
|
+
- 按议题逐个写:议题名 + 结论(该议题达成的共识或决定,未决则写「未决」+ 待办去向)+ 讨论要点 2-4 条(各方观点与关键事实,去口语、留数字)
|
|
25
|
+
- 议题 3-8 个为宜;口头闲聊/寒暄不写
|
|
26
|
+
|
|
27
|
+
**段四 决议与行动项**
|
|
28
|
+
- 每项三要素:事项(做什么,动词开头)+ 负责人(@某人或「待定」)+ 截止时间(YYYY-MM-DD 或「待定」)
|
|
29
|
+
- 负责人/截止时间缺失时写「待定」并在对话末尾提示用户补充,不编造
|
|
30
|
+
- 按截止时间先后排序;本段是汇报链源头——日报/周报/月报/季报生成时直接引用本纪要行动项
|
|
31
|
+
|
|
32
|
+
**段五 下次会议**
|
|
33
|
+
- 时间(如 2026-11-18 周三 14:00)+ 主题 + 地点(有则写);均未知写「待定」
|
|
34
|
+
|
|
35
|
+
## 写作风格
|
|
36
|
+
|
|
37
|
+
- 中文顿号序号(1、2、3),段内条目数按上述区间;不足处写「暂无」
|
|
38
|
+
- 去口语化:删除「嗯/那个/然后」等口头词,保留事实、数字与结论;发言要点改第三人称陈述句
|
|
39
|
+
- 结论先行:每个议题先给结论再给讨论过程;数字与时间原样保留
|
|
40
|
+
- 客观中立:纪要不是总结,不掺入生成者评价;不同意见并列呈现,不偏袒
|
|
41
|
+
- 五问自检:①议题是否逐条有结论?②行动项是否三要素齐全?③数字与时间是否如实?④口语是否去净?⑤不同意见是否都记了?任一不过,改写后再输出
|
|
42
|
+
- md/txt 正文含生成时间行(精确到时分秒,如 2026-11-12 19:10:38)
|
|
43
|
+
|
|
44
|
+
## 素材来源
|
|
45
|
+
|
|
46
|
+
- 会话口述:用户直接口述会议过程(「会上说了三件事…」)逐条记录
|
|
47
|
+
- 文字材料:用户贴的会议文字/聊天记录,按五段归类
|
|
48
|
+
- 文件:md/txt 直接 Read 文本;docx/pdf 优先尝试 pandoc 转文本(无 pandoc 则请用户粘贴文字);录音/视频文件不能直接解析——提示用户提供转写文本,或引导用户口述要点
|
|
49
|
+
- 图片:逐张 Read 识别(会议白板/聊天截图/议程照片),提取会议要素与议题;图片模糊/内容读不清时:先把已提取部分展示给用户确认或补充,不瞎编没读到的内容
|
|
50
|
+
- DATA_SOURCES 清单中 type: file 的文件 Read 全文、目录逐个 Read 文本文件提取要点(二进制跳过、路径无效静默跳过);未知 type 忽略该项并在生成时提示
|
|
51
|
+
- 素材不足的段写「暂无」并提示用户可补充素材
|
|
52
|
+
|
|
53
|
+
## 纯文字模式与汇报链联动
|
|
54
|
+
|
|
55
|
+
- 纯文字/图片/文件整理模式:用户提供什么用什么,按五段结构归类
|
|
56
|
+
- 汇报链联动:本纪要的行动项是日报/周报/月报/季报的任务素材源头——生成日报等报表时,若 DATA_SOURCES 或用户素材中含会议纪要文件,其行动项可直接列为任务/进度来源;反之,生成纪要时可引用已有报表中的进度数据作为议题事实依据
|
|
57
|
+
- 同一会议重复生成默认覆盖;说「保留之前的/另存」→ 文件名追加时间戳
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# 落盘与 HTML(会议纪要版式)
|
|
2
|
+
|
|
3
|
+
> ⛔ **Reference 铁律(最高优先)**:本目录 `reference.html` 是定稿样式源码。生成 HTML 时必须先 Read `resources/reference.html` 与本文件两份,以 reference.html 为骨架模板逐处替换数据(标题/日期/五段条目/TL;DR 摘要/决策列表/议题卡/行动项表格行/下次会议卡),本文件的描述是参数解释、变体规则与禁止项;两者冲突时**以 reference.html 为准**。修改本 skill 的 HTML 效果时,必须同步更新 `resources/reference.html` 与本文档的对应描述,禁止只改一处。
|
|
4
|
+
|
|
5
|
+
> HTML 视觉体系与日报/周报/月报/季报/年报同源(深蓝面板 + 五主题令牌 + 发光特效 + 复制按钮 + 换肤坞 + 截图模式),生成时以 reference.html 为唯一样式真相源,本文件只列会议纪要版式差异与要点。
|
|
6
|
+
|
|
7
|
+
## 落盘
|
|
8
|
+
|
|
9
|
+
- FORMATS 默认 [md, txt, html, content-png]:md/txt/html 文件名 `meeting-minutes-YYYY-MM-DD-{主题slug}.<格式>`(主题 slug 用简洁英文或拼音,如 spec-release;无主题时省略 slug 段:`meeting-minutes-YYYY-MM-DD.html`)、截图 `meeting-minutes-YYYY-MM-DD-{主题slug}-content.png`;txt 为纯文本版;DISK: false 时全部不落盘
|
|
10
|
+
- 目录:按 SERIES_GROUP 规则(auto/series/off,见 user-config.md)——auto(默认)从会议主题提取稳定系列名(去日期词/序号词:产品周例会/技术评审/客户会议),提取到则 `{DIR}/meetings/{系列名}/`;未提取到回退 `{DIR}/meetings/YYYY-MM/` 月份平铺(DIR 按系统取 DIR_MAC/DIR_WIN,不存在回退用户主目录下 reports);目录已存在直接复用,只覆盖本清单内同名文件;目录内存在非本 skill 命名的其它文件时对话中提示用户「该目录内已有其它文件,本次会议纪要已与它们并列存放,未做任何改动」
|
|
11
|
+
- 系列名落盘确认时报给用户(「本次归入系列目录『产品周例会/』」),用户可改口:说「这个系列叫 XX」→ 当次用新名建目录;说「以后这个系列叫 XX」→ 永久记住该系列名(写入 user-config.md 的 SERIES_GROUP 注释旁,后续同主题会议沿用);系列目录名清洗:非法字符 / \ : * ? " < > | 替换为 -,首尾空格去掉
|
|
12
|
+
- 一次性整理指令:用户说「把我旧纪要按系列整理」→ 扫 `{DIR}/meetings/` 下全部 `meeting-minutes-*` 文件(含月份平铺目录内与已建系列目录内的)→ 从文件名 slug 或读 md 头部主题提取系列名 → 列移动计划(从哪 → 到哪,md/txt/html/png 全套)AskUserQuestion 确认 → 移动归置 → 报告三段式:✅ 已整理清单 / ⚠️ 无法归类留在原地的清单 / 🟡 失败项原因;移动后不删空月份目录(留给用户自行处置);整理只移动不改内容
|
|
13
|
+
- 对话中照常输出 md 正文(不受 FORMATS 影响);OPEN_HTML: true 且落盘了 html 时自动打开浏览器(macOS:open <html文件>;Windows PowerShell:Start-Process <html文件>)
|
|
14
|
+
- FORMATS 含 content-png 时生成内容区截图:只截五张分节卡片整体(会议信息/会议结论/议题讨论/决议与行动项/下次会议,不含头部标题区/复制按钮/页脚,四周保留对称合适的外边距约 40px 留白);html 内置 `?shot=content` 参数(页面 JS 检测后隐藏 header-card/footer、body 四周 padding 统一 40px,正常浏览不受影响);用 Chrome headless 访问带参 URL 截图(路径按系统选:macOS=`/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`;Windows 按序探测 `C:\Program Files\Google\Chrome\Application\chrome.exe` → `C:\Program Files (x86)\Google\Chrome\Application\chrome.exe` → `%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe`,经 node child_process 执行 `--headless --disable-gpu --no-sandbox --hide-scrollbars --user-data-dir=<临时目录> --screenshot=<png路径> --window-size=760,<估算高度> --virtual-time-budget=4000 "file:///<html路径>?shot=content"`(Windows 下 URL 写作 file:///C:/...,用 node url.pathToFileURL 生成),跑完删除临时目录;禁止用 `--headless=new`(单例模式会静默失败生成占位图);若 Chrome 不存在则换 Edge,都找不到时跳过截图并在对话注明);高度估算基准(760 宽窄窗实测:信息头 6 行 → 议题 3 卡 → 行动项 5 行表 → 下次会议卡 → 内容区约 1650px,图高 = 内容区 + 上下留白各 40px):每增减 1 个议题卡 ±~90、1 行行动项 ±~46、1 项决策 ±~34、信息头每多一行 ±~26;实测高度显著高于按 65~70px/条的旧估算,禁止低估导致截断,截图后用 Read 校验:五张卡片整体完整在图内、无头部/按钮/页脚残留、四周留白对称合适、不截断;底部留白过大减高度、截断加高度重截
|
|
15
|
+
|
|
16
|
+
## HTML 会议纪要版式要点(基于 reference.html)
|
|
17
|
+
|
|
18
|
+
- 头部卡片:标题「{主题}会议纪要」(主题缺失则「{日期} 会议纪要」)+ 副标题(日期 + 周几 + 起止时间 + 地点,未知项省略)+ 类型徽章(周例会/项目评审/复盘会等,按会议类型词典取词)
|
|
19
|
+
- 信息头节(sec-info):两列网格(.info-grid:左列 11px muted 标签 时间/地点/主持人/参会人,右列 13px 正文;参会人用 12px chips 胶囊横排,其余值纯文本);无内容行省略
|
|
20
|
+
- 复制按钮(.copy-wrap):位于头部卡片内(标题/副标题/类型徽章之后),与日报/周报/月报/季报/年报同款「卡片内一键复制」,青色渐变胶囊居中
|
|
21
|
+
- 结论节(sec-sum):一句话 TL;DR 引言行(同报表族 .tldr-line)+ 核心决策 2-5 条(.decision-row:青色小圆点 + 决策文案 14.5px)
|
|
22
|
+
- 议题节(sec-top):议题卡 3-8 张(.topic-card:议题名 15px 加粗 accent 色 + 结论行「结论:」badge 样式(已决:淡青底青字;未决:淡橙底橙字)+ 讨论要点 12.5px muted 每行以青点引导)
|
|
23
|
+
- 行动项节(sec-act):三列表格(.act-table:表头 事项/负责人/截止时间/状态 11px muted;行动项行 13.5px;负责人 .owner 胶囊(「待定」橙色胶囊);截止时间 12.5px 等宽;状态徽章 .st:已完成 --green 绿底、进行中 --accent 青底、待办 muted 灰底);行数 3-10,超 10 行拆两组或合并
|
|
24
|
+
- 下次会议节(sec-next):信息行(时间 + 主题 + 地点,用 .next-line 与 muted 标签列);均未知写「待定」
|
|
25
|
+
- 页脚 10px muted 文字,署名固定 GENERATED BY AI TEAM · <日期>
|
|
26
|
+
- 五段分节列表,条目保持中文顿号序号;md/txt 版同条目依次写,文本格式不变
|