@morehao/dsh-github-trending 0.8.6 → 0.8.7
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 +8 -0
- package/README.en.md +1 -1
- package/README.md +1 -1
- package/client.js +181 -199
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [v0.8.7] - 2026-11-02
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- **ui**: polish identity bar tabs and about dialog (#84)
|
|
8
|
+
|
|
9
|
+
**Full Changelog**: https://github.com/morehao/dsh-github-trending/compare/v0.8.6...v0.8.7
|
|
10
|
+
|
|
3
11
|
## [v0.8.6] - 2026-11-02
|
|
4
12
|
|
|
5
13
|
### Features
|
package/README.en.md
CHANGED
|
@@ -33,7 +33,7 @@ Open the workbench from the sidebar **GitHub Trending** or `Settings → GitHub
|
|
|
33
33
|
|
|
34
34
|
### Overview
|
|
35
35
|
|
|
36
|
-
Answers "when will it run next, are the four readiness checks all green, what was delivered last time" at a glance. The top shows the plugin identity bar (version / package name / check for updates); the right side keeps the next run and readiness N/4 always visible.
|
|
36
|
+
Answers "when will it run next, are the four readiness checks all green, what was delivered last time" at a glance. The top shows the plugin identity bar (version / package name / GitHub / check for updates); click the package name to open About. The right side keeps the next run and readiness N/4 always visible.
|
|
37
37
|
|
|
38
38
|

|
|
39
39
|
|
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ GitHub 趋势榜的 **DeepSeek Harness 插件**:按日 / 周 / 月周期定时
|
|
|
33
33
|
|
|
34
34
|
### 概览
|
|
35
35
|
|
|
36
|
-
一屏回答「下次什么时候跑、四项就绪检查是否齐、上次交付了什么」。顶部是插件身份条(版本 / 包名 /
|
|
36
|
+
一屏回答「下次什么时候跑、四项就绪检查是否齐、上次交付了什么」。顶部是插件身份条(版本 / 包名 / GitHub / 检查更新),点包名打开「关于」弹层;右侧常驻下次运行与就绪 N/4。
|
|
37
37
|
|
|
38
38
|

|
|
39
39
|
|
package/client.js
CHANGED
|
@@ -54,7 +54,7 @@ var DICT = {
|
|
|
54
54
|
"st.model": "模型",
|
|
55
55
|
"st.repo": "仓库",
|
|
56
56
|
"st.auth": "认证",
|
|
57
|
-
"st.scope": "
|
|
57
|
+
"st.scope": "榜单",
|
|
58
58
|
"st.summarize": "摘要与用量",
|
|
59
59
|
"st.releases": "订阅",
|
|
60
60
|
"st.schedule": "调度",
|
|
@@ -585,7 +585,7 @@ var DICT = {
|
|
|
585
585
|
"overview.releases.repos": "仓库",
|
|
586
586
|
"overview.tokens.note": "概览一屏带出「这次任务共花了多少 token / 历史上累计多少 / 订阅仓库有几个新版本」;只给总用量,不拆维度;本次任务总量已含订阅阶段消耗。旧核心无数据时对应小块整体隐藏,不留 0。",
|
|
587
587
|
"about.title": "关于",
|
|
588
|
-
"about.copy": "
|
|
588
|
+
"about.copy": "复制包名与版本",
|
|
589
589
|
"about.copied": "已复制",
|
|
590
590
|
"about.close": "关闭",
|
|
591
591
|
"about.repo": "GitHub 仓库",
|
|
@@ -605,7 +605,7 @@ var DICT = {
|
|
|
605
605
|
"st.model": "Model",
|
|
606
606
|
"st.repo": "Repository",
|
|
607
607
|
"st.auth": "Auth",
|
|
608
|
-
"st.scope": "
|
|
608
|
+
"st.scope": "Board",
|
|
609
609
|
"st.summarize": "Summary & usage",
|
|
610
610
|
"st.releases": "Subscriptions",
|
|
611
611
|
"st.schedule": "Schedule",
|
|
@@ -1136,7 +1136,7 @@ var DICT = {
|
|
|
1136
1136
|
"overview.releases.repos": "Repos",
|
|
1137
1137
|
"overview.tokens.note": 'The overview surfaces "how many tokens this run spent / all-time accumulated / how many new versions across subscribed repos"; total only, not split by dimension; this run total already includes the subscriptions stage. With an old core that has no data, the corresponding tile is hidden entirely, never shown as 0.',
|
|
1138
1138
|
"about.title": "About",
|
|
1139
|
-
"about.copy": "Copy
|
|
1139
|
+
"about.copy": "Copy package name and version",
|
|
1140
1140
|
"about.copied": "Copied",
|
|
1141
1141
|
"about.close": "Close",
|
|
1142
1142
|
"about.repo": "GitHub repository",
|
|
@@ -1190,6 +1190,7 @@ var CSS = `
|
|
|
1190
1190
|
.dshgt-card-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
|
|
1191
1191
|
.dshgt-card-h h3{margin:0;font-size:13px;font-weight:600;white-space:nowrap;}
|
|
1192
1192
|
.dshgt-hint{color:var(--gt-muted);font-size:12px;}
|
|
1193
|
+
.dshgt-card .dshgt-hint.dshgt-mono{overflow-wrap:anywhere;}
|
|
1193
1194
|
.dshgt-desc{margin:0;color:var(--gt-muted);font-size:12px;}
|
|
1194
1195
|
.dshgt-subhead{margin:4px 0 0;padding-top:8px;border-top:1px solid var(--gt-border);font-size:12px;font-weight:600;color:var(--gt-muted);}
|
|
1195
1196
|
.dshgt-row{display:flex;gap:10px;align-items:center;min-height:28px;flex-wrap:wrap;}
|
|
@@ -1256,7 +1257,8 @@ var CSS = `
|
|
|
1256
1257
|
.dshgt-authwait{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--gt-muted);}
|
|
1257
1258
|
.dshgt-authwait-dot{width:8px;height:8px;border-radius:50%;background:var(--gt-accent);animation:dshgt-pulse 1.1s ease-in-out infinite;}
|
|
1258
1259
|
@keyframes dshgt-pulse{0%,100%{opacity:.25;transform:scale(.8);}50%{opacity:1;transform:scale(1);}}
|
|
1259
|
-
.dshgt-authmodal-footer{display:flex;align-items:center;justify-content:
|
|
1260
|
+
.dshgt-authmodal-footer{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:8px;border-top:1px solid var(--gt-border);padding-top:10px;}
|
|
1261
|
+
.dshgt-authmodal-footer .dshgt-hint{margin-right:auto;}
|
|
1260
1262
|
|
|
1261
1263
|
/* ——— 01 工作台外壳 ——— */
|
|
1262
1264
|
.dshgt-shell{gap:0;height:100%;min-height:0;overflow:hidden;}
|
|
@@ -1306,29 +1308,29 @@ var CSS = `
|
|
|
1306
1308
|
.dshgt-inline-tag{margin-left:6px;vertical-align:1px;}
|
|
1307
1309
|
|
|
1308
1310
|
/* ——— 顶部身份条(第一行):名称 / 版本 / 完整包名 / GitHub / 检查更新 ——— */
|
|
1309
|
-
.dshgt-idbar{display:flex;align-items:center;gap:
|
|
1310
|
-
.dshgt-idbar .dshgt-brand{display:flex;align-items:center;gap:9px;padding:0;flex:none;}
|
|
1311
|
+
.dshgt-idbar{display:flex;align-items:center;gap:9px;height:48px;padding:0 18px;border-bottom:1px solid var(--gt-border);flex:none;background:var(--gt-bg);min-width:0;}
|
|
1312
|
+
.dshgt-idbar .dshgt-brand{display:flex;align-items:center;gap:9px;padding:0;flex:none;min-width:0;}
|
|
1311
1313
|
.dshgt-idbar .dshgt-brand svg{width:22px;height:22px;flex:none;border-radius:6px;}
|
|
1312
1314
|
.dshgt-brand-name{font-size:13.5px;font-weight:650;letter-spacing:-.01em;white-space:nowrap;line-height:1.3;}
|
|
1313
|
-
.dshgt-id-ver{
|
|
1314
|
-
.dshgt-id-ver:hover{border-color:color-mix(in srgb,var(--gt-accent) 45%,var(--gt-border));}
|
|
1315
|
+
.dshgt-id-ver{display:inline-flex;align-items:center;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:var(--gt-fg);background:var(--gt-card);border:1px solid var(--gt-border);border-radius:999px;padding:1px 7px;line-height:16px;flex:none;white-space:nowrap;}
|
|
1315
1316
|
.dshgt-id-sep{width:1px;height:16px;background:var(--gt-border);flex:none;}
|
|
1316
|
-
.dshgt-id-pkg{appearance:none;border:0;background:none;padding:2px 4px;border-radius:5px;color:var(--gt-muted);cursor:pointer;font-size:12px;max-width:44vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:
|
|
1317
|
+
.dshgt-id-pkg{appearance:none;border:0;background:none;padding:2px 4px;border-radius:5px;color:var(--gt-muted);cursor:pointer;font-size:12px;max-width:min(44vw,360px);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:0 1 auto;}
|
|
1317
1318
|
.dshgt-id-pkg:hover{color:var(--gt-fg);background:color-mix(in srgb,var(--gt-fg) 5%,var(--gt-bg));}
|
|
1318
|
-
.dshgt-idbar-right{margin-left:auto;display:flex;align-items:center;gap:10px;flex:none;}
|
|
1319
|
-
.dshgt-id-gh{display:inline-flex;align-items:center;justify-content:center;width:
|
|
1319
|
+
.dshgt-idbar-right{margin-left:auto;display:flex;align-items:center;gap:10px;flex:none;min-width:0;}
|
|
1320
|
+
.dshgt-id-gh{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:6px;color:var(--gt-muted);border:1px solid transparent;flex:none;}
|
|
1320
1321
|
.dshgt-id-gh:hover{color:var(--gt-fg);background:color-mix(in srgb,var(--gt-fg) 6%,var(--gt-bg));border-color:var(--gt-border);}
|
|
1321
|
-
.dshgt-id-upd{display:flex;align-items:center;gap:10px;}
|
|
1322
|
-
.dshgt-id-status{font-size:12px;color:var(--gt-muted);white-space:nowrap;display:inline-flex;align-items:center;gap:6px;}
|
|
1322
|
+
.dshgt-id-upd{display:flex;align-items:center;gap:10px;min-width:0;}
|
|
1323
|
+
.dshgt-id-status{font-size:12px;color:var(--gt-muted);white-space:nowrap;display:inline-flex;align-items:center;gap:6px;min-width:0;overflow:hidden;text-overflow:ellipsis;}
|
|
1323
1324
|
.dshgt-id-status.ok{color:var(--gt-ok);}
|
|
1324
1325
|
.dshgt-id-status.new{color:var(--gt-warn);}
|
|
1325
1326
|
.dshgt-id-status.err{color:var(--gt-err);}
|
|
1326
|
-
.dshgt-id-actions{display:flex;align-items:center;gap:8px;}
|
|
1327
|
+
.dshgt-id-actions{display:flex;align-items:center;gap:8px;flex:none;}
|
|
1327
1328
|
|
|
1328
1329
|
/* ——— 横向 tab(第二行)+ 右侧状态 ——— */
|
|
1329
|
-
.dshgt-tabsbar{display:flex;align-items:stretch;gap:
|
|
1330
|
-
.dshgt-tabnav{display:flex;align-items:stretch;gap:2px;height:100%;}
|
|
1331
|
-
.dshgt-
|
|
1330
|
+
.dshgt-tabsbar{display:flex;align-items:stretch;gap:12px;height:46px;padding:0 18px;border-bottom:1px solid var(--gt-border);flex:none;background:var(--gt-bg);min-width:0;}
|
|
1331
|
+
.dshgt-tabnav{display:flex;align-items:stretch;gap:2px;height:100%;min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;}
|
|
1332
|
+
.dshgt-tabnav::-webkit-scrollbar{display:none;}
|
|
1333
|
+
.dshgt-tab{display:flex;align-items:center;gap:7px;padding:0 12px;border:0;background:none;color:var(--gt-muted);cursor:pointer;font:inherit;font-size:13.5px;position:relative;border-bottom:2px solid transparent;margin-bottom:-1px;flex:none;white-space:nowrap;}
|
|
1332
1334
|
.dshgt-tab svg{opacity:.8;}
|
|
1333
1335
|
.dshgt-tab:hover{color:var(--gt-fg);}
|
|
1334
1336
|
.dshgt-tab.on{color:var(--gt-fg);font-weight:600;border-bottom-color:var(--gt-accent);}
|
|
@@ -1340,7 +1342,10 @@ var CSS = `
|
|
|
1340
1342
|
.dshgt-status-val{color:var(--gt-fg);font-weight:600;}
|
|
1341
1343
|
.dshgt-status-sub{color:var(--gt-muted);}
|
|
1342
1344
|
@media (max-width:1100px){ .dshgt-id-pkg{max-width:26vw;} }
|
|
1343
|
-
@media (max-width:
|
|
1345
|
+
@media (max-width:900px){
|
|
1346
|
+
.dshgt-id-pkg{max-width:22vw;}
|
|
1347
|
+
.dshgt-status-item.dshgt-next{display:none;}
|
|
1348
|
+
}
|
|
1344
1349
|
|
|
1345
1350
|
/* ——— 概览 ——— */
|
|
1346
1351
|
.dshgt-delivery{border:1px solid var(--gt-border);border-radius:12px;padding:18px 20px 16px;background:var(--gt-card);display:flex;flex-direction:column;gap:6px;}
|
|
@@ -1483,7 +1488,7 @@ var CSS = `
|
|
|
1483
1488
|
.dshgt-run-what{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;}
|
|
1484
1489
|
.dshgt-run-muted{color:var(--gt-muted);font-size:12px;margin-left:6px;}
|
|
1485
1490
|
.dshgt-run-files,.dshgt-run-duration{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--gt-muted);text-align:right;}
|
|
1486
|
-
.dshgt-run-tokens{font-size:11.5px;color:var(--gt-muted);text-align:right;white-space:nowrap;}
|
|
1491
|
+
.dshgt-run-tokens{font-size:11.5px;color:var(--gt-muted);text-align:right;white-space:nowrap;min-width:0;overflow:hidden;text-overflow:ellipsis;}
|
|
1487
1492
|
.dshgt-run-item.has-tokens .dshgt-run-row{grid-template-columns:18px 120px 56px minmax(0,1fr) 64px 78px 74px 20px;}
|
|
1488
1493
|
.dshgt-run-chev{color:var(--gt-muted);text-align:center;transition:transform .15s;}
|
|
1489
1494
|
.dshgt-run-item.open .dshgt-run-chev{transform:rotate(90deg);}
|
|
@@ -1507,29 +1512,23 @@ var CSS = `
|
|
|
1507
1512
|
.dshgt-log-head .dshgt-btn{margin-left:auto;}
|
|
1508
1513
|
.dshgt-log-pre{margin:0;max-height:52vh;overflow:auto;padding:12px;border-radius:8px;background:color-mix(in srgb,var(--gt-fg) 5%,var(--gt-card));font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.6;white-space:pre-wrap;word-break:break-word;}
|
|
1509
1514
|
.dshgt-log-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
|
|
1510
|
-
.dshgt-about{max-width:520px;}
|
|
1515
|
+
.dshgt-about{max-width:520px;width:100%;}
|
|
1511
1516
|
.dshgt-about-head{display:flex;align-items:center;gap:10px;}
|
|
1512
1517
|
.dshgt-about-title{margin:0;font-size:16px;}
|
|
1513
1518
|
.dshgt-about-head .dshgt-btn{margin-left:auto;}
|
|
1514
|
-
.dshgt-about-pkg{display:flex;align-items:center;width:100%;text-align:left;border:1px solid var(--gt-border);background:var(--gt-card);border-radius:8px;padding:9px 10px;cursor:pointer;font-family:inherit;color:inherit;transition:border-color .12s ease,background .12s ease;}
|
|
1519
|
+
.dshgt-about-pkg{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:1px solid var(--gt-border);background:var(--gt-card);border-radius:8px;padding:9px 10px;cursor:pointer;font-family:inherit;color:inherit;transition:border-color .12s ease,background .12s ease;}
|
|
1515
1520
|
.dshgt-about-pkg:hover{border-color:color-mix(in srgb,var(--gt-accent) 40%,var(--gt-border));background:color-mix(in srgb,var(--gt-fg) 4%,var(--gt-card));}
|
|
1516
1521
|
.dshgt-about-pkg.is-copied{border-color:color-mix(in srgb,var(--gt-ok) 45%,var(--gt-border));}
|
|
1517
|
-
.dshgt-about-pkg
|
|
1518
|
-
.dshgt-about
|
|
1522
|
+
.dshgt-about-pkg-name{flex:1;min-width:0;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:text;}
|
|
1523
|
+
.dshgt-about-pkg-done{flex:none;font-size:11px;color:var(--gt-ok);}
|
|
1524
|
+
.dshgt-about .dshgt-kv{grid-template-columns:110px minmax(0,1fr);}
|
|
1519
1525
|
.dshgt-about .dshgt-kv a{color:var(--gt-accent);text-decoration:none;}
|
|
1520
1526
|
.dshgt-about .dshgt-kv a:hover{text-decoration:underline;}
|
|
1527
|
+
.dshgt-about .dshgt-kv dd{min-width:0;overflow-wrap:anywhere;}
|
|
1521
1528
|
.dshgt-about-core{display:inline-flex;align-items:center;gap:7px;}
|
|
1522
1529
|
.dshgt-about-gh{display:inline-flex;align-items:center;justify-content:center;color:var(--gt-muted);}
|
|
1523
1530
|
.dshgt-about-gh:hover{color:var(--gt-fg);}
|
|
1524
1531
|
.dshgt-gh{width:15px;height:15px;display:block;fill:currentColor;}
|
|
1525
|
-
/* 关于弹层的更新行:与身份条同构(左侧状态 + 右侧单按钮),无标题、无说明。 */
|
|
1526
|
-
.dshgt-about-upd{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:6px;padding-top:12px;border-top:1px solid color-mix(in srgb,var(--gt-border) 70%,transparent);}
|
|
1527
|
-
.dshgt-about-status{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--gt-muted);}
|
|
1528
|
-
.dshgt-about-status::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;flex:none;opacity:.9;}
|
|
1529
|
-
.dshgt-about-status.ok{color:var(--gt-ok);}
|
|
1530
|
-
.dshgt-about-status.new{color:var(--gt-warn);}
|
|
1531
|
-
.dshgt-about-status.err{color:var(--gt-err);}
|
|
1532
|
-
.dshgt-about-actions{display:flex;align-items:center;gap:8px;flex:none;}
|
|
1533
1532
|
|
|
1534
1533
|
/* ——— 订阅:命令栏 + 四列表格 + 选择条 + 发版记录抽屉 ——— */
|
|
1535
1534
|
.dshgt-subs{gap:12px;padding-bottom:10px;}
|
|
@@ -1662,7 +1661,6 @@ var CSS = `
|
|
|
1662
1661
|
}
|
|
1663
1662
|
|
|
1664
1663
|
@media (max-width:1100px){
|
|
1665
|
-
.dshgt-app{grid-template-columns:190px minmax(0,1fr);}
|
|
1666
1664
|
.dshgt-page-head{padding:18px 22px 12px;}
|
|
1667
1665
|
.dshgt-view{padding:18px 22px 30px;}
|
|
1668
1666
|
.dshgt-facts{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:10px;}
|
|
@@ -1676,11 +1674,57 @@ var CSS = `
|
|
|
1676
1674
|
.dshgt-dateselect{min-width:180px;}
|
|
1677
1675
|
}
|
|
1678
1676
|
@media (max-width:980px){
|
|
1679
|
-
.dshgt-app{grid-template-columns:172px minmax(0,1fr);}
|
|
1680
1677
|
.dshgt-page-head h1{font-size:19px;}
|
|
1681
1678
|
.dshgt-dek{font-size:12.5px;}
|
|
1682
1679
|
.dshgt-main-body > .dshgt-settings{padding:14px 18px 18px;}
|
|
1683
1680
|
}
|
|
1681
|
+
@media (max-width:900px){
|
|
1682
|
+
.dshgt-main-body > .dshgt-settings{padding:14px 16px 18px;}
|
|
1683
|
+
}
|
|
1684
|
+
@media (max-width:760px){
|
|
1685
|
+
.dshgt-idbar{padding:0 14px;gap:8px;}
|
|
1686
|
+
.dshgt-id-pkg{max-width:26vw;}
|
|
1687
|
+
.dshgt-id-status{display:none;}
|
|
1688
|
+
.dshgt-tabsbar{padding:0 14px;gap:8px;}
|
|
1689
|
+
.dshgt-tabsbar-status{display:none;}
|
|
1690
|
+
.dshgt-page-head{flex-wrap:wrap;padding:16px 18px 12px;gap:10px 16px;}
|
|
1691
|
+
.dshgt-head-actions{margin-left:0;width:100%;justify-content:flex-start;padding-top:0;flex-wrap:wrap;}
|
|
1692
|
+
.dshgt-view{padding:16px 18px 28px;}
|
|
1693
|
+
.dshgt-runs-filter{margin-left:0;width:100%;flex-wrap:wrap;}
|
|
1694
|
+
.dshgt-run-row{grid-template-columns:14px 92px 46px minmax(0,1fr) 20px;gap:8px;padding:0 2px;}
|
|
1695
|
+
.dshgt-run-item.has-tokens .dshgt-run-row{grid-template-columns:14px 92px 46px minmax(0,1fr) 64px 20px;}
|
|
1696
|
+
.dshgt-run-duration{display:none;}
|
|
1697
|
+
.dshgt-settings{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);gap:10px;}
|
|
1698
|
+
.dshgt-vtabs{flex-direction:row;flex-wrap:wrap;overflow:visible;border-right:0;border-bottom:1px solid var(--gt-border);padding:0 0 8px;}
|
|
1699
|
+
.dshgt-vtabs::-webkit-scrollbar{display:none;}
|
|
1700
|
+
.dshgt-vtab{flex:none;white-space:nowrap;}
|
|
1701
|
+
.dshgt-vpanel{padding-right:0;}
|
|
1702
|
+
.dshgt-facts{grid-template-columns:minmax(0,1fr);row-gap:8px;}
|
|
1703
|
+
.dshgt-fact{padding:0;}
|
|
1704
|
+
.dshgt-fact + .dshgt-fact{border-left:0;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--gt-border) 70%,transparent);}
|
|
1705
|
+
.dshgt-detail-grid{grid-template-columns:minmax(0,1fr);}
|
|
1706
|
+
}
|
|
1707
|
+
@media (max-width:560px){
|
|
1708
|
+
.dshgt-modal{width:calc(100% - 20px);padding:14px;max-height:88vh;}
|
|
1709
|
+
.dshgt-about{max-width:none;}
|
|
1710
|
+
.dshgt-about .dshgt-kv{grid-template-columns:88px minmax(0,1fr);}
|
|
1711
|
+
.dshgt-authmodal-footer .dshgt-hint{flex-basis:100%;}
|
|
1712
|
+
}
|
|
1713
|
+
@media (max-width:480px){
|
|
1714
|
+
.dshgt-brand-name{display:none;}
|
|
1715
|
+
.dshgt-id-pkg{max-width:30vw;}
|
|
1716
|
+
.dshgt-tab{padding:0 9px;gap:5px;font-size:13px;}
|
|
1717
|
+
.dshgt-tab-tail{display:none;}
|
|
1718
|
+
}
|
|
1719
|
+
@media (max-width:380px){
|
|
1720
|
+
.dshgt-tab svg{display:none;}
|
|
1721
|
+
.dshgt-tab{padding:0 10px;}
|
|
1722
|
+
}
|
|
1723
|
+
@media (max-width:420px){
|
|
1724
|
+
.dshgt-about .dshgt-kv{grid-template-columns:minmax(0,1fr);gap:2px 0;}
|
|
1725
|
+
.dshgt-about .dshgt-kv dt{margin-top:6px;}
|
|
1726
|
+
.dshgt-authcode-value{font-size:24px;letter-spacing:4px;}
|
|
1727
|
+
}
|
|
1684
1728
|
`;
|
|
1685
1729
|
function injectStyles() {
|
|
1686
1730
|
if (typeof document === "undefined") return () => void 0;
|
|
@@ -5432,6 +5476,100 @@ function SubscriptionsView(props) {
|
|
|
5432
5476
|
);
|
|
5433
5477
|
}
|
|
5434
5478
|
|
|
5479
|
+
// client/about.ts
|
|
5480
|
+
function githubIcon() {
|
|
5481
|
+
return h("svg", {
|
|
5482
|
+
className: "dshgt-gh",
|
|
5483
|
+
viewBox: "0 0 16 16",
|
|
5484
|
+
"aria-hidden": "true",
|
|
5485
|
+
dangerouslySetInnerHTML: {
|
|
5486
|
+
__html: '<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"/>'
|
|
5487
|
+
}
|
|
5488
|
+
});
|
|
5489
|
+
}
|
|
5490
|
+
function AboutDialog(props) {
|
|
5491
|
+
const { t, state } = props;
|
|
5492
|
+
const [copied, setCopied] = import_react.default.useState(false);
|
|
5493
|
+
const plugin = state.plugin;
|
|
5494
|
+
const fullName = `${plugin.name}@${plugin.version}`;
|
|
5495
|
+
const repository = plugin.repository;
|
|
5496
|
+
const ownerRepo = repository === void 0 ? void 0 : repository.replace(/^https?:\/\/github\.com\//, "");
|
|
5497
|
+
const core = state.core;
|
|
5498
|
+
const coreVersion = core.version === void 0 ? "" : `trendradar ${core.version}`;
|
|
5499
|
+
const coreRepo = core.repository;
|
|
5500
|
+
const coreOwnerRepo = coreRepo === void 0 ? void 0 : coreRepo.replace(/^https?:\/\/github\.com\//, "");
|
|
5501
|
+
import_react.default.useEffect(() => {
|
|
5502
|
+
const onKey = (event) => {
|
|
5503
|
+
if (event.key === "Escape") props.onClose();
|
|
5504
|
+
};
|
|
5505
|
+
document.addEventListener("keydown", onKey);
|
|
5506
|
+
return () => document.removeEventListener("keydown", onKey);
|
|
5507
|
+
}, [props]);
|
|
5508
|
+
const copy = () => {
|
|
5509
|
+
void copyText(fullName).then((ok) => {
|
|
5510
|
+
if (!ok) return;
|
|
5511
|
+
setCopied(true);
|
|
5512
|
+
setTimeout(() => setCopied(false), 1400);
|
|
5513
|
+
});
|
|
5514
|
+
};
|
|
5515
|
+
const coreValue = () => {
|
|
5516
|
+
if (coreRepo !== void 0 && coreOwnerRepo !== void 0) {
|
|
5517
|
+
const label = core.version === void 0 ? coreOwnerRepo : `${coreOwnerRepo}@${core.version}`;
|
|
5518
|
+
return h(
|
|
5519
|
+
"span",
|
|
5520
|
+
{ className: "dshgt-about-core" },
|
|
5521
|
+
h("a", { href: coreRepo, target: "_blank", rel: "noreferrer" }, label),
|
|
5522
|
+
h(
|
|
5523
|
+
"a",
|
|
5524
|
+
{ className: "dshgt-about-gh", href: coreRepo, target: "_blank", rel: "noreferrer", title: t("about.core.repo"), "aria-label": t("about.core.repo") },
|
|
5525
|
+
githubIcon()
|
|
5526
|
+
)
|
|
5527
|
+
);
|
|
5528
|
+
}
|
|
5529
|
+
return coreVersion === "" ? "—" : coreVersion;
|
|
5530
|
+
};
|
|
5531
|
+
const dialog = h(
|
|
5532
|
+
"div",
|
|
5533
|
+
{ className: "dshgt-modal-mask", onClick: (event) => {
|
|
5534
|
+
if (event.target === event.currentTarget) props.onClose();
|
|
5535
|
+
} },
|
|
5536
|
+
h(
|
|
5537
|
+
"div",
|
|
5538
|
+
{ className: "dshgt-modal dshgt-about", role: "dialog", "aria-modal": "true", "aria-label": t("about.title") },
|
|
5539
|
+
h(
|
|
5540
|
+
"div",
|
|
5541
|
+
{ className: "dshgt-about-head" },
|
|
5542
|
+
h("h3", { className: "dshgt-about-title" }, t("about.title")),
|
|
5543
|
+
h(Btn, { small: true, onClick: () => props.onClose() }, t("about.close"))
|
|
5544
|
+
),
|
|
5545
|
+
h(
|
|
5546
|
+
"button",
|
|
5547
|
+
{
|
|
5548
|
+
type: "button",
|
|
5549
|
+
className: `dshgt-about-pkg${copied ? " is-copied" : ""}`,
|
|
5550
|
+
title: copied ? t("about.copied") : t("about.copy"),
|
|
5551
|
+
"aria-label": `${t("about.copy")}: ${fullName}`,
|
|
5552
|
+
onClick: copy
|
|
5553
|
+
},
|
|
5554
|
+
h("span", { className: "dshgt-about-pkg-name dshgt-mono" }, fullName),
|
|
5555
|
+
copied ? h("span", { className: "dshgt-about-pkg-done" }, t("about.copied")) : null
|
|
5556
|
+
),
|
|
5557
|
+
h(KV, {
|
|
5558
|
+
items: [
|
|
5559
|
+
[
|
|
5560
|
+
t("about.repo"),
|
|
5561
|
+
repository === void 0 || ownerRepo === void 0 ? h("span", { className: "dshgt-hint" }, t("about.repo.missing")) : h("a", { href: repository, target: "_blank", rel: "noreferrer" }, ownerRepo)
|
|
5562
|
+
],
|
|
5563
|
+
[t("about.license"), "MIT"],
|
|
5564
|
+
[t("about.core"), coreValue()],
|
|
5565
|
+
[t("about.env"), t("about.env.value")]
|
|
5566
|
+
]
|
|
5567
|
+
})
|
|
5568
|
+
)
|
|
5569
|
+
);
|
|
5570
|
+
return h("div", { className: "dshgt-root" }, dialog);
|
|
5571
|
+
}
|
|
5572
|
+
|
|
5435
5573
|
// node_modules/@morehao/dsh-plugin-kit/dist/update-client.js
|
|
5436
5574
|
var IDLE = { status: "idle", view: null, error: null };
|
|
5437
5575
|
function errorOf(error) {
|
|
@@ -5540,154 +5678,6 @@ function usePluginUpdate() {
|
|
|
5540
5678
|
return [state, controller];
|
|
5541
5679
|
}
|
|
5542
5680
|
|
|
5543
|
-
// client/about.ts
|
|
5544
|
-
function githubIcon() {
|
|
5545
|
-
return h("svg", {
|
|
5546
|
-
className: "dshgt-gh",
|
|
5547
|
-
viewBox: "0 0 16 16",
|
|
5548
|
-
"aria-hidden": "true",
|
|
5549
|
-
dangerouslySetInnerHTML: {
|
|
5550
|
-
__html: '<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"/>'
|
|
5551
|
-
}
|
|
5552
|
-
});
|
|
5553
|
-
}
|
|
5554
|
-
function updateLine(t, state, fallbackVersion) {
|
|
5555
|
-
const { status, view, error } = state;
|
|
5556
|
-
if (status === "checking" || view === null) return { text: t("shell.update.checking"), kind: "muted" };
|
|
5557
|
-
if (status === "applying") return { text: t("shell.update.applying", { version: view.latestVersion ?? "" }), kind: "muted" };
|
|
5558
|
-
if (status === "restart-required" || status === "applied") return { text: t("shell.update.done", { version: view.latestVersion ?? "" }), kind: "ok" };
|
|
5559
|
-
if (status === "failed") return { text: error?.code === "CHECK_FAILED" ? t("shell.update.checkFailed") : t("shell.update.failed"), kind: "err" };
|
|
5560
|
-
if (view.checkFailed) return { text: t("shell.update.checkFailed"), kind: "err" };
|
|
5561
|
-
if (view.updateAvailable) return { text: t("shell.update.available", { latest: view.latestVersion ?? "" }), kind: "new" };
|
|
5562
|
-
return { text: t("shell.update.latest", { version: view.currentVersion ?? fallbackVersion }), kind: "ok" };
|
|
5563
|
-
}
|
|
5564
|
-
function UpdateRow(props) {
|
|
5565
|
-
const { t, update, controller, fallbackVersion } = props;
|
|
5566
|
-
const [confirming, setConfirming] = import_react.default.useState(false);
|
|
5567
|
-
const [cmdCopied, setCmdCopied] = import_react.default.useState(false);
|
|
5568
|
-
import_react.default.useEffect(() => {
|
|
5569
|
-
if (update.status === "applying" || update.status === "restart-required" || update.status === "applied") setConfirming(false);
|
|
5570
|
-
}, [update.status]);
|
|
5571
|
-
const view = update.view;
|
|
5572
|
-
const status = update.status;
|
|
5573
|
-
const busy = status === "checking" || status === "applying";
|
|
5574
|
-
const settled = status === "restart-required" || status === "applied";
|
|
5575
|
-
const latestVersion = view === null ? "" : view.latestVersion ?? "";
|
|
5576
|
-
const actionable = view !== null && view.updateAvailable && view.canApply && !settled && !busy;
|
|
5577
|
-
const manual = view !== null && (!view.canApply || view.checkFailed) ? view.manualCommand ?? null : null;
|
|
5578
|
-
const line = updateLine(t, update, fallbackVersion);
|
|
5579
|
-
const copyCmd = () => {
|
|
5580
|
-
if (manual === null) return;
|
|
5581
|
-
void copyText(manual).then((ok) => {
|
|
5582
|
-
if (!ok) return;
|
|
5583
|
-
setCmdCopied(true);
|
|
5584
|
-
setTimeout(() => setCmdCopied(false), 1400);
|
|
5585
|
-
});
|
|
5586
|
-
};
|
|
5587
|
-
function action() {
|
|
5588
|
-
if (status === "applying") return h(Btn, { small: true, disabled: true }, t("shell.update.applyingShort"));
|
|
5589
|
-
if (actionable) {
|
|
5590
|
-
if (confirming) {
|
|
5591
|
-
return [
|
|
5592
|
-
h(Btn, { key: "yes", small: true, variant: "danger", onClick: () => {
|
|
5593
|
-
setConfirming(false);
|
|
5594
|
-
void controller.apply();
|
|
5595
|
-
} }, t("shell.update.confirmYes")),
|
|
5596
|
-
h(Btn, { key: "no", small: true, onClick: () => setConfirming(false) }, t("shell.update.cancel"))
|
|
5597
|
-
];
|
|
5598
|
-
}
|
|
5599
|
-
return h(Btn, { small: true, variant: "primary", onClick: () => setConfirming(true) }, t("shell.update.apply", { version: latestVersion }));
|
|
5600
|
-
}
|
|
5601
|
-
if (manual !== null) return h(Btn, { small: true, onClick: copyCmd }, cmdCopied ? t("shell.update.copied") : t("shell.update.copyCmd"));
|
|
5602
|
-
return h(Btn, { small: true, disabled: busy, onClick: () => void controller.check({ fresh: true }) }, t("shell.update.check"));
|
|
5603
|
-
}
|
|
5604
|
-
return h(
|
|
5605
|
-
"div",
|
|
5606
|
-
{ className: "dshgt-about-upd" },
|
|
5607
|
-
h(
|
|
5608
|
-
"span",
|
|
5609
|
-
{ className: `dshgt-about-status ${confirming ? "new" : line.kind}` },
|
|
5610
|
-
confirming ? t("shell.update.confirmHint") : line.text
|
|
5611
|
-
),
|
|
5612
|
-
h("span", { className: "dshgt-about-actions" }, action())
|
|
5613
|
-
);
|
|
5614
|
-
}
|
|
5615
|
-
function AboutDialog(props) {
|
|
5616
|
-
const { t, state } = props;
|
|
5617
|
-
const [copied, setCopied] = import_react.default.useState(false);
|
|
5618
|
-
const [updateState, updateController] = usePluginUpdate();
|
|
5619
|
-
const plugin = state.plugin;
|
|
5620
|
-
const fullName = `${plugin.name}@v${plugin.version}`;
|
|
5621
|
-
const repository = plugin.repository;
|
|
5622
|
-
const ownerRepo = repository === void 0 ? void 0 : repository.replace(/^https?:\/\/github\.com\//, "");
|
|
5623
|
-
const repoVersion = ownerRepo === void 0 ? void 0 : `${ownerRepo}@v${plugin.version}`;
|
|
5624
|
-
const core = state.core;
|
|
5625
|
-
const coreVersion = core.version === void 0 ? "" : `trendradar ${core.version}`;
|
|
5626
|
-
const coreRepo = core.repository;
|
|
5627
|
-
import_react.default.useEffect(() => {
|
|
5628
|
-
const onKey = (event) => {
|
|
5629
|
-
if (event.key === "Escape") props.onClose();
|
|
5630
|
-
};
|
|
5631
|
-
document.addEventListener("keydown", onKey);
|
|
5632
|
-
return () => document.removeEventListener("keydown", onKey);
|
|
5633
|
-
}, [props]);
|
|
5634
|
-
const copy = () => {
|
|
5635
|
-
void copyText(fullName).then((ok) => {
|
|
5636
|
-
if (!ok) return;
|
|
5637
|
-
setCopied(true);
|
|
5638
|
-
setTimeout(() => setCopied(false), 1400);
|
|
5639
|
-
});
|
|
5640
|
-
};
|
|
5641
|
-
const coreValue = () => {
|
|
5642
|
-
if (coreVersion === "") return "—";
|
|
5643
|
-
if (coreRepo === void 0) return coreVersion;
|
|
5644
|
-
return h(
|
|
5645
|
-
"span",
|
|
5646
|
-
{ className: "dshgt-about-core" },
|
|
5647
|
-
h("a", { href: coreRepo, target: "_blank", rel: "noreferrer" }, coreVersion),
|
|
5648
|
-
h(
|
|
5649
|
-
"a",
|
|
5650
|
-
{ className: "dshgt-about-gh", href: coreRepo, target: "_blank", rel: "noreferrer", title: t("about.core.repo"), "aria-label": t("about.core.repo") },
|
|
5651
|
-
githubIcon()
|
|
5652
|
-
)
|
|
5653
|
-
);
|
|
5654
|
-
};
|
|
5655
|
-
const dialog = h(
|
|
5656
|
-
"div",
|
|
5657
|
-
{ className: "dshgt-modal-mask", onClick: (event) => {
|
|
5658
|
-
if (event.target === event.currentTarget) props.onClose();
|
|
5659
|
-
} },
|
|
5660
|
-
h(
|
|
5661
|
-
"div",
|
|
5662
|
-
{ className: "dshgt-modal dshgt-about", role: "dialog", "aria-modal": "true", "aria-label": t("about.title") },
|
|
5663
|
-
h(
|
|
5664
|
-
"div",
|
|
5665
|
-
{ className: "dshgt-about-head" },
|
|
5666
|
-
h("h3", { className: "dshgt-about-title" }, t("about.title")),
|
|
5667
|
-
h(Btn, { small: true, onClick: () => props.onClose() }, t("about.close"))
|
|
5668
|
-
),
|
|
5669
|
-
h(
|
|
5670
|
-
"button",
|
|
5671
|
-
{ type: "button", className: `dshgt-about-pkg${copied ? " is-copied" : ""}`, onClick: copy },
|
|
5672
|
-
h("span", { className: "dshgt-mono" }, fullName)
|
|
5673
|
-
),
|
|
5674
|
-
h(KV, {
|
|
5675
|
-
items: [
|
|
5676
|
-
[
|
|
5677
|
-
t("about.repo"),
|
|
5678
|
-
repository === void 0 || repoVersion === void 0 ? h("span", { className: "dshgt-hint" }, t("about.repo.missing")) : h("a", { href: repository, target: "_blank", rel: "noreferrer" }, repoVersion)
|
|
5679
|
-
],
|
|
5680
|
-
[t("about.license"), "MIT"],
|
|
5681
|
-
[t("about.core"), coreValue()],
|
|
5682
|
-
[t("about.env"), t("about.env.value")]
|
|
5683
|
-
]
|
|
5684
|
-
}),
|
|
5685
|
-
h(UpdateRow, { t, update: updateState, controller: updateController, fallbackVersion: plugin.version })
|
|
5686
|
-
)
|
|
5687
|
-
);
|
|
5688
|
-
return h("div", { className: "dshgt-root" }, dialog);
|
|
5689
|
-
}
|
|
5690
|
-
|
|
5691
5681
|
// client/identity-bar.ts
|
|
5692
5682
|
function logo() {
|
|
5693
5683
|
return h(
|
|
@@ -5705,7 +5695,6 @@ function githubIcon2() {
|
|
|
5705
5695
|
}
|
|
5706
5696
|
function IdentityBar(props) {
|
|
5707
5697
|
const { t, plugin } = props;
|
|
5708
|
-
const [copied, setCopied] = import_react.default.useState(false);
|
|
5709
5698
|
const [confirming, setConfirming] = import_react.default.useState(false);
|
|
5710
5699
|
const [cmdCopied, setCmdCopied] = import_react.default.useState(false);
|
|
5711
5700
|
const [updateState, controller] = usePluginUpdate();
|
|
@@ -5714,13 +5703,6 @@ function IdentityBar(props) {
|
|
|
5714
5703
|
import_react.default.useEffect(() => {
|
|
5715
5704
|
if (status === "applying" || status === "restart-required" || status === "applied") setConfirming(false);
|
|
5716
5705
|
}, [status]);
|
|
5717
|
-
const copyPkg = () => {
|
|
5718
|
-
void copyText(plugin.name).then((ok) => {
|
|
5719
|
-
if (!ok) return;
|
|
5720
|
-
setCopied(true);
|
|
5721
|
-
setTimeout(() => setCopied(false), 1400);
|
|
5722
|
-
});
|
|
5723
|
-
};
|
|
5724
5706
|
const busy = status === "checking" || status === "applying";
|
|
5725
5707
|
const settled = status === "restart-required" || status === "applied";
|
|
5726
5708
|
const latestVersion = view === null ? "" : view.latestVersion ?? "";
|
|
@@ -5767,17 +5749,20 @@ function IdentityBar(props) {
|
|
|
5767
5749
|
"div",
|
|
5768
5750
|
{ className: "dshgt-idbar" },
|
|
5769
5751
|
h("div", { className: "dshgt-brand" }, logo(), h("span", { className: "dshgt-brand-name" }, t("section.title"))),
|
|
5770
|
-
h("
|
|
5771
|
-
h("span", { className: "dshgt-id-sep" }),
|
|
5752
|
+
h("span", { className: "dshgt-id-ver dshgt-mono" }, `v${plugin.version}`),
|
|
5753
|
+
h("span", { className: "dshgt-id-sep dshgt-id-sep-pkg" }),
|
|
5772
5754
|
h(
|
|
5773
5755
|
"button",
|
|
5774
|
-
{ type: "button", className: "dshgt-id-pkg dshgt-mono", title:
|
|
5775
|
-
|
|
5756
|
+
{ type: "button", className: "dshgt-id-pkg dshgt-mono", title: t("about.title"), onClick: () => props.onOpenAbout() },
|
|
5757
|
+
plugin.name
|
|
5776
5758
|
),
|
|
5759
|
+
plugin.repository === void 0 ? null : [
|
|
5760
|
+
h("span", { key: "gh-sep", className: "dshgt-id-sep dshgt-id-sep-gh" }),
|
|
5761
|
+
h("a", { key: "gh", className: "dshgt-id-gh", href: plugin.repository, target: "_blank", rel: "noreferrer", title: t("about.repo"), "aria-label": t("about.repo") }, githubIcon2())
|
|
5762
|
+
],
|
|
5777
5763
|
h(
|
|
5778
5764
|
"div",
|
|
5779
5765
|
{ className: "dshgt-idbar-right" },
|
|
5780
|
-
plugin.repository === void 0 ? null : h("a", { className: "dshgt-id-gh", href: plugin.repository, target: "_blank", rel: "noreferrer", title: t("about.repo"), "aria-label": t("about.repo") }, githubIcon2()),
|
|
5781
5766
|
h(
|
|
5782
5767
|
"span",
|
|
5783
5768
|
{ className: "dshgt-id-upd" },
|
|
@@ -5787,9 +5772,6 @@ function IdentityBar(props) {
|
|
|
5787
5772
|
)
|
|
5788
5773
|
);
|
|
5789
5774
|
}
|
|
5790
|
-
function updatedCopyTitle(t, copied) {
|
|
5791
|
-
return copied ? t("about.copied") : t("about.copy");
|
|
5792
|
-
}
|
|
5793
5775
|
|
|
5794
5776
|
// client/panel-icon.ts
|
|
5795
5777
|
var TREND_LINE = "3 16.5 9 10.5 13 14.5 21 6.5";
|
|
@@ -5821,8 +5803,8 @@ var inject = ["slots", "locale"];
|
|
|
5821
5803
|
var NAV = [
|
|
5822
5804
|
{ id: "overview", label: "nav.overview", icon: "grid" },
|
|
5823
5805
|
{ id: "digest", label: "nav.digest", icon: "doc" },
|
|
5824
|
-
{ id: "runs", label: "nav.runs", icon: "list" },
|
|
5825
5806
|
{ id: "subscriptions", label: "nav.subscriptions", icon: "rss" },
|
|
5807
|
+
{ id: "runs", label: "nav.runs", icon: "list" },
|
|
5826
5808
|
{ id: "settings", label: "nav.settings", icon: "sliders" }
|
|
5827
5809
|
];
|
|
5828
5810
|
function navIcon(name, size = 16) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@morehao/dsh-github-trending",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.7",
|
|
4
4
|
"description": "GitHub 趋势日报的 DeepSeek Harness 插件:按日 / 周 / 月周期定时 spawn 本地 trendradar 核心,抓取 Trending、生成中文简介与周期总结,并可选把订阅仓库的新 Release 合成中文摘要,一起提交到你的仓库、自动开 PR 合并;内置概览 / 榜单 / 运行记录 / 订阅 / 设置工作台。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|