skill-forge-hub 0.3.0 → 0.5.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.
- package/CHANGELOG.md +52 -0
- package/README.md +83 -27
- package/annual-report/SKILL.md +17 -10
- package/annual-report/resources/content-rules.md +11 -9
- package/annual-report/resources/data-collection.md +3 -3
- package/annual-report/resources/date-parsing.md +1 -1
- package/annual-report/resources/disk-and-html.md +10 -10
- package/annual-report/resources/industry-dictionary.md +3 -1
- package/annual-report/resources/reference.html +146 -52
- package/annual-report/resources/usage-guide.md +56 -15
- package/annual-report/user-config.md +3 -2
- package/article-to-html/SKILL.md +23 -0
- package/article-to-html/design-system.md +86 -21
- package/article-to-html/user-config.md +18 -0
- package/cli.js +72 -23
- package/daily-report/SKILL.md +16 -8
- package/daily-report/resources/content-rules.md +27 -23
- package/daily-report/resources/data-collection.md +5 -5
- package/daily-report/resources/date-parsing.md +1 -1
- package/daily-report/resources/disk-and-html.md +2 -2
- package/daily-report/resources/industry-dictionary.md +3 -1
- package/daily-report/resources/reference.html +175 -73
- package/daily-report/resources/usage-guide.md +4 -4
- package/daily-report/user-config.md +3 -2
- package/deck-stage/SKILL.md +80 -0
- package/deck-stage/package-lock.json +172 -0
- package/deck-stage/package.json +15 -0
- package/deck-stage/resources/cover-template.html +139 -0
- package/deck-stage/resources/data-schema.md +111 -0
- package/deck-stage/resources/pptx-builder.js +394 -0
- package/deck-stage/resources/usage-guide.md +20 -0
- package/deck-stage/user-config.md +26 -0
- package/magic-deck/SKILL.md +20 -11
- package/magic-deck/resources/deck-spec.md +412 -51
- package/magic-deck/resources/reference.html +2096 -112
- package/magic-deck/resources/usage-guide.md +42 -0
- package/magic-deck/user-config.md +10 -7
- package/meta-forge/SKILL.md +2 -0
- package/meta-forge/resources/forge-rules.md +1 -0
- package/meta-forge/resources/usage-guide.md +1 -1
- package/package.json +16 -4
- package/prompt-pouch/SKILL.md +77 -0
- package/prompt-pouch/resources/data-format.md +67 -0
- package/prompt-pouch/resources/reference.html +2038 -0
- package/prompt-pouch/resources/usage-guide.md +32 -0
- package/prompt-pouch/user-config.md +22 -0
- package/weekly-report/SKILL.md +16 -8
- package/weekly-report/resources/content-rules.md +38 -27
- package/weekly-report/resources/data-collection.md +5 -5
- package/weekly-report/resources/date-parsing.md +1 -1
- package/weekly-report/resources/disk-and-html.md +2 -2
- package/weekly-report/resources/industry-dictionary.md +5 -3
- package/weekly-report/resources/reference.html +226 -104
- package/weekly-report/resources/usage-guide.md +6 -6
- package/weekly-report/user-config.md +4 -3
|
@@ -5,17 +5,60 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>今日日报 - 20261106</title>
|
|
7
7
|
<style>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
--
|
|
11
|
-
--
|
|
12
|
-
|
|
8
|
+
/* ═══ 四主题令牌:12 核心契约(与 magic-deck 一致)+ 报告扩展(发光/氛围/语义色);html[data-theme] 运行时切换,THEME 生成时定默认 ═══ */
|
|
9
|
+
:root, [data-theme="tech"]{
|
|
10
|
+
--bg:#0a1929; --bg2:#071525; --panel:rgba(11,30,55,.9); --panel-solid:#0b1e37;
|
|
11
|
+
--card-shadow:0 1px 0 rgba(255,255,255,.05) inset, 0 12px 32px rgba(1,6,16,.5), 0 0 24px rgba(14,165,233,.15);
|
|
12
|
+
--text:#bae6fd; --muted:#5b7fa5; --accent:#0ea5e9; --accent2:#14b8a6;
|
|
13
|
+
--border:rgba(14,165,233,.18); --glow:rgba(14,165,233,.35); --glow-soft:rgba(14,165,233,.15);
|
|
14
|
+
--title-grad:linear-gradient(90deg,#7dd3fc,#0ea5e9 45%,#818cf8);
|
|
15
|
+
--tag-bg:rgba(14,165,233,.12);
|
|
16
|
+
--scan:rgba(0,240,255,.2); --scan-dim:rgba(0,240,255,.05);
|
|
17
|
+
--heat:rgba(14,165,233,.55);
|
|
18
|
+
--green:#14b8a6; --orange:#f97316; --rose:#f43f5e; --cp-a:rgba(186,230,253,.15); --cp-b:rgba(240,252,255,.92); --cp-tip:#fff; --cp-glow0:0 0 5px 2px rgba(186,230,253,.6); --cp-glow1:0 0 7px 2.5px rgba(224,254,255,.85); --cpd-a:rgba(224,254,255,.25); --cpd-b:rgba(255,255,255,.96); --cpd-tip:#fff; --cpd-glow0:0 0 6px 2.5px rgba(224,254,255,.7); --cpd-glow1:0 0 8px 3px rgba(255,255,255,.85); --cm-f0:drop-shadow(0 0 1.5px rgba(255,255,255,.9)) drop-shadow(0 0 7px rgba(255,255,255,.5)) drop-shadow(0 0 14px rgba(224,254,255,.35)) drop-shadow(0 0 22px rgba(224,254,255,.3)); --cm-f1:drop-shadow(0 0 3px rgba(255,255,255,1)) drop-shadow(0 0 9px rgba(255,255,255,.65)) drop-shadow(0 0 18px rgba(255,255,255,.35)) drop-shadow(0 0 28px rgba(224,254,255,.25)) drop-shadow(0 0 10px rgba(224,254,255,.45));
|
|
19
|
+
}
|
|
20
|
+
[data-theme="biz"]{
|
|
21
|
+
--bg:#e8ecf5; --bg2:#dde3ef; --panel:rgba(255,255,255,.97); --panel-solid:#ffffff;
|
|
22
|
+
--card-shadow:0 1px 2px rgba(15,23,42,.05), 0 10px 28px rgba(15,23,42,.12);
|
|
23
|
+
--text:#1e293b; --muted:#64748b; --accent:#2563eb; --accent2:#0891b2;
|
|
24
|
+
--border:rgba(37,99,235,.14); --glow:rgba(37,99,235,.18); --glow-soft:rgba(37,99,235,.12);
|
|
25
|
+
--title-grad:linear-gradient(90deg,#1e40af,#2563eb 55%,#0891b2);
|
|
26
|
+
--tag-bg:rgba(37,99,235,.08);
|
|
27
|
+
--scan:rgba(37,99,235,.14); --scan-dim:rgba(37,99,235,.04);
|
|
28
|
+
--heat:rgba(37,99,235,.55);
|
|
29
|
+
--green:#0d9488; --orange:#ea580c; --rose:#e11d48;
|
|
30
|
+
}
|
|
31
|
+
[data-theme="mono"]{
|
|
32
|
+
--bg:#f2f2f4; --bg2:#e4e4e8; --panel:rgba(255,255,255,.98); --panel-solid:#ffffff;
|
|
33
|
+
--card-shadow:0 1px 2px rgba(0,0,0,.06), 0 10px 28px rgba(0,0,0,.1);
|
|
34
|
+
--text:#16181d; --muted:#6b7280; --accent:#111111; --accent2:#4b5563;
|
|
35
|
+
--border:rgba(17,17,17,.14); --glow:rgba(17,17,17,.08); --glow-soft:rgba(17,17,17,.1);
|
|
36
|
+
--title-grad:linear-gradient(90deg,#111,#333 60%,#666);
|
|
37
|
+
--tag-bg:rgba(17,17,17,.06);
|
|
38
|
+
--scan:rgba(17,17,17,.1); --scan-dim:rgba(17,17,17,.04);
|
|
39
|
+
--heat:rgba(17,17,17,.55);
|
|
40
|
+
--green:#0f766e; --orange:#c2410c; --rose:#be123c;
|
|
41
|
+
}
|
|
42
|
+
[data-theme="warm"]{
|
|
43
|
+
--bg:#f7ebd9; --bg2:#efe0c8; --panel:rgba(255,250,243,.97); --panel-solid:#fffaf3;
|
|
44
|
+
--card-shadow:0 1px 2px rgba(120,72,24,.07), 0 10px 28px rgba(120,72,24,.13);
|
|
45
|
+
--text:#43301f; --muted:#8a7565; --accent:#d97706; --accent2:#ea580c;
|
|
46
|
+
--border:rgba(217,119,6,.18); --glow:rgba(217,119,6,.22); --glow-soft:rgba(217,119,6,.14);
|
|
47
|
+
--title-grad:linear-gradient(90deg,#b45309,#d97706 50%,#ea580c);
|
|
48
|
+
--tag-bg:rgba(217,119,6,.1);
|
|
49
|
+
--scan:rgba(217,119,6,.16); --scan-dim:rgba(217,119,6,.04);
|
|
50
|
+
--heat:rgba(217,119,6,.55);
|
|
51
|
+
--green:#0d9488; --orange:#c2410c; --rose:#be123c;
|
|
52
|
+
}
|
|
53
|
+
/* 浅色主题下星点氛围自然退隐 */
|
|
54
|
+
[data-theme="biz"] .stars, [data-theme="mono"] .stars, [data-theme="warm"] .stars{ opacity:.28; }
|
|
55
|
+
|
|
13
56
|
*{margin:0;padding:0;box-sizing:border-box;}
|
|
14
57
|
html,body{background:var(--bg);}
|
|
15
58
|
body{
|
|
16
59
|
font-family:ui-monospace,'SF Mono',SFMono-Regular,Menlo,Consolas,'Microsoft YaHei',monospace;
|
|
17
60
|
color:var(--text); font-weight:400; padding:40px 20px 40px;
|
|
18
|
-
|
|
61
|
+
min-height:100vh; position:relative; overflow-x:hidden;
|
|
19
62
|
}
|
|
20
63
|
body::before{
|
|
21
64
|
content:''; position:fixed; inset:0; z-index:0; pointer-events:none; opacity:.04;
|
|
@@ -23,7 +66,7 @@ body::before{
|
|
|
23
66
|
}
|
|
24
67
|
.grid-pattern{
|
|
25
68
|
position:fixed; inset:0; z-index:0; pointer-events:none;
|
|
26
|
-
background-image:linear-gradient(
|
|
69
|
+
background-image:linear-gradient(var(--scan-dim) 1px, transparent 1px),linear-gradient(90deg, var(--scan-dim) 1px, transparent 1px);
|
|
27
70
|
background-size:60px 60px;
|
|
28
71
|
}
|
|
29
72
|
.stars{
|
|
@@ -40,11 +83,11 @@ body::before{
|
|
|
40
83
|
}
|
|
41
84
|
.scanlines{
|
|
42
85
|
position:fixed; inset:0; z-index:999; pointer-events:none;
|
|
43
|
-
background:repeating-linear-gradient(0deg, transparent 0 2px,
|
|
86
|
+
background:repeating-linear-gradient(0deg, transparent 0 2px, var(--scan-dim) 2px 4px);
|
|
44
87
|
}
|
|
45
88
|
.scanband{
|
|
46
89
|
position:fixed; left:0; right:0; height:150px; z-index:998; pointer-events:none;
|
|
47
|
-
background:linear-gradient(180deg, transparent,
|
|
90
|
+
background:linear-gradient(180deg, transparent, var(--scan-dim) 50%, transparent);
|
|
48
91
|
animation:scanMove 11s linear infinite;
|
|
49
92
|
}
|
|
50
93
|
@keyframes scanMove{ from{top:-22%;} to{top:112%;} }
|
|
@@ -52,22 +95,22 @@ body::before{
|
|
|
52
95
|
width:clamp(640px, 60%, 1200px); margin:0 auto; position:relative; z-index:1;
|
|
53
96
|
}
|
|
54
97
|
.header-card{
|
|
55
|
-
position:relative; background:var(--
|
|
98
|
+
position:relative; background:var(--panel-solid);
|
|
56
99
|
background-image:repeating-linear-gradient(180deg, rgba(255,255,255,.012) 0 1px, transparent 1px 8px);
|
|
57
|
-
border-top:1px solid var(--
|
|
100
|
+
border-top:1px solid var(--border); border-bottom:1px solid var(--border);
|
|
58
101
|
border-radius:6px; padding:38px 36px 26px; text-align:center; overflow:hidden;
|
|
59
|
-
box-shadow:
|
|
102
|
+
box-shadow:var(--card-shadow);
|
|
60
103
|
margin-bottom:18px;
|
|
61
104
|
}
|
|
62
105
|
.card-glow{
|
|
63
106
|
position:absolute; inset:0; pointer-events:none; transform-origin:top center;
|
|
64
|
-
background:radial-gradient(ellipse at 50% 10%,
|
|
107
|
+
background:radial-gradient(ellipse at 50% 10%, var(--glow), transparent 70%);
|
|
65
108
|
opacity:.5; animation:cardGlow 3s ease-in-out infinite;
|
|
66
109
|
}
|
|
67
110
|
@keyframes cardGlow{ 0%,100%{opacity:.5; transform:scale(1);} 50%{opacity:1; transform:scale(1.6);} }
|
|
68
111
|
.scanline-el{ position:absolute; pointer-events:none; z-index:3; }
|
|
69
|
-
.scan-x{ left:0; right:0; height:1px; background:linear-gradient(90deg, transparent, var(--
|
|
70
|
-
.scan-y{ top:0; bottom:0; width:1px; background:linear-gradient(180deg, transparent, var(--
|
|
112
|
+
.scan-x{ left:0; right:0; height:1px; background:linear-gradient(90deg, transparent, var(--accent), transparent); }
|
|
113
|
+
.scan-y{ top:0; bottom:0; width:1px; background:linear-gradient(180deg, transparent, var(--accent), transparent); }
|
|
71
114
|
.scan-top{ top:0; animation:scanX 3s linear infinite; }
|
|
72
115
|
.scan-right{ right:0; animation:scanY 3s linear infinite; }
|
|
73
116
|
.scan-bottom{ bottom:0; animation:scanXrev 3s linear infinite; }
|
|
@@ -78,53 +121,53 @@ body::before{
|
|
|
78
121
|
@keyframes scanYrev{ from{transform:translateY(100%);} to{transform:translateY(-100%);} }
|
|
79
122
|
h1{
|
|
80
123
|
position:relative; z-index:2; font-size:30px; font-weight:900; letter-spacing:1px;
|
|
81
|
-
background:
|
|
124
|
+
background:var(--title-grad);
|
|
82
125
|
-webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;
|
|
83
|
-
text-shadow:0 0 20px
|
|
126
|
+
text-shadow:0 0 20px var(--glow), 0 0 60px var(--glow-soft);
|
|
84
127
|
animation:titleGlow 3s ease-in-out infinite;
|
|
85
128
|
}
|
|
86
129
|
@keyframes titleGlow{
|
|
87
|
-
0%,100%{ filter:drop-shadow(0 0 20px
|
|
88
|
-
50%{ filter:drop-shadow(0 0 30px
|
|
130
|
+
0%,100%{ filter:drop-shadow(0 0 20px var(--glow)) drop-shadow(0 0 60px var(--glow-soft)); }
|
|
131
|
+
50%{ filter:drop-shadow(0 0 30px var(--glow)) drop-shadow(0 0 80px var(--glow-soft)); }
|
|
89
132
|
}
|
|
90
133
|
.header-sub{ position:relative; z-index:2; font-size:13px; color:var(--muted); margin-top:10px; letter-spacing:2px; }
|
|
91
134
|
.header-badge{
|
|
92
|
-
position:relative; z-index:2; display:inline-block; margin-top:12px; font-size:11px; color:var(--
|
|
93
|
-
border:1px solid
|
|
94
|
-
background:
|
|
135
|
+
position:relative; z-index:2; display:inline-block; margin-top:12px; font-size:11px; color:var(--accent);
|
|
136
|
+
border:1px solid var(--border); border-radius:999px; padding:3px 12px;
|
|
137
|
+
background:var(--tag-bg); text-shadow:0 0 6px var(--glow); letter-spacing:1px;
|
|
95
138
|
}
|
|
96
139
|
.summary-line{
|
|
97
140
|
position:relative; z-index:2; display:flex; gap:10px; max-width:540px; margin:18px auto 0;
|
|
98
141
|
align-items:flex-start;
|
|
99
142
|
}
|
|
100
143
|
.summary-tag{
|
|
101
|
-
flex:0 0 auto; font-size:10px; font-weight:700; color:var(--
|
|
102
|
-
border:1px solid
|
|
103
|
-
background:
|
|
144
|
+
flex:0 0 auto; font-size:10px; font-weight:700; color:var(--accent); letter-spacing:1px;
|
|
145
|
+
border:1px solid var(--border); border-radius:4px; padding:2px 6px;
|
|
146
|
+
background:var(--tag-bg); text-shadow:0 0 6px var(--glow); margin-top:2px;
|
|
104
147
|
}
|
|
105
148
|
.summary-text{ font-size:12.5px; color:var(--text); line-height:1.75; text-align:left; }
|
|
106
149
|
.copy-wrap{ position:relative; z-index:2; margin-top:20px; display:flex; justify-content:center; }
|
|
107
150
|
.copy-btn{
|
|
108
151
|
display:flex; align-items:center; gap:8px; cursor:pointer; border:none; border-radius:999px;
|
|
109
152
|
padding:10px 28px; font-family:inherit; font-size:14px; color:#fff; letter-spacing:1px;
|
|
110
|
-
background:linear-gradient(90deg, var(--
|
|
111
|
-
box-shadow:0 0 30px
|
|
153
|
+
background:linear-gradient(90deg, var(--accent), var(--accent2));
|
|
154
|
+
box-shadow:0 0 30px var(--glow); transition:box-shadow .25s, transform .15s;
|
|
112
155
|
}
|
|
113
|
-
.copy-btn:hover{ box-shadow:0 0 45px
|
|
156
|
+
.copy-btn:hover{ box-shadow:0 0 45px var(--glow); transform:translateY(-1px); }
|
|
114
157
|
.copy-btn:active{ transform:scale(.97); }
|
|
115
158
|
.copy-btn svg{ width:16px; height:16px; flex:0 0 auto; }
|
|
116
159
|
.copy-btn .check{ display:none; }
|
|
117
160
|
.copy-btn.copied .copy{ display:none; }
|
|
118
161
|
.copy-btn.copied .check{ display:block; }
|
|
119
162
|
.section{
|
|
120
|
-
position:relative; background:var(--
|
|
163
|
+
position:relative; background:var(--panel-solid);
|
|
121
164
|
background-image:repeating-linear-gradient(180deg, rgba(255,255,255,.012) 0 1px, transparent 1px 8px);
|
|
122
|
-
border-top:1px solid var(--
|
|
165
|
+
border-top:1px solid var(--border); border-bottom:1px solid var(--border);
|
|
123
166
|
border-radius:6px; overflow:hidden; margin-bottom:18px;
|
|
124
|
-
box-shadow:
|
|
167
|
+
box-shadow:var(--card-shadow);
|
|
125
168
|
transition:transform .2s, box-shadow .2s;
|
|
126
169
|
}
|
|
127
|
-
.section:hover{ transform:perspective(900px) translateY(-2px) rotateY(calc(var(--mx,0)*2.5deg)) rotateX(calc(var(--my,0)*-2.5deg)); box-shadow:
|
|
170
|
+
.section:hover{ transform:perspective(900px) translateY(-2px) rotateY(calc(var(--mx,0)*2.5deg)) rotateX(calc(var(--my,0)*-2.5deg)); box-shadow:var(--card-shadow), 0 0 28px var(--glow-soft); }
|
|
128
171
|
.section::before{
|
|
129
172
|
content:''; position:absolute; left:0; top:0; bottom:0; width:8px; z-index:2;
|
|
130
173
|
}
|
|
@@ -152,17 +195,17 @@ h1{
|
|
|
152
195
|
}
|
|
153
196
|
.sec-date{
|
|
154
197
|
margin-left:auto; flex:0 0 auto; font-size:11px; color:var(--muted); padding:3px 10px;
|
|
155
|
-
border-radius:999px; border:1px solid
|
|
198
|
+
border-radius:999px; border:1px solid var(--border); background:var(--tag-bg);
|
|
156
199
|
letter-spacing:1px;
|
|
157
200
|
}
|
|
158
201
|
ol{ list-style:none; padding:0 12px; }
|
|
159
202
|
li{
|
|
160
203
|
display:flex; align-items:flex-start; gap:10px; padding:10px;
|
|
161
|
-
border-bottom:1px dashed
|
|
204
|
+
border-bottom:1px dashed var(--border); border-radius:4px;
|
|
162
205
|
transition:background .15s;
|
|
163
206
|
}
|
|
164
207
|
li:last-child{ border-bottom:none; }
|
|
165
|
-
li:hover{ background:
|
|
208
|
+
li:hover{ background:var(--tag-bg); }
|
|
166
209
|
.idx{
|
|
167
210
|
flex:0 0 auto; width:28px; height:28px; border-radius:50%; position:relative;
|
|
168
211
|
display:flex; align-items:center; justify-content:center; color:#fff;
|
|
@@ -194,8 +237,12 @@ li:hover .idx{ transform:scale(1.18) rotate(-4deg); font-size:14px; }
|
|
|
194
237
|
.desc{ font-size:15px; line-height:1.65; color:var(--text); }
|
|
195
238
|
.meta{ font-size:12px; color:var(--muted); margin-top:5px; }
|
|
196
239
|
.meta .qt{ color:#7fa8cc; }
|
|
197
|
-
.meta b{ color:var(--
|
|
198
|
-
.
|
|
240
|
+
.meta b{ color:var(--accent); font-weight:900; margin:0 2px; text-shadow:0 0 8px var(--border); }
|
|
241
|
+
.advice{ font-size:12px; color:var(--accent); margin-top:6px; }
|
|
242
|
+
.advice b{ font-weight:900; }
|
|
243
|
+
.owner{ font-size:12px; color:#a78bfa; margin-top:4px; }
|
|
244
|
+
.owner b{ font-weight:900; }
|
|
245
|
+
.pbar-track{ position:relative; margin-top:9px; height:5px; border-radius:999px; background:var(--tag-bg); }
|
|
199
246
|
.pbar-fill{
|
|
200
247
|
display:block; position:relative; height:100%; border-radius:999px; width:0;
|
|
201
248
|
transition:width 1.1s cubic-bezier(.3,.8,.4,1); /* 与流星扫过同参数:首次加载进度与流星同步增长 */
|
|
@@ -214,9 +261,10 @@ li:hover .idx{ transform:scale(1.18) rotate(-4deg); font-size:14px; }
|
|
|
214
261
|
background:radial-gradient(circle at 35% 30%, #fed7aa, #fdba74 55%, #fb923c 100%);
|
|
215
262
|
box-shadow:0 0 8px rgba(249,115,22,.7);
|
|
216
263
|
}
|
|
217
|
-
.pbar-done .pbar-track.sheen-on .pbar-fill::before
|
|
218
|
-
.pbar-plan .pbar-track.sheen-on .pbar-fill::before{ animation:
|
|
219
|
-
@keyframes
|
|
264
|
+
.pbar-done .pbar-track.sheen-on .pbar-fill::before{ animation:dotPulseDone 1.1s; }
|
|
265
|
+
.pbar-plan .pbar-track.sheen-on .pbar-fill::before{ animation:dotPulsePlan 1.1s; }
|
|
266
|
+
@keyframes dotPulseDone{ 90%{ filter:brightness(2) drop-shadow(0 0 6px rgba(45,212,191,.85)); } }
|
|
267
|
+
@keyframes dotPulsePlan{ 90%{ filter:brightness(2) drop-shadow(0 0 6px rgba(249,115,22,.85)); } }
|
|
220
268
|
.pbar-sweep{
|
|
221
269
|
position:absolute; left:0; top:50%; transform:translateY(-50%); height:16px; width:0;
|
|
222
270
|
z-index:1; pointer-events:none; opacity:0;
|
|
@@ -228,15 +276,15 @@ li:hover .idx{ transform:scale(1.18) rotate(-4deg); font-size:14px; }
|
|
|
228
276
|
content:''; position:absolute; inset:0; z-index:2;
|
|
229
277
|
clip-path:polygon(0% 50%, 3% 36%, 10% 18%, 24% 4%, 42% 0%, 60% 1%, 78% 6%, 92% 17%, 99% 33%, 100% 50%, 99% 67%, 92% 83%, 78% 94%, 60% 99%, 42% 100%, 24% 96%, 10% 82%, 3% 64%);
|
|
230
278
|
background:
|
|
231
|
-
linear-gradient(90deg,
|
|
232
|
-
radial-gradient(circle 2px at 40% 50
|
|
233
|
-
filter:
|
|
279
|
+
linear-gradient(90deg,var(--cp-a),var(--cp-b) 30%,var(--cp-tip) 46%,var(--cp-tip) 58%,var(--cp-b) 72%,var(--cp-a)),
|
|
280
|
+
radial-gradient(circle 2px at 40% 50%,var(--cp-tip),var(--cp-b) 55%,var(--cp-a) 85%,transparent);
|
|
281
|
+
filter:var(--cm-f0);
|
|
234
282
|
}
|
|
235
283
|
|
|
236
284
|
.pbar-comet::after{
|
|
237
285
|
content:''; position:absolute; right:40%; top:50%; transform:translateY(-50%);
|
|
238
286
|
width:68px; height:10px; z-index:0;
|
|
239
|
-
background:linear-gradient(90deg,
|
|
287
|
+
background:linear-gradient(90deg,transparent,var(--cp-b) 25%,var(--cp-tip) 60%,var(--cp-tip) 100%);
|
|
240
288
|
clip-path:polygon(0 50%, 10% 30%, 100% 0, 100% 100%, 10% 70%);
|
|
241
289
|
mask-image:linear-gradient(90deg, transparent 0%, #000 20%, #000 100%);
|
|
242
290
|
-webkit-mask-image:linear-gradient(90deg, transparent 0%, #000 20%, #000 100%);
|
|
@@ -245,24 +293,28 @@ li:hover .idx{ transform:scale(1.18) rotate(-4deg); font-size:14px; }
|
|
|
245
293
|
/* 流星剥落粒子:从光核中后部诞生、0~8% 快速渐显、沿水平线加速后飘、渐小渐隐(椭圆各异不规则、明灭发光,与主体 2.4s 呼吸不同频) */
|
|
246
294
|
.pbar-comet .cp-deep{ animation:cpFlowDeep 1.4s linear infinite; }
|
|
247
295
|
@keyframes cpFlowDeep{
|
|
248
|
-
0%{ opacity:0; transform:translate3d(0,0,0) scale(.3) rotate(var(--r,0deg)); box-shadow:
|
|
296
|
+
0%{ opacity:0; transform:translate3d(0,0,0) scale(.3) rotate(var(--r,0deg)); box-shadow:var(--cpd-glow0); }
|
|
249
297
|
8%{ opacity:1; transform:translate3d(calc(var(--dx,-60px)*.01), calc(var(--dy,0)*.01), 0) scale(1) rotate(var(--r,0deg)); }
|
|
250
298
|
35%{ transform:translate3d(calc(var(--dx,-60px)*.08), calc(var(--dy,0)*.30), 0) scale(.78) rotate(var(--r,0deg)); }
|
|
251
|
-
55%{ opacity:.85; transform:translate3d(calc(var(--dx,-60px)*.38), calc(var(--dy,0)*.10), 0) scale(.4) rotate(var(--r,0deg)); box-shadow:
|
|
252
|
-
100%{ opacity:0; transform:translate3d(var(--dx,-60px), calc(var(--dy,0)*.05), 0) scale(.06) rotate(var(--r,0deg)); box-shadow:0 0 1px 0
|
|
299
|
+
55%{ opacity:.85; transform:translate3d(calc(var(--dx,-60px)*.38), calc(var(--dy,0)*.10), 0) scale(.4) rotate(var(--r,0deg)); box-shadow:var(--cpd-glow1); }
|
|
300
|
+
100%{ opacity:0; transform:translate3d(var(--dx,-60px), calc(var(--dy,0)*.05), 0) scale(.06) rotate(var(--r,0deg)); box-shadow:0 0 1px 0 transparent; }
|
|
253
301
|
}
|
|
254
302
|
.cp{
|
|
255
303
|
position:absolute; border-radius:50%; opacity:0; z-index:1; pointer-events:none;
|
|
256
|
-
background:linear-gradient(90deg,
|
|
257
|
-
box-shadow:
|
|
304
|
+
background:linear-gradient(90deg, var(--cp-a), var(--cp-b) 45%, var(--cp-tip) 86%);
|
|
305
|
+
box-shadow:var(--cp-glow0);
|
|
258
306
|
animation:cpFlow 1.4s linear infinite;
|
|
259
307
|
}
|
|
308
|
+
.cp-deep{ /* 全白发光带 7 粒:与浅带同为白色系,光晕略强分层,跨主题统一 */
|
|
309
|
+
background:linear-gradient(90deg, var(--cpd-a), var(--cpd-b) 45%, var(--cpd-tip) 86%);
|
|
310
|
+
box-shadow:var(--cpd-glow0);
|
|
311
|
+
}
|
|
260
312
|
@keyframes cpFlow{
|
|
261
|
-
0%{ opacity:0; transform:translate3d(0,0,0) scale(.3) rotate(var(--r,0deg)); box-shadow:
|
|
313
|
+
0%{ opacity:0; transform:translate3d(0,0,0) scale(.3) rotate(var(--r,0deg)); box-shadow:var(--cp-glow0); }
|
|
262
314
|
8%{ opacity:1; transform:translate3d(calc(var(--dx,-60px)*.01), calc(var(--dy,0)*.01), 0) scale(1) rotate(var(--r,0deg)); }
|
|
263
315
|
35%{ transform:translate3d(calc(var(--dx,-60px)*.08), calc(var(--dy,0)*.30), 0) scale(.78) rotate(var(--r,0deg)); }
|
|
264
|
-
52%{ opacity:.7; transform:translate3d(calc(var(--dx,-60px)*.35), calc(var(--dy,0)*.12), 0) scale(.4) rotate(var(--r,0deg)); box-shadow:
|
|
265
|
-
100%{ opacity:0; transform:translate3d(var(--dx,-60px), calc(var(--dy,0)*.05), 0) scale(.06) rotate(var(--r,0deg)); box-shadow:0 0 1px 0
|
|
316
|
+
52%{ opacity:.7; transform:translate3d(calc(var(--dx,-60px)*.35), calc(var(--dy,0)*.12), 0) scale(.4) rotate(var(--r,0deg)); box-shadow:var(--cp-glow1); }
|
|
317
|
+
100%{ opacity:0; transform:translate3d(var(--dx,-60px), calc(var(--dy,0)*.05), 0) scale(.06) rotate(var(--r,0deg)); box-shadow:0 0 1px 0 transparent; }
|
|
266
318
|
}
|
|
267
319
|
|
|
268
320
|
|
|
@@ -271,11 +323,11 @@ li:hover .idx{ transform:scale(1.18) rotate(-4deg); font-size:14px; }
|
|
|
271
323
|
animation:cometFade 1.1s ease-out both;
|
|
272
324
|
}
|
|
273
325
|
.pbar-track.sheen-on .pbar-comet::after{ animation:tailGlow 2.4s ease-in-out infinite; }
|
|
274
|
-
.pbar-track.sheen-on .pbar-comet::before{ animation:glowPulse
|
|
326
|
+
.pbar-track.sheen-on .pbar-comet::before{ animation:glowPulse 1.8s ease-in-out infinite; }
|
|
275
327
|
@keyframes cometFade{ 0%{opacity:0;} 7%{opacity:1;} 86%{opacity:1;} 100%{opacity:0;} }
|
|
276
328
|
@keyframes glowPulse{
|
|
277
|
-
0%,100%{ filter:
|
|
278
|
-
50%{ filter:
|
|
329
|
+
0%,100%{ filter:var(--cm-f0); }
|
|
330
|
+
50%{ filter:var(--cm-f1); }
|
|
279
331
|
}
|
|
280
332
|
@keyframes tailGlow{
|
|
281
333
|
0%,100%{ filter:blur(1px) brightness(1); }
|
|
@@ -283,10 +335,10 @@ li:hover .idx{ transform:scale(1.18) rotate(-4deg); font-size:14px; }
|
|
|
283
335
|
}
|
|
284
336
|
.empty{
|
|
285
337
|
font-size:14px; color:var(--muted); padding:16px 12px; letter-spacing:1px;
|
|
286
|
-
border:1px dashed
|
|
338
|
+
border:1px dashed var(--border); border-radius:6px; text-align:center;
|
|
287
339
|
}
|
|
288
340
|
@supports((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
|
|
289
|
-
.header-card, .section{ backdrop-filter:blur(16px) saturate(1.35); background-color:
|
|
341
|
+
.header-card, .section{ backdrop-filter:blur(16px) saturate(1.35); background-color:var(--panel); }
|
|
290
342
|
}
|
|
291
343
|
.header-card{ animation:fadeDown .5s ease-out backwards; transition:transform .18s ease-out; }
|
|
292
344
|
.header-card:hover{ transform:perspective(900px) rotateY(calc(var(--mx,0)*2.5deg)) rotateX(calc(var(--my,0)*-2.5deg)); }
|
|
@@ -300,6 +352,25 @@ li:hover .idx{ transform:scale(1.18) rotate(-4deg); font-size:14px; }
|
|
|
300
352
|
text-align:center; font-size:10px; color:var(--muted); letter-spacing:1.5px;
|
|
301
353
|
padding:6px 0 2px; position:relative; z-index:1;
|
|
302
354
|
}
|
|
355
|
+
/* 主题换肤坞:右下角四色点随点随换,记忆上次选择;打印与截图模式隐藏 */
|
|
356
|
+
.theme-dock{
|
|
357
|
+
position:fixed; right:18px; bottom:18px; z-index:1001;
|
|
358
|
+
display:flex; gap:8px; padding:8px 10px; border-radius:999px;
|
|
359
|
+
background:var(--panel-solid); border:1px solid var(--border);
|
|
360
|
+
box-shadow:0 4px 18px rgba(0,0,0,.3);
|
|
361
|
+
}
|
|
362
|
+
.theme-dock .th-dot{
|
|
363
|
+
width:22px; height:22px; border-radius:50%; cursor:pointer;
|
|
364
|
+
border:2px solid transparent; padding:0;
|
|
365
|
+
transition:transform .15s ease, border-color .15s ease;
|
|
366
|
+
}
|
|
367
|
+
.theme-dock .th-dot:hover{ transform:scale(1.18); }
|
|
368
|
+
.theme-dock .th-dot.on{ border-color:var(--text); }
|
|
369
|
+
.theme-dock .th-dot[data-theme="tech"]{ background:#0ea5e9; }
|
|
370
|
+
.theme-dock .th-dot[data-theme="biz"]{ background:#2563eb; }
|
|
371
|
+
.theme-dock .th-dot[data-theme="mono"]{ background:#111; }
|
|
372
|
+
.theme-dock .th-dot[data-theme="warm"]{ background:#d97706; }
|
|
373
|
+
@media print{ .theme-dock{ display:none; } }
|
|
303
374
|
</style>
|
|
304
375
|
</head>
|
|
305
376
|
<body>
|
|
@@ -455,6 +526,14 @@ li:hover .idx{ transform:scale(1.18) rotate(-4deg); font-size:14px; }
|
|
|
455
526
|
<div class="footer">GENERATED BY SPECCORE TEAM · 20261106</div>
|
|
456
527
|
</div>
|
|
457
528
|
|
|
529
|
+
<div class="theme-dock" id="themeDock">
|
|
530
|
+
<button class="th-dot" type="button" data-theme="tech" title="深蓝科技"></button>
|
|
531
|
+
<button class="th-dot" type="button" data-theme="biz" title="浅色商务"></button>
|
|
532
|
+
<button class="th-dot" type="button" data-theme="mono" title="极简黑白"></button>
|
|
533
|
+
<button class="th-dot" type="button" data-theme="warm" title="温暖渐变"></button>
|
|
534
|
+
</div>
|
|
535
|
+
</div>
|
|
536
|
+
|
|
458
537
|
<script>
|
|
459
538
|
var TXT = "今日日报 - 20261106\n\n生成时间:2026-11-06 17:30:39\n\nTL;DR:三端账单状态色统一与充值切换学生功能双线交付,四项完成;明日聚焦边界场景、暗色适配与多机型回归,风险暂无。\n\n今日任务进度\n1、完成账单状态颜色优化,在 srf-web-user/srf-web-wx/srf-web-h5-teacher 三端统一区分待扣款/处理中/成功/失败/已取消五种状态色(3 文件 +54 行)- 进度100% - 用时约2H\n2、实现充值页面切换学生与不可充值学生拦截功能,含 API 对接、组件改造及页面逻辑优化(3 文件 +94 行)- 进度100% - 用时约3H\n3、修复首页组件样式问题,调整 MyServiceMenu/PaymentZone/ServiceMenuGrid 布局适配(3 文件 +4 行)- 进度100% - 用时约0.5H\n4、完成健康指南图片 2 列 grid 布局改造,优化 MoreServicesSection/StudentProfileCard 等首页样式(4 文件 +22 行)- 进度100% - 用时约1.5H\n\n明日计划\n1、继续完善充值切换学生功能的边界场景处理与异常提示 - 进度0% - 预估用时2H\n2、推进账单状态颜色优化的暗色模式适配 - 进度0% - 预估用时2H\n3、开展首页样式优化回归测试,验证各组件在不同机型下的显示效果 - 进度0% - 预估用时2H\n\n风险阻塞点\n暂无";
|
|
460
539
|
(function(){
|
|
@@ -479,10 +558,10 @@ var TXT = "今日日报 - 20261106\n\n生成时间:2026-11-06 17:30:39\n\nTL;D
|
|
|
479
558
|
});
|
|
480
559
|
})();
|
|
481
560
|
|
|
482
|
-
/* 流星剥落粒子:JS 为每颗彗星注入
|
|
561
|
+
/* 流星剥落粒子:JS 为每颗彗星注入 30 粒椭圆小块(从头部稍后诞生 → 加速后飘 → 渐小渐隐,y 向中心水平线收敛) */
|
|
483
562
|
(function(){
|
|
484
563
|
var CP = [
|
|
485
|
-
// [bx, by, w, h, r, delay, dur, dx, dy] —— 30 粒前大后小剥落:bx 2~8 于光核中后部诞生(不贴尖头)、by -6~+9.5 上下连续散布、0~8% 快速渐显(scale .3→1 绽放淡入);dy 适中(上 -3.5~-7 / 中 +1.5~+3.5 /
|
|
564
|
+
// [bx, by, w, h, r, delay, dur, dx, dy] —— 30 粒前大后小剥落:bx 2~8 于光核中后部诞生(不贴尖头)、by -6~+9.5 上下连续散布、0~8% 快速渐显(scale .3→1 绽放淡入);dy 适中(上 -3.5~-7 / 中 +1.5~+3.5 / 深色带 +5~+7)向后飞行中适度上下展开并向中线收敛(既非贴中线亦非过度发散);dx -72~-112 终点越过彗尾左端(用户要求比彗星尾部更远)
|
|
486
565
|
// 上方飘散带 17 粒(by -6~-0.5,向上飘散,dy -3.5~-7 上飘展开——用户反馈上方粒子少且飘散不够远,13→17 再加密、dy 再扩大,下方相对合适不增)
|
|
487
566
|
[ 7, -6.0, 5.2, 3.7, 6, -0.05, 1.08, -72, -7.0],
|
|
488
567
|
[ 5, -5.8, 4.0, 2.9, -8, -0.10, 1.01, -76, -6.8],
|
|
@@ -506,16 +585,16 @@ var TXT = "今日日报 - 20261106\n\n生成时间:2026-11-06 17:30:39\n\nTL;D
|
|
|
506
585
|
[ 6, 2.2, 4.0, 2.9, 6, -0.95, 0.96, -86, 2.2],
|
|
507
586
|
[ 3, 3.6, 3.4, 2.4, 12, -0.10, 0.94, -82, 2.8],
|
|
508
587
|
[ 7, 4.8, 2.8, 2.0, -5, -0.35, 0.92, -92, 3.2],
|
|
509
|
-
[ 5, 5.
|
|
588
|
+
[ 5, 5.2, 2.2, 1.6, 9, -0.50, 0.90, -94, 3.5],
|
|
510
589
|
[ 8, 1.2, 2.0, 1.4, -7, -0.60, 0.92, -90, 1.5],
|
|
511
|
-
//
|
|
512
|
-
[ 6,
|
|
513
|
-
[ 3,
|
|
514
|
-
[ 7,
|
|
515
|
-
[ 4,
|
|
516
|
-
[ 6,
|
|
517
|
-
[ 3,
|
|
518
|
-
[ 8,
|
|
590
|
+
// 深色带 7 粒(by +5.5~+8=光核下缘外 0.5~3px 贴缘出生(与上方贴缘距离一致),dy +5~+7 向后甩出下散展开,cp-deep 主题同色渐变+同色光晕(随 html[data-theme] 四令牌换色,白热尖端不变),dur 1.06~1.25s 更久停留)
|
|
591
|
+
[ 6, 5.5, 5.0, 3.6, -8, -0.15, 1.20, -90, 5.5],
|
|
592
|
+
[ 3, 6.5, 4.4, 3.2, 6, -0.45, 1.25, -98, 6.2],
|
|
593
|
+
[ 7, 7.5, 3.8, 2.7, 12, -0.70, 1.12, -94, 5.6],
|
|
594
|
+
[ 4, 8.0, 3.3, 2.4, -5, -0.05, 1.18, -106, 6.8],
|
|
595
|
+
[ 6, 6.3, 2.9, 2.1, 9, -0.25, 1.08, -102, 6.5],
|
|
596
|
+
[ 3, 7.3, 2.5, 1.8, -10, -0.55, 1.10, -110, 6.8],
|
|
597
|
+
[ 8, 5.9, 2.1, 1.5, 7, -0.80, 1.06, -112, 5.0]
|
|
519
598
|
];
|
|
520
599
|
document.querySelectorAll('.pbar-comet').forEach(function(comet){
|
|
521
600
|
for (var i = 0; i < CP.length; i++){
|
|
@@ -531,11 +610,7 @@ var TXT = "今日日报 - 20261106\n\n生成时间:2026-11-06 17:30:39\n\nTL;D
|
|
|
531
610
|
p.style.animationDuration = c[6] + 's';
|
|
532
611
|
p.style.setProperty('--dx', c[7] + 'px');
|
|
533
612
|
p.style.setProperty('--dy', c[8] + 'px');
|
|
534
|
-
if (c[1] >=
|
|
535
|
-
p.className = 'cp cp-deep';
|
|
536
|
-
p.style.background = 'linear-gradient(90deg, rgba(2,132,199,.4), rgba(56,189,248,.95) 45%, #e0f2fe 86%)';
|
|
537
|
-
p.style.boxShadow = '0 0 6px 2.5px rgba(56,189,248,.9)';
|
|
538
|
-
}
|
|
613
|
+
if (c[1] >= 5.5) p.className = 'cp cp-deep'; // 深色带配色由 .cp-deep 类承接(四主题令牌驱动,勿内联写死)
|
|
539
614
|
comet.appendChild(p);
|
|
540
615
|
}
|
|
541
616
|
});
|
|
@@ -608,6 +683,33 @@ function sheen(track, src){
|
|
|
608
683
|
document.body.style.padding = '40px';
|
|
609
684
|
}
|
|
610
685
|
})();
|
|
686
|
+
|
|
687
|
+
/* 主题换肤:四套配色随点随换;记忆上次选择(localStorage,失败静默);?shot 截图模式隐藏坞 */
|
|
688
|
+
(function(){
|
|
689
|
+
var THEMES = ['tech','biz','mono','warm'];
|
|
690
|
+
var dock = document.getElementById('themeDock');
|
|
691
|
+
if (!dock) return;
|
|
692
|
+
if (location.search.indexOf('shot=') !== -1){ dock.style.display = 'none'; }
|
|
693
|
+
function apply(t){
|
|
694
|
+
document.documentElement.setAttribute('data-theme', t);
|
|
695
|
+
dock.querySelectorAll('.th-dot').forEach(function(d){
|
|
696
|
+
d.classList.toggle('on', d.getAttribute('data-theme') === t);
|
|
697
|
+
});
|
|
698
|
+
try{ localStorage.setItem('sf-report-theme', t); }catch(e){}
|
|
699
|
+
}
|
|
700
|
+
var cur = document.documentElement.getAttribute('data-theme');
|
|
701
|
+
var saved = null;
|
|
702
|
+
try{ saved = localStorage.getItem('sf-report-theme'); }catch(e){}
|
|
703
|
+
if (saved && THEMES.indexOf(saved) !== -1 && saved !== cur){ apply(saved); }
|
|
704
|
+
else{
|
|
705
|
+
dock.querySelectorAll('.th-dot').forEach(function(d){
|
|
706
|
+
d.classList.toggle('on', d.getAttribute('data-theme') === (cur || 'tech'));
|
|
707
|
+
});
|
|
708
|
+
}
|
|
709
|
+
dock.querySelectorAll('.th-dot').forEach(function(d){
|
|
710
|
+
d.addEventListener('click', function(){ apply(d.getAttribute('data-theme')); });
|
|
711
|
+
});
|
|
712
|
+
})();
|
|
611
713
|
</script>
|
|
612
714
|
</body>
|
|
613
715
|
</html>
|
|
@@ -11,17 +11,17 @@
|
|
|
11
11
|
- 同一日期重复生成会直接覆盖原文件;说「保留之前的」→ 文件名追加时间戳另存不覆盖
|
|
12
12
|
- 说「日报和周报都要」→ 日报、周报按各自流程分别生成,同日数据自动去重
|
|
13
13
|
- 说「打开/查看今天的日报」→ 该报告文件已存在时直接打开不重新生成;不存在则按正常流程生成
|
|
14
|
-
-
|
|
14
|
+
- 开发类用户可说「只算我的提交」→ 只聚合本人提交;默认仓库内全部提交都计入
|
|
15
15
|
- 说「只写 xxx 的日报 / 只聚合 xxx 仓库」→ 只收集指定仓库的提交,跳过其它仓库
|
|
16
16
|
|
|
17
17
|
## 口头追加任务
|
|
18
18
|
- 说「补充一下:上午改了角标接口,下午跟测试联调」→ 自动按语义拆成多条任务,润色为规范格式并入「今日任务进度」
|
|
19
19
|
- 拆分信号:时间词(上午/下午/晚上)、连接词(还有/另外/以及)、分号顿号列举、数字列举
|
|
20
20
|
- 补充内容带分段词时按段并入:「明日计划:xxx」→ 明日计划段;「风险:xxx」→ 风险阻塞点段(说「风险暂无/无风险」→ 风险段写「暂无」);不带分段词默认并入「今日任务进度」
|
|
21
|
-
-
|
|
21
|
+
- 与提交记录聚合出的任务自动去重,同一件事只保留一条
|
|
22
22
|
|
|
23
|
-
## 贴文字 / 发图片 /
|
|
24
|
-
- 直接贴一段文字说「整理成日报 / 把这段文字整理成日报」→
|
|
23
|
+
## 贴文字 / 发图片 / 给文件整理日报(没有提交记录也适用)
|
|
24
|
+
- 直接贴一段文字说「整理成日报 / 把这段文字整理成日报」→ 以文字为主源生成,不依赖提交记录(非开发岗位也可用);说「只整理这段文字 / 只按这段」同样跳过其它来源与会话上下文
|
|
25
25
|
- 发图片(截图/照片等 jpg/png/webp)或给文件(md/txt/docx/pdf 等)说「整理成日报」→ 先用 Read 读取:图片按视觉理解提取图中文字信息,md/txt 直接读文本,docx/pdf 优先尝试 pandoc 转文本(无 pandoc 则请用户粘贴文字),再按纯文字模式整理
|
|
26
26
|
- 图片模糊/内容读不清时:先把已提取的部分展示给用户确认或补充,不瞎编没读到的内容
|
|
27
27
|
- 自动分段归类:文字里写「明天/接下来/计划…」→ 明日计划;「风险/阻塞/问题/卡住…」→ 风险阻塞点;其余 → 今日任务进度(用户已明确分段则按用户分段)
|
|
@@ -10,18 +10,19 @@
|
|
|
10
10
|
|
|
11
11
|
```yaml
|
|
12
12
|
DISK: true # 是否落盘写文件;false = 默认只在对话输出,不写文件不开浏览器
|
|
13
|
-
CONFIG_VERSION:
|
|
13
|
+
CONFIG_VERSION: 2 # 配置结构版本:skill 升级时若配置结构变化会递增;AI 每次执行前对比 SKILL.md「配置版本机制」节声明的当前版本,不一致时按 SKILL.md 的迁移规则处理(先备份本文件为带时间戳 .bak,再迁移,最后对话告知用户)
|
|
14
14
|
FORMATS: [md, txt, html, content-png] # 落盘哪些格式(数组,可删减/增,如 [md, html] / [md, txt, html](不截图);content-png = 整页内容区截图(头部标题卡片 + 今日任务进度/明日计划/风险阻塞点三张分节卡片整体截出,头部卡片必须带上),删除该项即不截图;不影响对话中的 md 正文输出)
|
|
15
15
|
DIR: auto # 落盘根目录:auto = 按当前系统自动选 DIR_MAC / DIR_WIN(也可直接写死某个绝对路径)
|
|
16
16
|
DIR_MAC: /Users/luzhaosheng/MyWork/智慧食堂/reports # macOS 落盘根目录(自动按目标日期建子目录;目录不存在时回退用户主目录下 reports)
|
|
17
17
|
DIR_WIN: d:\Workspace_QCoder\reports # Windows 落盘根目录(自动按目标日期建子目录;目录/盘符不存在时回退用户主目录下 reports)
|
|
18
18
|
OPEN_HTML: true # 落盘后是否自动用浏览器打开 html(FORMATS 不含 html 时忽略)
|
|
19
|
+
THEME: tech # html 页面主题:tech 深蓝科技(默认)/ biz 浅色商务 / mono 极简黑白 / warm 温暖渐变;生成时写 <html data-theme="THEME值"> 定默认,页面右下角换肤坞四色点随点随换(浏览器本地记忆,?shot 截图模式自动隐藏,打印隐藏)
|
|
19
20
|
TEMPLATE: default # 报告模板:default = 内置三段式(任务进度/明日计划/风险阻塞点);custom = 使用下方「📝 自定义模板」节;口头临时指定模板仅当次生效
|
|
20
21
|
ROLE: 全栈开发工程师(企业内技术开发) # 用户默认职业角色与主要工作内容(两者并存:职业名 + 括号内工作内容,生成内容/术语/量化指标/节奏条/风险话术全部按此画像走);用户随口描述职业时(如「我搞装修的,天天跑工地」)→ AI 提炼为规范表述(装修项目经理(负责工地现场管理、施工进度与质量巡检))更新此处;说「以 XX 的身份写」→ 当次临时换角色不改配置;说「以后默认用 XX 角色 / 我的职业是 XX / 我的主要工作是 XX」→ 永久更新此处
|
|
21
22
|
CONFIRM: never # 落盘前确认:never = 直接生成落盘不确认(默认);text = 纯文字整理模式先出效果确认后再落盘;always = 任何方式生成都先确认;临时说「先看看效果」当次先确认、说「不用确认」当次跳过
|
|
22
23
|
```
|
|
23
24
|
|
|
24
|
-
> 临时口头要求(仅对当次生效,不修改上方配置):说「不落盘/别写文件」→ 当次 DISK=false;说「写到桌面/存到 ~/report(macOS)或 D:\report(Windows)」→ 当次改用该 DIR;说「只要 md / 只出 html / 只要内容区截图」→ 当次只落指定格式;说「这次不截图」→ 当次不生成内容区截图;说「只要截图/重新截个图」→ 当次只对现有 html
|
|
25
|
+
> 临时口头要求(仅对当次生效,不修改上方配置):说「不落盘/别写文件」→ 当次 DISK=false;说「写到桌面/存到 ~/report(macOS)或 D:\report(Windows)」→ 当次改用该 DIR;说「只要 md / 只出 html / 只要内容区截图」→ 当次只落指定格式;说「这次不截图」→ 当次不生成内容区截图;说「只要截图/重新截个图」→ 当次只对现有 html 执行内容区截图(不重新收集数据、不重写 md/txt/html 内容文件);说「别开浏览器」→ 当次 OPEN_HTML=false;说「这次按 xxx 模板来」→ 当次临时换模板(不改配置);说「以后都用这个模板」→ 自动写入下方「📝 自定义模板」节并把 TEMPLATE 改为 custom(永久生效);说「先看看效果/先出效果再落盘」→ 当次先出效果确认后再落盘;说「不用确认/直接落盘」→ 当次跳过确认直接落盘。说「页面用浅色商务主题/浅色主题」→ 当次 THEME=biz;说「以后默认用暖色主题」→ 永久改 THEME=warm。
|
|
25
26
|
|
|
26
27
|
## 📝 自定义模板(TEMPLATE: custom 时启用,用户可手改,适配各类岗位)
|
|
27
28
|
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deck-stage
|
|
3
|
+
description: >
|
|
4
|
+
登台 deck-stage:把日报/周报/年报(md/HTML/口述大纲)或散装素材(目录/文件/随手文字)转成专业 .pptx 演示文稿。
|
|
5
|
+
三问交互——先问素材(指定目录/指定文件/贴文字/口述主题)、再报页结构大纲表确认、后选成片方式(一键成片/逐页确认)。
|
|
6
|
+
混合模式——常规页原生生成(文本/数据卡/时间线/柱图/饼图/折线,全部可编辑),封面与结尾页用 HTML 截图贴图(视觉保真)。
|
|
7
|
+
视觉与报告深蓝面板体系同源:tech 深蓝科技(默认)/biz 浅色商务/mono 极简黑白/warm 温暖渐变四主题,
|
|
8
|
+
五段节色(蓝/绿/紫/玫红/橙)。每页可带演讲备注(notes),bullets 页可配图。
|
|
9
|
+
数据经结构化 data.json 交给 resources/pptx-builder.js(PptxGenJS,本目录 node_modules 离线可用)产出 16:9 pptx。
|
|
10
|
+
当用户请求把报告/日报/周报/年报转成 PPT、做成 PPT、导出 pptx、生成演示文稿、登台,或询问本 skill 用法时使用。
|
|
11
|
+
allowed-tools: ["Bash", "Read", "Write", "Edit"]
|
|
12
|
+
disable-model-invocation: false
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# 登台 deck-stage
|
|
16
|
+
|
|
17
|
+
把报告三件套(日报/周报/年报)的产出——或任何散装素材——转成专业 .pptx 演示文稿。常规页原生可编辑(文本/数据卡/时间线/柱图/饼图/折线),封面/结尾页 HTML 截图保真,每页可带演讲备注,视觉与报告同源。写报告 → 放映(magic-deck)→ 登台(本 skill),最后一公里闭环。
|
|
18
|
+
|
|
19
|
+
## 三问交互模型(生成前必走,一问不跳)
|
|
20
|
+
|
|
21
|
+
**第一问 · 素材**:你手上有什么?四通道可单选可组合——
|
|
22
|
+
- 指定目录:扫描目录下 md/txt/docx 找报告素材
|
|
23
|
+
- 指定文件:直接给一个或多个文件路径
|
|
24
|
+
- 贴文字:把报告正文/要点随手发我,文字随意,我来提炼
|
|
25
|
+
- 口述主题:只给方向,按专业汇报 A/B/C 档(结论先行、量化优先、计划可验证)先提炼要点
|
|
26
|
+
|
|
27
|
+
**第二问 · 骨架**:先报页结构大纲表(页码 | 页型 | 标题 | 要点 | 数据/图表),用户增删改后确认定型。
|
|
28
|
+
|
|
29
|
+
**第三问 · 成片方式**(user-config.md 的 MODE 可设默认):
|
|
30
|
+
- A 一键成片:确认骨架后直接生成完整 pptx
|
|
31
|
+
- B 逐页确认:每页先报排版方案(版式 + 内容 + 图表 + 演讲备注),用户 OK 一页出一页,可中途改单页/换主题/增删页
|
|
32
|
+
|
|
33
|
+
## 逐页确认交互细则(成片方式 B)
|
|
34
|
+
|
|
35
|
+
- 每页简报格式:页码 / 页型 / 节色 / 标题 / 内容要点 / 数据或图表 / 演讲备注(NOTES 开启时)
|
|
36
|
+
- 用户回复语义:
|
|
37
|
+
- 「OK」/「下一页」→ 出当前页,继续下一页
|
|
38
|
+
- 「第 N 页改成 XX」→ 单页重出(只重出该页,其余不动)
|
|
39
|
+
- 「第 2-4 页 OK」→ 批量确认
|
|
40
|
+
- 「换主题 biz」→ 全局换主题,已出页同步重出
|
|
41
|
+
- 「加一页 XX」/「删掉第 N 页」→ 骨架增删
|
|
42
|
+
- 全部页确认完毕 → 组装完整 pptx → 落盘并打开
|
|
43
|
+
|
|
44
|
+
## 生成流程
|
|
45
|
+
|
|
46
|
+
0. **读用户配置**(DIR/DIR_WIN/THEME/OPEN_PPTX/CONFIRM/MODE/AUDIENCE/NOTES/CONFIG_VERSION)→ 先 Read 同目录 `user-config.md`
|
|
47
|
+
1. **三问交互**(见上节):素材 → 骨架大纲表确认 → 成片方式(MODE 未配置时默认 B 逐页确认)
|
|
48
|
+
2. **结构化提炼** → 读 `resources/data-schema.md`(schema + 段落映射:年报五段/周报四段/日报四段 → 页类型与节色)
|
|
49
|
+
3. **封面/结尾截图**(无现成素材时)→ 读 `resources/cover-template.html` 说明:复制模板到临时目录 → 替换 `COVER` 对象(title/subtitle/info/stats 或 mode:closing)→ Chrome headless 截图 1280x720(macOS:`/Applications/Google Chrome.app/Contents/MacOS/Google Chrome --headless --disable-gpu --no-sandbox --hide-scrollbars --screenshot=cover.png --window-size=1280,720 --virtual-time-budget=3000 "file:///<临时html>"`;Windows 按序探测 chrome.exe/msedge.exe,URL 用 node url.pathToFileURL)
|
|
50
|
+
4. **生成 pptx**:写 data.json → `cd <skill目录> && node resources/pptx-builder.js --data <data.json绝对路径> --out <DIR>/<文件名>.pptx` → 输出 `PPTX_OK <路径>`
|
|
51
|
+
5. **校验**:文件存在、大小 > 20KB、`unzip -l` 页数与 pages 数一致
|
|
52
|
+
6. **落盘与打开**:按配置 DIR 落盘;`OPEN_PPTX: true` 时打开(macOS:`open <pptx>`;Windows:`start <pptx>`)
|
|
53
|
+
7. **使用咨询**(用户只问「登台怎么用」「报告转 PPT 怎么用」等用法、未要求生成)→ 读 `resources/usage-guide.md`,将其内容原样输出(首行标题改为「登台 deck-stage 使用指南」),不执行任何生成动作
|
|
54
|
+
|
|
55
|
+
## ⚙️ 默认配置(在 user-config.md,执行前必须先 Read)
|
|
56
|
+
|
|
57
|
+
DIR(落盘根目录,DIR_MAC/DIR_WIN 双键)、THEME(tech/biz/mono/warm)、OPEN_PPTX(生成后是否打开)、CONFIRM(落盘前确认)、MODE(成片方式 page-by-page/once)、AUDIENCE(受众画像,备注话术参考)、NOTES(是否生成演讲备注)——均以 `user-config.md` 为准。升级技能时 user-config.md 不会被覆盖,你的修改永久保留。
|
|
58
|
+
|
|
59
|
+
## 规则速览
|
|
60
|
+
|
|
61
|
+
- 混合模式:`cover-image`/`closing-image` 页用 HTML 截图(视觉保真),`overview`/`timeline`/`bullets`/`chart`/`chart-pie`/`chart-line` 页原生生成(可编辑);截图窗口 1280x720 与 16:9 pptx 同比例
|
|
62
|
+
- 页类型分页:timeline 每页 8 条、bullets 每页 6 条自动续页(builder 自动处理,AI 不用拆)
|
|
63
|
+
- 节色五档:blue 概览 / green 成果 / purple 成长 / rose 反思 / orange 展望,与年报 HTML 同款
|
|
64
|
+
- 数值纪律:业务结果指标优先、git 统计兜底;数字必带对比基准(同比/环比)
|
|
65
|
+
- 主题四套与报告 HTML 令牌同源;theme 写在 data.json 里,未写默认 tech
|
|
66
|
+
- 演讲备注:NOTES=true 时每页写 notes(单页/第一页)或 notesList(按分页逐页);话术按 AUDIENCE 画像,写开场白/数据解读/过渡句,不写正文照读
|
|
67
|
+
- 图表扩容:chart 自绘柱 / chart-pie 原生饼图(percent/donut 选项)/ chart-line 原生折线(series 多线/smooth 选项)——原生图表在 PowerPoint/WPS 里可直接编辑数据
|
|
68
|
+
- bullets 配图:page.image 给绝对路径即右侧配图(contain 等比内嵌),文本区自动缩窄,仅第一页带图
|
|
69
|
+
- builder 是真相源:版式改动只改 `resources/pptx-builder.js` 并同步 `data-schema.md` 描述,禁止只改一处
|
|
70
|
+
- 封面模板是截图底版:视觉改动只改 `resources/cover-template.html`;模板是静态版式(无动画),保截图零风险
|
|
71
|
+
- 依赖纪律:pptxgenjs 装在 skill 目录 node_modules(离线可用);不引入其它运行时依赖
|
|
72
|
+
|
|
73
|
+
## 核心约束
|
|
74
|
+
|
|
75
|
+
- **页面与数据分离**:data.json 只含结构化内容,绝不含版式参数(颜色/位置由 builder 主题令牌决定)
|
|
76
|
+
- **封面截图必填**:`cover-image` 缺 image 字段会被跳过并警告,AI 必须先生成截图再填路径
|
|
77
|
+
- **image 路径绝对化**:data.json 里 image 一律写绝对路径,builder 按路径嵌入
|
|
78
|
+
- **落盘防覆盖**:同名 pptx 已存在时加日期后缀(如 `-1106`),不覆盖旧文件
|
|
79
|
+
- **零外部网络**:生成全程离线(截图用本地 Chrome/Edge headless,依赖本地 node_modules),pptx 双击即开
|
|
80
|
+
- **未授权目录不写**:DIR 不存在或不可写时停下问用户,不猜路径
|