skill-forge-hub 1.0.2 → 1.0.4

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.
@@ -220,14 +220,11 @@ h1{
220
220
  grid-column:1; grid-row:2/6; display:flex; flex-direction:column; align-items:center;
221
221
  justify-content:center; gap:8px;
222
222
  }
223
- .ring{ position:relative; width:88px; height:88px; }
224
- .ring svg{ transform:rotate(-90deg); }
225
- .ring .track{ fill:none; stroke:var(--tag-bg); stroke-width:7; }
226
- .ring .val{
227
- fill:none; stroke:url(#ringGrad); stroke-width:7; stroke-linecap:round;
228
- stroke-dasharray:226.19; stroke-dashoffset:0;
229
- filter:drop-shadow(0 0 6px var(--glow));
230
- }
223
+ .ring-ech{ position:relative; width:88px; height:88px; }
224
+ .ring-ech::before{ content:''; position:absolute; inset:8px; border-radius:50%; border:7px solid var(--tag-bg); }
225
+ .ring-ech .ech{ width:100%; height:100%; }
226
+ .ech-off{ display:flex; align-items:center; justify-content:center; }
227
+ .ech-off::after{ content:attr(data-off); font-size:11px; color:var(--muted); text-align:center; line-height:1.6; padding:0 10px; }
231
228
  .ring-num{
232
229
  position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
233
230
  font-size:22px; font-weight:900; color:var(--accent);
@@ -241,23 +238,11 @@ h1{
241
238
  padding:12px 14px; flex-wrap:wrap;
242
239
  }
243
240
  .heat-title{ font-size:12px; font-weight:700; color:var(--text); letter-spacing:1px; white-space:nowrap; }
244
- .heat-grid{ display:grid; grid-template-columns:repeat(3, 14px); grid-auto-flow:column; grid-template-rows:repeat(5, 14px); gap:4px; }
245
- .hm{
246
- width:14px; height:14px; border-radius:3px; position:relative; cursor:default;
247
- background:var(--tag-bg);
248
- }
249
- .hm[data-v="1"]{ background:var(--glow); }
250
- .hm[data-v="2"]{ background:var(--heat); }
251
- .hm[data-v="3"]{ background:var(--accent2); box-shadow:0 0 8px var(--glow); }
252
- .hm::after{
253
- content:attr(data-tip); position:absolute; bottom:calc(100% + 6px); left:50%; transform:translateX(-50%);
254
- background:var(--panel-solid); border:1px solid var(--border); border-radius:4px;
255
- color:var(--text); font-size:10px; padding:3px 8px; white-space:nowrap; z-index:5;
256
- opacity:0; pointer-events:none; transition:opacity .15s;
257
- }
258
- .hm:hover::after{ opacity:1; }
259
- .heat-days{ display:grid; grid-template-columns:repeat(5, 14px); gap:4px; margin-top:4px; padding-left:26px; }
260
- .heat-days span{ font-size:9px; color:var(--muted); text-align:center; }
241
+ .heat-card .ech{ width:150px; height:112px; flex:0 0 auto; }
242
+ .hl-swatch{ width:14px; height:14px; border-radius:3px; background:var(--tag-bg); }
243
+ .hl-swatch[data-v="1"]{ background:var(--glow); }
244
+ .hl-swatch[data-v="2"]{ background:var(--heat); }
245
+ .hl-swatch[data-v="3"]{ background:var(--accent2); box-shadow:0 0 8px var(--glow); }
261
246
  .heat-legend{ display:flex; align-items:center; gap:3px; margin-left:auto; }
262
247
  .heat-legend span{ font-size:9px; color:var(--muted); }
263
248
  /* 指标胶囊 */
@@ -283,26 +268,11 @@ h1{
283
268
  .ov-compare .down{ color:var(--rose); font-weight:700; }
284
269
  /* 柱图 */
285
270
  .cb-row{
286
- grid-column:2/4; grid-row:6; display:flex; align-items:flex-end; justify-content:space-around;
287
- height:86px; padding:0 6px; border-top:1px dashed var(--border); padding-top:10px; position:relative;
288
- }
289
- .cb-col{ position:relative; display:flex; flex-direction:column; align-items:center; gap:6px; height:100%; justify-content:flex-end; }
290
- .cb-bar{
291
- width:32px; border-radius:4px 4px 0 0;
292
- background:linear-gradient(180deg, var(--accent2), var(--accent) 60%, var(--accent2));
293
- box-shadow:0 0 10px var(--glow);
294
- min-height:3px; animation:cbGrow 1s ease-out both;
295
- }
296
- @keyframes cbGrow{ from{height:0;} }
297
- .cb-col .cb-day{ font-size:9.5px; color:var(--muted); }
298
- .cb-col .cb-tip{
299
- position:absolute; bottom:calc(100% + 8px); left:50%; transform:translateX(-50%);
300
- background:var(--panel-solid); border:1px solid var(--border); border-radius:4px;
301
- color:var(--text); font-size:10px; padding:4px 8px; white-space:nowrap; z-index:5;
302
- opacity:0; pointer-events:none; transition:opacity .15s;
303
- }
304
- .cb-col:hover .cb-tip{ opacity:1; }
305
- .cb-count{ font-size:11px; font-weight:900; color:var(--accent); text-shadow:0 0 8px var(--glow); }
271
+ grid-column:2/4; grid-row:6; border-top:1px dashed var(--border); padding-top:10px;
272
+ height:96px;
273
+ }
274
+ .cb-row .ech{ width:100%; height:86px; }
275
+
306
276
  /* ============ 分节卡片 ============ */
307
277
  .section{
308
278
  position:relative; background:var(--panel-solid);
@@ -549,6 +519,13 @@ li:hover .idx{ transform:scale(1.18) rotate(-4deg); font-size:14px; }
549
519
  /* 滚动入场:html.js 门控(无 JS/打印全显);初始视口外的卡片滚到视口才上浮渐显;translate 独立属性不碰 transform,hover 3D 偏转零冲突 */
550
520
  html.js .rv{ opacity:0; translate:0 16px; transition:opacity .5s ease-out, translate .5s ease-out; }
551
521
  html.js .rv.in{ opacity:1; translate:0 0; }
522
+ /* 窄屏收敛:<680px 视口下 clamp 的 640px 下限会横向溢出,wrap 改流式满宽、边距收窄、标题字号统一 26px */
523
+ @media (max-width:680px){
524
+ body{ padding:24px 12px 32px; }
525
+ .wrap{ width:100%; max-width:none; }
526
+ .header-card{ padding:26px 18px 20px; }
527
+ .header-card h1{ font-size:26px; }
528
+ }
552
529
  </style>
553
530
  </head>
554
531
  <body>
@@ -609,42 +586,17 @@ html.js .rv.in{ opacity:1; translate:0 0; }
609
586
  <div class="ov-bento">
610
587
  <div class="ov-title">本周概览</div>
611
588
  <div class="ring-box">
612
- <div class="ring">
613
- <svg width="88" height="88" viewBox="0 0 88 88">
614
- <defs>
615
- <linearGradient id="ringGrad" x1="0%" y1="0%" x2="100%" y2="100%">
616
- <stop offset="0%" stop-color="var(--accent2)"/>
617
- <stop offset="100%" stop-color="var(--accent)"/>
618
- </linearGradient>
619
- </defs>
620
- <circle class="track" cx="44" cy="44" r="36"/>
621
- <circle class="val" cx="44" cy="44" r="36"/>
622
- </svg>
623
- <div class="ring-num">100%</div>
589
+ <div class="ring-ech">
590
+ <div class="ech" id="ringChart" data-off="离线不显示"></div>
591
+ <div class="ring-num">8/8</div>
624
592
  </div>
625
593
  <div class="ring-label">8/8 项已交付</div>
626
594
  </div>
627
595
 
628
596
  <div class="heat-card">
629
597
  <span class="heat-title">提交热力图</span>
630
- <div class="heat-grid">
631
- <span class="hm" data-v="0" data-tip="周一上午 · 0 次"></span>
632
- <span class="hm" data-v="0" data-tip="周一下午 · 0 次"></span>
633
- <span class="hm" data-v="0" data-tip="周一晚上 · 0 次"></span>
634
- <span class="hm" data-v="0" data-tip="周二上午 · 0 次"></span>
635
- <span class="hm" data-v="0" data-tip="周二下午 · 0 次"></span>
636
- <span class="hm" data-v="0" data-tip="周二晚上 · 0 次"></span>
637
- <span class="hm" data-v="0" data-tip="周三上午 · 0 次"></span>
638
- <span class="hm" data-v="3" data-tip="周三下午 · 8 次"></span>
639
- <span class="hm" data-v="0" data-tip="周三晚上 · 0 次"></span>
640
- <span class="hm" data-v="0" data-tip="周四上午 · 0 次"></span>
641
- <span class="hm" data-v="1" data-tip="周四下午 · 1 次"></span>
642
- <span class="hm" data-v="0" data-tip="周四晚上 · 0 次"></span>
643
- <span class="hm" data-v="2" data-tip="周五上午 · 2 次"></span>
644
- <span class="hm" data-v="0" data-tip="周五下午 · 0 次"></span>
645
- <span class="hm" data-v="0" data-tip="周五晚上 · 0 次"></span>
646
- </div>
647
- <div class="heat-legend"><span>少</span><span class="hm" data-v="0"></span><span class="hm" data-v="1"></span><span class="hm" data-v="2"></span><span class="hm" data-v="3"></span><span>多</span></div>
598
+ <div class="ech" id="heatChart" data-off="图表需联网加载 echarts,离线环境不显示"></div>
599
+ <div class="heat-legend"><span>少</span><span class="hl-swatch" data-v="0"></span><span class="hl-swatch" data-v="1"></span><span class="hl-swatch" data-v="2"></span><span class="hl-swatch" data-v="3"></span><span>多</span></div>
648
600
  </div>
649
601
 
650
602
  <div class="ov-item">
@@ -670,36 +622,7 @@ html.js .rv.in{ opacity:1; translate:0 0; }
670
622
  <div class="ov-compare">vs 上周:提交 17 → 11 <span class="down">(-35%)</span> · 完成任务 8 项</div>
671
623
 
672
624
  <div class="cb-row">
673
- <div class="cb-col">
674
- <div class="cb-tip">周一 · 0 次提交</div>
675
- <span class="cb-count">0</span>
676
- <div class="cb-bar" style="height:3px; animation-delay:.5s;"></div>
677
- <span class="cb-day">周一</span>
678
- </div>
679
- <div class="cb-col">
680
- <div class="cb-tip">周二 · 0 次提交</div>
681
- <span class="cb-count">0</span>
682
- <div class="cb-bar" style="height:3px; animation-delay:.55s;"></div>
683
- <span class="cb-day">周二</span>
684
- </div>
685
- <div class="cb-col">
686
- <div class="cb-tip">周三 · 8 次提交 · 多线收束/礼物/登录/互动/配送</div>
687
- <span class="cb-count">8</span>
688
- <div class="cb-bar" style="height:100%; animation-delay:.6s;"></div>
689
- <span class="cb-day">周三</span>
690
- </div>
691
- <div class="cb-col">
692
- <div class="cb-tip">周四 · 1 次提交 · 底部导航仿参考图重绘</div>
693
- <span class="cb-count">1</span>
694
- <div class="cb-bar" style="height:12.5%; animation-delay:.65s;"></div>
695
- <span class="cb-day">周四</span>
696
- </div>
697
- <div class="cb-col">
698
- <div class="cb-tip">周五 · 2 次提交 · 白条三角根治/发版</div>
699
- <span class="cb-count">2</span>
700
- <div class="cb-bar" style="height:25%; animation-delay:.7s;"></div>
701
- <span class="cb-day">周五</span>
702
- </div>
625
+ <div class="ech" id="dayChart" data-off="图表需联网加载 echarts,离线环境不显示"></div>
703
626
  </div>
704
627
  </div>
705
628
  </div>
@@ -842,6 +765,7 @@ html.js .rv.in{ opacity:1; translate:0 0; }
842
765
  <button class="th-dot" type="button" data-theme="warm" title="温暖渐变"></button>
843
766
  </div>
844
767
 
768
+ <script src="https://cdn.jsdelivr.net/npm/echarts@5.5.1/dist/echarts.min.js"></script>
845
769
  <script>
846
770
  // 复制纯文本
847
771
  var TXT = "本周周报 - 20261102 ~ 20261106\n\n生成时间:2026-11-06 14:57:02\n\nTL;DR:本周 11 次提交覆盖客户端/服务端/网关三端,周三单日 8 次提交集中交付直播、礼物、登录、互动等多线功能;底部导航两轮修复后随 v1.2.2 收口。整体节奏紧凑、无阻塞风险,下周可聚焦配送链路打磨与直播体验优化。\n\n本周结论\n1、最重要的结果:八项功能全部交付并随 v1.2.2 收口,底部导航顽疾两轮修复后根治\n2、值得处理的变化:多端并行交付节奏加速,需求拆解粒度偏粗、联调集中在周三单日\n3、下周优先的动作:聚焦配送链路打磨与直播体验优化,联调前移、避免单日集中交付\n\n本周任务进度\n1、完成底部导航仿参考图重绘:白栏穹顶拱形与发布按钮凸出,两轮修复根治白条与三角缺口,并发布 v1.2.2(3 次提交、23 文件、+1741/-178 行)- 进度100% - 用时约1.5D\n2、完成订单配送能力深化:客户端配送费预估与骑手状态展示,服务端 DISPATCHING 状态机与骑手通道抽象(2 次提交、15 文件、+507/-35 行)- 进度100% - 用时约1.5D\n3、完成对外号正名为产品级主账号邻音号,我的页/账号中心/联系人/群聊全面去内部术语(1 次提交、4 文件、+25/-25 行)- 进度100% - 用时约0.5D\n4、完成萤火虚拟币礼物体系:钱包/充值/16 款四档礼物/原子扣款与 43001 拦截、WS 房间广播、模拟观众自动送礼(1 次提交、22 文件、+1246/-3 行)- 进度100% - 用时约1D\n5、完成帖子互动闭环与媒体上传:评论/点赞/收藏/分享四实体与互动快照、30MB 短视频上传接口(1 次提交、22 文件、+1311/-31 行)- 进度100% - 用时约1D\n6、完成登录安全加固与三方登录:短信验证码(回显+限流+签名)、微信/支付宝绑定、换绑手机号、APK 版本门禁(1 次提交、42 文件、+1792/-87 行)- 进度100% - 用时约1.5D\n7、完成网关 V2 二进制帧协议升级:Protobuf 上下行帧、JWT 握手鉴权与 HMAC 签名、房间索引、wsprobe 冒烟探针(1 次提交、10 文件、+1552/-59 行)- 进度100% - 用时约1D\n8、完成多线功能收束:直播推流与观众端、验证码/三方登录页、短视频录制播放、收藏互动、更新自检、SSL pinning(1 次提交、72 文件、+11.1k/-2.1k 行)- 进度100% - 用时约2D\n\n下周计划\n暂无\n\n风险阻塞点\n暂无";
@@ -994,6 +918,90 @@ function sheen(track, src){
994
918
  }
995
919
  })();
996
920
 
921
+ // 概览三图(echarts CDN 渲染:交付率圆环/提交热力图/日提交柱图;离线时容器降级提示;?shot 截图模式停动画——headless 虚拟时间下动画帧不推进会停在初始帧)
922
+ (function(){
923
+ if (typeof echarts === 'undefined'){
924
+ document.querySelectorAll('.ech').forEach(function(el){ el.classList.add('ech-off'); });
925
+ return;
926
+ }
927
+ var noAnim = location.search.indexOf('shot=') !== -1;
928
+ function tokens(){
929
+ var s = getComputedStyle(document.documentElement);
930
+ return {
931
+ accent:s.getPropertyValue('--accent').trim(), accent2:s.getPropertyValue('--accent2').trim(),
932
+ muted:s.getPropertyValue('--muted').trim(), text:s.getPropertyValue('--text').trim(),
933
+ border:s.getPropertyValue('--border').trim(), glow:s.getPropertyValue('--glow').trim(),
934
+ heat:s.getPropertyValue('--heat').trim(), tag:s.getPropertyValue('--tag-bg').trim(),
935
+ panel:s.getPropertyValue('--panel-solid').trim()
936
+ };
937
+ }
938
+ var DAYS = ['周一','周二','周三','周四','周五'];
939
+ var DAY_VALS = [0,0,8,1,2];
940
+ var DAY_TIPS = ['周一 · 0 次提交','周二 · 0 次提交','周三 · 8 次提交 · 多线收束/礼物/登录/互动/配送','周四 · 1 次提交 · 底部导航仿参考图重绘','周五 · 2 次提交 · 白条三角根治/发版'];
941
+ var HEAT = [
942
+ { value:[0,4,0], name:'周一上午' }, { value:[1,4,0], name:'周一下午' }, { value:[2,4,0], name:'周一晚上' },
943
+ { value:[0,3,0], name:'周二上午' }, { value:[1,3,0], name:'周二下午' }, { value:[2,3,0], name:'周二晚上' },
944
+ { value:[0,2,0], name:'周三上午' }, { value:[1,2,8], name:'周三下午' }, { value:[2,2,0], name:'周三晚上' },
945
+ { value:[0,1,0], name:'周四上午' }, { value:[1,1,1], name:'周四下午' }, { value:[2,1,0], name:'周四晚上' },
946
+ { value:[0,0,2], name:'周五上午' }, { value:[1,0,0], name:'周五下午' }, { value:[2,0,0], name:'周五晚上' }
947
+ ];
948
+ function ringOption(){
949
+ var t = tokens();
950
+ return {
951
+ animation: !noAnim,
952
+ series:[{ type:'pie', radius:['66%','82%'], center:['50%','50%'],
953
+ label:{ show:false }, emphasis:{ scale:false },
954
+ data:[{ value:8, name:'已交付',
955
+ itemStyle:{ color:new echarts.graphic.LinearGradient(0,0,1,1,[{ offset:0, color:t.accent2 },{ offset:1, color:t.accent }]),
956
+ shadowBlur:8, shadowColor:t.glow } }] }]
957
+ };
958
+ }
959
+ function heatOption(){
960
+ var t = tokens();
961
+ return {
962
+ animation: !noAnim,
963
+ grid:{ left:2, right:4, top:4, bottom:16 },
964
+ tooltip:{ backgroundColor:t.panel, borderColor:t.border,
965
+ textStyle:{ color:t.text, fontSize:11 },
966
+ formatter:function(p){ return p.name + ' · ' + p.value[2] + ' 次'; } },
967
+ xAxis:{ type:'category', data:['上午','下午','晚上'], axisTick:{ show:false }, axisLine:{ show:false }, axisLabel:{ color:t.muted, fontSize:9 } },
968
+ yAxis:{ type:'category', data:['周五','周四','周三','周二','周一'], axisTick:{ show:false }, axisLine:{ show:false }, axisLabel:{ color:t.muted, fontSize:9 } },
969
+ visualMap:{ show:false, min:0, max:3, inRange:{ color:[t.tag, t.glow, t.heat, t.accent2] } },
970
+ series:[{ type:'heatmap', data:HEAT, itemStyle:{ borderWidth:2, borderColor:'transparent', borderRadius:2 } }]
971
+ };
972
+ }
973
+ function dayOption(){
974
+ var t = tokens();
975
+ return {
976
+ animation: !noAnim,
977
+ grid:{ left:2, right:2, top:14, bottom:16 },
978
+ tooltip:{ trigger:'axis', backgroundColor:t.panel, borderColor:t.border,
979
+ textStyle:{ color:t.text, fontSize:11 },
980
+ formatter:function(p){ return DAY_TIPS[p[0].dataIndex]; } },
981
+ xAxis:{ type:'category', data:DAYS, axisTick:{ show:false },
982
+ axisLine:{ lineStyle:{ color:t.border } }, axisLabel:{ color:t.muted, fontSize:9.5 } },
983
+ yAxis:{ type:'value', show:false },
984
+ series:[{ type:'bar', data:DAY_VALS, barWidth:'40%',
985
+ itemStyle:{ borderRadius:[4,4,0,0],
986
+ color:new echarts.graphic.LinearGradient(0,0,0,1,[{ offset:0, color:t.accent2 },{ offset:1, color:t.accent }]),
987
+ shadowBlur:10, shadowColor:t.glow } }]
988
+ };
989
+ }
990
+ var charts = [];
991
+ ['ringChart','heatChart','dayChart'].forEach(function(id){
992
+ var el = document.getElementById(id);
993
+ if (el){ charts.push({ id:id, chart:echarts.init(el) }); }
994
+ });
995
+ function setAll(){
996
+ charts.forEach(function(c){
997
+ var o = c.id === 'ringChart' ? ringOption() : (c.id === 'heatChart' ? heatOption() : dayOption());
998
+ c.chart.setOption(o, true);
999
+ });
1000
+ }
1001
+ setAll();
1002
+ window.__sfEchartsTheme = setAll;
1003
+ window.addEventListener('resize', function(){ charts.forEach(function(c){ c.chart.resize(); }); });
1004
+ })();
997
1005
  // 主题换肤:五套配色随点随换;记忆上次选择(localStorage,失败静默);?shot 截图模式隐藏坞
998
1006
  (function(){
999
1007
  var THEMES = ['tech','biz','mono','light','warm'];
@@ -1002,7 +1010,8 @@ function sheen(track, src){
1002
1010
  if (location.search.indexOf('shot=') !== -1){ dock.style.display = 'none'; }
1003
1011
  function apply(t){ document.documentElement.setAttribute('data-theme', t);
1004
1012
  dock.querySelectorAll('.th-dot').forEach(function(d){ d.classList.toggle('on', d.getAttribute('data-theme') === t); });
1005
- try{ localStorage.setItem('sf-report-theme', t); }catch(e){} }
1013
+ try{ localStorage.setItem('sf-report-theme', t); }catch(e){}
1014
+ if (window.__sfEchartsTheme) window.__sfEchartsTheme(); }
1006
1015
  var cur = document.documentElement.getAttribute('data-theme');
1007
1016
  var saved = null; try{ saved = localStorage.getItem('sf-report-theme'); }catch(e){}
1008
1017
  if (saved && THEMES.indexOf(saved) !== -1 && saved !== cur){ apply(saved); }
@@ -46,7 +46,7 @@
46
46
  - 词典外行业走兜底:按骨架 + 你提供的素材现场生成词条;说「记住这个行业」→ 固化为新词条
47
47
 
48
48
  ## 控制落盘(临时要求,仅对当次生效)
49
- - 默认:对话输出 Markdown + md/txt/html 三文件 + 内容区截图 content-png 落盘到 DIR(auto 按系统选:macOS=/Users/luzhaosheng/MyWork/reports、Windows=d:\Workspace_QCoder\reports)/<当周最后一天日期>/ + html 自动打开(DIR 目录/盘符不存在时自动改用用户主目录下 reports:macOS=~/reports、Windows=%USERPROFILE%\reports)
49
+ - 默认:对话输出 Markdown + md/txt/html 三文件 + 内容区截图 content-png 落盘到 DIR(auto 按系统选:macOS=~/reports、Windows=%USERPROFILE%\reports,模板默认值,实际以 user-config.md 为准)/<当周最后一天日期>/ + html 自动打开(DIR 目录/盘符不存在时自动改用用户主目录下 reports:macOS=~/reports、Windows=%USERPROFILE%\reports)
50
50
  - 说「写到桌面」→ 本次落盘到桌面(macOS=~/Desktop、Windows=%USERPROFILE%\Desktop);说「存到 ~/report / D:\report」→ 本次用指定目录(均自动按当周最后一天建子目录)
51
51
  - 说「不落盘/别写文件」→ 本次只在对话输出,不写文件、不开浏览器
52
52
  - 说「只要 md」「只出 html」「只要内容区截图」→ 本次只落指定格式文件;说「这次不截图」→ 本次跳过截图(content-png = 本周概览与三张卡片整体一张图,四周约 40px 留白、「本周任务进度」标题右侧带周范围徽章(跟随 WEEK_END),不含头部标题、复制按钮、页脚)
@@ -59,7 +59,7 @@
59
59
  |---|---|---|
60
60
  | DISK | 是否落盘写文件 | true(落盘,默认)/ false(默认只在对话输出) |
61
61
  | FORMATS | 落盘哪些格式(数组) | [md, txt, html, content-png](默认,含内容区截图)/ [md, html] / [md, txt, html](不截图);content-png = 概览与三张卡片整体截图(四周约 40px 留白、任务进度节带周范围徽章),不含头部标题/复制按钮/页脚 |
62
- | DIR | 落盘根目录 | auto(按当前系统自动选 DIR_MAC / DIR_WIN,默认);DIR_MAC = macOS 根目录(/Users/luzhaosheng/MyWork/reports);DIR_WIN = Windows 根目录(d:\Workspace_QCoder\reports) |
62
+ | DIR | 落盘根目录 | auto(按当前系统自动选 DIR_MAC / DIR_WIN,默认);DIR_MAC = macOS 根目录(模板默认 ~/reports,可改);DIR_WIN = Windows 根目录(模板默认 %USERPROFILE%\reports,可改) |
63
63
  | OPEN_HTML | 落盘后是否自动打开 html | true(自动打开,默认)/ false(不打开) |
64
64
  | WEEK_END | 周结束日(当周最后一天,决定周范围与落盘目录名) | friday(默认)/ sunday / saturday 等 |
65
65
  | TEMPLATE | 报告模板 | default(内置四段式,默认)/ custom(按「📝 自定义模板」节的结构生成) |
@@ -10,17 +10,29 @@
10
10
 
11
11
  ```yaml
12
12
  DISK: true # 是否落盘写文件;false = 默认只在对话输出,不写文件不开浏览器
13
- CONFIG_VERSION: 2 # 配置结构版本:skill 升级时若配置结构变化会递增;AI 每次执行前对比 SKILL.md「配置版本机制」节声明的当前版本,不一致时按 SKILL.md 的迁移规则处理(先备份本文件为带时间戳 .bak,再迁移,最后对话告知用户)
13
+ CONFIG_VERSION: 3 # 配置结构版本: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
- DIR_MAC: /Users/luzhaosheng/MyWork/智慧食堂/reports # macOS 落盘根目录(日报按目标日期、周报按当周最后一天建子目录;目录不存在时回退用户主目录下 reports)
17
- DIR_WIN: d:\Workspace_QCoder\reports # Windows 落盘根目录(日报按目标日期、周报按当周最后一天建子目录;目录/盘符不存在时回退用户主目录下 reports)
16
+ DIR_MAC: ~/reports # macOS 落盘根目录(日报按目标日期、周报按当周最后一天建子目录;目录不存在时回退用户主目录下 reports)
17
+ DIR_WIN: %USERPROFILE%\reports # Windows 落盘根目录(日报按目标日期、周报按当周最后一天建子目录;目录/盘符不存在时回退用户主目录下 reports)
18
18
  OPEN_HTML: true # 落盘后是否自动用浏览器打开 html(FORMATS 不含 html 时忽略)
19
19
  THEME: tech # html 页面主题:tech 深蓝科技(默认)/ biz 浅色商务 / mono IDEA 黑亮 / light IDEA 白亮 / warm 温暖渐变;生成时写 <html data-theme="THEME值"> 定默认,页面右下角换肤坞五色点随点随换(浏览器本地记忆,?shot 截图模式自动隐藏,打印隐藏)
20
20
  TEMPLATE: default # 报告模板:default = 内置四段式(本周结论 + 本周任务进度/下周计划/风险阻塞点);custom = 使用下方「📝 自定义模板」节;口头临时指定模板仅当次生效
21
21
  ROLE: 全栈开发工程师(企业内技术开发) # 用户默认职业角色与主要工作内容(两者并存:职业名 + 括号内工作内容,生成内容/术语/量化指标/热力图/柱图/风险话术全部按此画像走);用户随口描述职业时(如「我搞装修的,天天跑工地」)→ AI 提炼为规范表述(装修项目经理(负责工地现场管理、施工进度与质量巡检))更新此处;说「以 XX 的身份写」→ 当次临时换角色不改配置;说「以后默认用 XX 角色 / 我的职业是 XX / 我的主要工作是 XX」→ 永久更新此处
22
22
  WEEK_END: friday # 周结束日(当周最后一天):friday = 每周五(默认);可改 sunday = 每周日、saturday 等;周范围、落盘子目录名均按该天日期
23
23
  CONFIRM: never # 落盘前确认:never = 直接生成落盘不确认(默认);text = 纯文字整理模式先出效果确认后再落盘;always = 任何方式生成都先确认;临时说「先看看效果」当次先确认、说「不用确认」当次跳过
24
+ DATA_SOURCES: [] # 数据源清单(升级不覆盖;AI 每次生成前 Read 本文件按此清单收集;空清单 = 只按会话/文字内容生成)。每项:name 唯一名称 + type 类型 + 路径。三种类型示例(把下方 # 注释示例改成你的真实数据源后填入上方数组):
25
+ # - name: 主项目仓库 # 名称:唯一 key(重名视为同一数据源;口述「只聚合 xxx」按 name 匹配)
26
+ # type: git # git = 代码仓库(git log 聚合提交)
27
+ # mac: ~/Projects/main-app # macOS 路径(绝对路径或 ~ 开头)
28
+ # win: D:\Projects\main-app # Windows 路径;「-」= 该系统不存在,自动跳过
29
+ # - name: 周例会纪要
30
+ # type: file # file = 普通文件/目录(直接 Read 内容聚合,适合文档/纪要/日志素材)
31
+ # mac: ~/Documents/meeting-notes.md
32
+ # win: -
33
+ # - name: 数据接口
34
+ # type: remote # remote = 远程网络源(AI 联网拉取 url 内容;仅生成时联网,HTML 产物仍零外链)
35
+ # url: https://example.com/data.json
24
36
  ```
25
37
 
26
38
  > 临时口头要求(仅对当次生效,不修改上方配置):说「不落盘/别写文件」→ 当次 DISK=false;说「写到桌面/存到 ~/report(macOS)或 D:\report(Windows)」→ 当次改用该 DIR;说「只要 md / 只出 html / 只要内容区截图」→ 当次只落指定格式;说「这次不截图」→ 当次不生成内容区截图;说「只要截图/重新截个图」→ 当次只对现有 html 执行内容区截图(不重新收集数据、不重写 md/txt/html 内容文件);说「别开浏览器」→ 当次 OPEN_HTML=false;说「这周按周日收尾/这周算到周日」→ 当次 WEEK_END=sunday(当次周范围与目录名跟随);说「这次按 xxx 模板来」→ 当次临时换模板(不改配置);说「以后都用这个模板」→ 自动写入下方「📝 自定义模板」节并把 TEMPLATE 改为 custom(永久生效);说「先看看效果/先出效果再落盘」→ 当次先出效果确认后再落盘;说「不用确认/直接落盘」→ 当次跳过确认直接落盘。说「页面用浅色商务主题/浅色主题」→ 当次 THEME=biz;说「以后默认用暖色主题」→ 永久改 THEME=warm。