dsh-remote-plugin 0.7.1 → 0.7.3
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/apk/dsh-remote.apk +0 -0
- package/gateway.cjs +322 -19
- package/index.mjs +41 -9
- package/insights.mjs +73 -0
- package/package.json +3 -2
- package/plugin-center.mjs +118 -21
- package/public/admin.html +3 -0
- package/public/admin.js +1 -0
- package/public/app.js +403 -470
- package/public/desktop/desktop.css +101 -0
- package/public/desktop/desktop.html +63 -20
- package/public/desktop/desktop.js +324 -99
- package/public/history.js +160 -0
- package/public/index.html +73 -84
- package/public/insights.css +14 -0
- package/public/insights.js +228 -0
- package/public/link-check.js +109 -0
- package/public/plugin-center.css +100 -1
- package/public/plugin-center.js +222 -60
- package/public/plugin.js +7 -1
- package/public/styles.css +107 -95
- package/public/update.json +12 -12
- package/public/version.json +1 -1
package/public/styles.css
CHANGED
|
@@ -201,99 +201,6 @@ a.mini-btn { text-decoration: none; display: inline-flex; align-items: center; }
|
|
|
201
201
|
}
|
|
202
202
|
.workspace-path-block { display: grid; gap: 6px; margin-top: 2px; color: var(--dsr-muted); font-size: 12px; }
|
|
203
203
|
|
|
204
|
-
/* ---------- Token 统计(移动端) ---------- */
|
|
205
|
-
.stats-view { padding-bottom: 16px; }
|
|
206
|
-
.stats-page-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin: 4px 2px 17px; }
|
|
207
|
-
.stats-page-copy { min-width: 0; }
|
|
208
|
-
.stats-eyebrow, .stats-panel-kicker { color: var(--dsr-accent-strong); font-size: 10px; font-weight: 800; letter-spacing: .14em; line-height: 1.2; }
|
|
209
|
-
.stats-page-head h1 { margin: 4px 0 4px; font-size: 26px; line-height: 1.15; letter-spacing: -.04em; text-wrap: balance; }
|
|
210
|
-
.stats-page-subtitle { margin: 0; color: var(--dsr-muted); font-size: 12px; line-height: 1.5; }
|
|
211
|
-
.stats-date-wrap { display: grid; gap: 2px; flex: 0 0 auto; justify-items: end; padding: 7px 10px; background: var(--dsr-panel); border: 1px solid var(--dsr-line); border-radius: 12px; }
|
|
212
|
-
.stats-date-label { color: var(--dsr-muted); font-size: 10px; white-space: nowrap; }
|
|
213
|
-
.stats-date { color: var(--dsr-text); font-size: 12px; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
214
|
-
.stats-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 0 2px 12px; }
|
|
215
|
-
.stats-toolbar-label { color: var(--dsr-muted); font-size: 11px; font-weight: 650; }
|
|
216
|
-
.stats-mode-picker { display: inline-grid; grid-template-columns: 1fr 1fr; gap: 3px; padding: 3px; background: var(--dsr-panel); border: 1px solid var(--dsr-line); border-radius: 11px; }
|
|
217
|
-
.stats-mode-btn { min-height: 30px; padding: 5px 10px; border: 1px solid transparent; border-radius: 8px; color: var(--dsr-muted); font-size: 11px; font-weight: 650; white-space: nowrap; }
|
|
218
|
-
.stats-mode-btn.active { color: var(--dsr-text); background: var(--dsr-accent-soft); border-color: var(--dsr-accent-line); box-shadow: 0 2px 8px var(--dsr-shadow); }
|
|
219
|
-
.stats-mode-btn:active { background: var(--dsr-panel-2); }
|
|
220
|
-
.stats-mode-btn:focus-visible { position: relative; z-index: 1; }
|
|
221
|
-
.stats-cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
|
|
222
|
-
.scard { position: relative; min-width: 0; overflow: hidden; padding: 14px; background: var(--dsr-panel); border: 1px solid var(--dsr-line); border-radius: 18px; box-shadow: 0 8px 24px var(--dsr-shadow); }
|
|
223
|
-
.scard::before { content: ''; position: absolute; inset: 0 0 auto; height: 2px; background: var(--dsr-line); }
|
|
224
|
-
.scard-primary { grid-column: 1 / -1; background: linear-gradient(140deg, var(--dsr-panel), var(--dsr-accent-soft)); }
|
|
225
|
-
.scard-primary::before { background: linear-gradient(90deg, var(--dsr-accent), var(--dsr-accent-2)); }
|
|
226
|
-
.scard-cost::before { background: var(--dsr-accent-2); }
|
|
227
|
-
.scard-share::before { background: var(--dsr-info); }
|
|
228
|
-
.scard-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-width: 0; }
|
|
229
|
-
.scard-label { display: inline-flex; align-items: center; gap: 7px; min-width: 0; color: var(--dsr-muted); font-size: 11px; font-weight: 700; }
|
|
230
|
-
.scard-label > span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
231
|
-
.scard-icon { display: grid; place-items: center; width: 22px; height: 22px; flex: 0 0 auto; border-radius: 7px; color: var(--dsr-accent-strong); background: var(--dsr-accent-soft); font-size: 14px; font-weight: 800; }
|
|
232
|
-
.scard-icon.cost { color: var(--dsr-accent-2); background: var(--dsr-accent-2-soft); font-size: 12px; }
|
|
233
|
-
.scard-icon.share { color: var(--dsr-info); background: var(--dsr-info-soft); font-size: 12px; }
|
|
234
|
-
.scard-badge { max-width: 48%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--dsr-muted); font-size: 10px; font-variant-numeric: tabular-nums; }
|
|
235
|
-
.scard-value { margin-top: 11px; color: var(--dsr-text); font-size: 26px; font-weight: 800; line-height: 1.05; letter-spacing: -.035em; font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
236
|
-
.scard-primary .scard-value { font-size: clamp(32px, 9vw, 42px); }
|
|
237
|
-
.scard-unit { margin-left: 6px; color: var(--dsr-muted); font-size: 11px; font-weight: 600; letter-spacing: 0; }
|
|
238
|
-
.scard-helper { margin-top: 7px; color: var(--dsr-muted); font-size: 10px; line-height: 1.4; }
|
|
239
|
-
.bucket-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin-top: 14px; padding-top: 11px; border-top: 1px solid var(--dsr-line); }
|
|
240
|
-
.bucket-grid .b { display: grid; grid-template-columns: auto minmax(0, 1fr); grid-template-rows: auto auto; gap: 2px 5px; min-width: 0; }
|
|
241
|
-
.bucket-dot { width: 6px; height: 6px; margin-top: 3px; border-radius: 50%; background: var(--dsr-accent); }
|
|
242
|
-
.bucket-dot.input { background: var(--dsr-accent-strong); }
|
|
243
|
-
.bucket-dot.cache-read { background: var(--dsr-info); }
|
|
244
|
-
.bucket-dot.cache-write { background: var(--dsr-accent-2); }
|
|
245
|
-
.bucket-dot.output { background: var(--dsr-warning); }
|
|
246
|
-
.bucket-grid .n { min-width: 0; overflow: hidden; color: var(--dsr-muted); font-size: 10px; line-height: 1.2; text-overflow: ellipsis; white-space: nowrap; }
|
|
247
|
-
.bucket-grid .t { grid-column: 2; min-width: 0; overflow: hidden; color: var(--dsr-text); font-size: 12px; line-height: 1.2; font-weight: 700; font-variant-numeric: tabular-nums; text-overflow: ellipsis; white-space: nowrap; }
|
|
248
|
-
.stats-split { display: grid; grid-template-columns: 1fr 1fr; gap: 7px; margin-top: 14px; }
|
|
249
|
-
.stats-split-item { display: grid; gap: 5px; min-width: 0; padding: 8px; background: var(--dsr-bg-2); border: 1px solid var(--dsr-line); border-radius: 10px; }
|
|
250
|
-
.stats-split-item span { display: flex; align-items: center; gap: 5px; min-width: 0; color: var(--dsr-muted); font-size: 10px; white-space: nowrap; }
|
|
251
|
-
.stats-split-item strong { overflow: hidden; color: var(--dsr-text); font-size: 12px; font-variant-numeric: tabular-nums; text-overflow: ellipsis; white-space: nowrap; }
|
|
252
|
-
.split-dot { width: 6px; height: 6px; flex: 0 0 auto; border-radius: 50%; background: var(--dsr-accent-strong); }
|
|
253
|
-
.split-dot.off { background: var(--dsr-accent-2); }
|
|
254
|
-
.share-layout { display: flex; align-items: center; gap: 10px; margin-top: 13px; }
|
|
255
|
-
.share-ring { position: relative; display: grid; place-items: center; width: 68px; height: 68px; flex: 0 0 auto; border-radius: 50%; background: conic-gradient(var(--dsr-info) var(--share), var(--dsr-bg-2) 0); }
|
|
256
|
-
.share-ring::after { content: ''; position: absolute; inset: 6px; border-radius: 50%; background: var(--dsr-panel); }
|
|
257
|
-
.share-ring span { position: relative; z-index: 1; color: var(--dsr-text); font-size: 15px; font-weight: 800; font-variant-numeric: tabular-nums; }
|
|
258
|
-
.share-copy { display: grid; gap: 2px; min-width: 0; }
|
|
259
|
-
.share-copy strong { font-size: 13px; }
|
|
260
|
-
.share-copy span, .share-copy small { color: var(--dsr-muted); font-size: 10px; line-height: 1.35; }
|
|
261
|
-
.share-copy small { font-variant-numeric: tabular-nums; }
|
|
262
|
-
.stats-panel { margin-top: 14px; padding: 14px; background: var(--dsr-panel); border: 1px solid var(--dsr-line); border-radius: 18px; box-shadow: 0 8px 24px var(--dsr-shadow); }
|
|
263
|
-
.stats-panel-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; min-width: 0; margin-bottom: 12px; }
|
|
264
|
-
.stats-panel-title { margin: 3px 0 0; font-size: 16px; line-height: 1.2; letter-spacing: -.02em; }
|
|
265
|
-
.stats-legend { display: flex; justify-content: flex-end; flex-wrap: wrap; gap: 9px; min-width: 0; margin-top: 1px; color: var(--dsr-muted); font-size: 10px; }
|
|
266
|
-
.stats-legend .lg { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
|
|
267
|
-
.stats-legend .sw { width: 7px; height: 7px; border-radius: 50%; display: inline-block; }
|
|
268
|
-
.stats-legend .sw.peak { background: var(--dsr-accent-strong); }
|
|
269
|
-
.stats-legend .sw.off { background: var(--dsr-accent-2); }
|
|
270
|
-
.stats-legend .sw.token { background: var(--dsr-accent); }
|
|
271
|
-
.stats-chart { display: flex; align-items: flex-end; gap: 7px; height: 190px; padding: 21px 2px 20px; overflow-x: auto; overflow-y: hidden; background-image: linear-gradient(to top, var(--dsr-line) 1px, transparent 1px); background-size: 100% 25%; border-radius: 10px; }
|
|
272
|
-
.stats-bar { display: flex; flex: 1 0 30px; flex-direction: column; align-items: center; justify-content: flex-end; gap: 4px; height: 100%; min-width: 30px; }
|
|
273
|
-
.stats-bar .bars { display: flex; width: 100%; max-width: 40px; height: 100%; flex-direction: column; justify-content: flex-end; overflow: hidden; border-radius: 7px 7px 3px 3px; background: var(--dsr-accent-soft); box-shadow: 0 4px 12px var(--dsr-shadow); }
|
|
274
|
-
.stats-bar .seg { width: 100%; }
|
|
275
|
-
.stats-bar .seg.peak { background: var(--dsr-accent-strong); }
|
|
276
|
-
.stats-bar .seg.off { background: var(--dsr-accent-2); }
|
|
277
|
-
.stats-bar .bars.token { background: linear-gradient(180deg, var(--dsr-accent-strong), var(--dsr-accent)); }
|
|
278
|
-
.stats-bar .lbl { color: var(--dsr-muted); font-size: 9px; font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
279
|
-
.stats-bar .val { min-height: 12px; color: var(--dsr-text); font-size: 9px; font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
280
|
-
.stats-empty { display: grid; flex: 1; place-items: center; min-height: 145px; color: var(--dsr-muted); text-align: center; font-size: 12px; }
|
|
281
|
-
.stats-note { margin: 14px 2px 0; padding: 10px 12px; color: var(--dsr-muted); background: var(--dsr-info-soft); border-left: 3px solid var(--dsr-info); border-radius: 0 10px 10px 0; font-size: 11px; line-height: 1.6; }
|
|
282
|
-
|
|
283
|
-
@media (max-width: 380px) {
|
|
284
|
-
.stats-page-head { gap: 8px; }
|
|
285
|
-
.stats-page-head h1 { font-size: 23px; }
|
|
286
|
-
.stats-date-wrap { padding: 6px 8px; }
|
|
287
|
-
.stats-toolbar { align-items: flex-start; flex-direction: column; gap: 6px; }
|
|
288
|
-
.stats-mode-picker { width: 100%; }
|
|
289
|
-
.stats-mode-btn { width: 100%; }
|
|
290
|
-
.scard { padding: 12px; }
|
|
291
|
-
.bucket-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
292
|
-
.stats-panel { padding: 12px; }
|
|
293
|
-
.stats-panel-head { display: block; }
|
|
294
|
-
.stats-legend { justify-content: flex-start; margin-top: 8px; }
|
|
295
|
-
}
|
|
296
|
-
|
|
297
204
|
/* ---------- 会话列表 ---------- */
|
|
298
205
|
.session-list { display: flex; flex-direction: column; gap: 8px; }
|
|
299
206
|
.session-card {
|
|
@@ -380,7 +287,9 @@ html.reorder-scroll-lock body { overscroll-behavior: none; }
|
|
|
380
287
|
.archived-toggle { width: 100%; display: block; text-align: center; padding: 9px 0; margin-top: 2px; border-radius: 9px; background: var(--dsr-panel); border: 1px dashed var(--dsr-line); color: var(--dsr-muted); font-size: 12px; }
|
|
381
288
|
|
|
382
289
|
/* ---------- 会话详情 ---------- */
|
|
383
|
-
|
|
290
|
+
/* 会话页不显示底部导航,不保留导航的页面占位或输入栏偏移。
|
|
291
|
+
* 系统安全区仍由 .composer 的底部 padding 处理。 */
|
|
292
|
+
body.in-session { overflow: hidden; height: 100vh; height: 100dvh; padding-bottom: 0; }
|
|
384
293
|
body.in-session .topbar { display: none; }
|
|
385
294
|
body.in-session .main {
|
|
386
295
|
height: 100%;
|
|
@@ -390,6 +299,7 @@ body.in-session .main {
|
|
|
390
299
|
padding: 12px 12px 0;
|
|
391
300
|
}
|
|
392
301
|
body.in-session .bottom-nav { display: none; }
|
|
302
|
+
body.in-session .composer-wrap { bottom: 0; }
|
|
393
303
|
body.in-session .view {
|
|
394
304
|
flex: 1;
|
|
395
305
|
min-height: 0;
|
|
@@ -641,7 +551,7 @@ body.in-session.has-composer-images .history { padding-bottom: calc(146px + var(
|
|
|
641
551
|
.composer-fs-btn svg { width: 15px; height: 15px; }
|
|
642
552
|
.composer-input-wrap.has-fs-btn textarea { padding-right: 38px; }
|
|
643
553
|
.composer-fs-handle { display: none; }
|
|
644
|
-
.composer-wrap.fs { position: fixed; top: calc(54px + var(--dsr-safe-top)); left: 0; right: 0; bottom: 0; max-width: none; height: auto; z-index: 35; display: flex; flex-direction: column; background: var(--dsr-composer-bg); }
|
|
554
|
+
.composer-wrap.fs { position: fixed; top: var(--composer-top, calc(54px + var(--dsr-safe-top))); left: 0; right: 0; bottom: 0; max-width: none; height: auto; z-index: 35; display: flex; flex-direction: column; background: var(--dsr-composer-bg); }
|
|
645
555
|
.composer-wrap.fs .composer-menu { display: none; }
|
|
646
556
|
.composer-wrap.fs .composer-fs-handle { display: flex; align-items: center; justify-content: center; flex: none; height: 28px; touch-action: pan-y; }
|
|
647
557
|
.composer-fs-handle span { width: 38px; height: 4px; border-radius: 999px; background: var(--dsr-line); }
|
|
@@ -1325,3 +1235,105 @@ button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible
|
|
|
1325
1235
|
#btn-send, #btn-fs-send { touch-action: none; user-select: none; -webkit-touch-callout: none; }
|
|
1326
1236
|
#btn-send.steer-mode, #btn-fs-send.steer-mode { outline: 2px solid currentColor; outline-offset: 2px; }
|
|
1327
1237
|
.send-hold-ready { box-shadow: 0 0 0 3px var(--dsr-accent-strong); }
|
|
1238
|
+
|
|
1239
|
+
/* 关于页贡献者致谢:随页面提供名单,离线可见,按贡献提交数排序。 */
|
|
1240
|
+
.contributors-thanks { margin: 6px 0 12px; color: var(--dsr-muted); font-size: 12px; line-height: 1.6; }
|
|
1241
|
+
.contributors-list { display: flex; flex-wrap: wrap; gap: 8px; list-style: none; margin: 0 0 10px; padding: 0; }
|
|
1242
|
+
.contributors-list li { min-width: 0; max-width: 100%; }
|
|
1243
|
+
.contributors-list a { display: flex; align-items: center; min-height: 44px; box-sizing: border-box; padding: 8px 12px; border: 1px solid var(--dsr-line); border-radius: 10px; background: var(--dsr-bg-2); color: var(--dsr-text); font-size: 13px; overflow-wrap: anywhere; text-decoration: none; }
|
|
1244
|
+
.contributors-list a:hover { border-color: var(--dsr-accent-line); color: var(--dsr-accent-strong); }
|
|
1245
|
+
.contributors-all { display: inline-flex; align-items: center; min-height: 44px; color: var(--dsr-accent-strong); font-size: 12px; text-underline-offset: 3px; }
|
|
1246
|
+
.contributors-section a:focus-visible { outline: 2px solid var(--dsr-accent-strong); outline-offset: 3px; }
|
|
1247
|
+
|
|
1248
|
+
/* 会话操作统一入口;标题与工作区保持独立阅读空间。 */
|
|
1249
|
+
.session-actions-dialog,.session-info-dialog { width:min(420px,calc(100vw - 24px)); max-height:calc(100dvh - 48px); padding:16px; border:1px solid var(--dsr-line); border-radius:18px; background:var(--dsr-bg-2); color:var(--dsr-text); overflow:auto; box-shadow:0 16px 48px var(--dsr-shadow); }
|
|
1250
|
+
.session-actions-dialog::backdrop,.session-info-dialog::backdrop { background:var(--dsr-overlay); }
|
|
1251
|
+
.session-dialog-head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:12px; }
|
|
1252
|
+
.session-dialog-head button { min-width:44px; min-height:44px; color:var(--dsr-muted); font:inherit; font-size:24px; border:0; background:transparent; cursor:pointer; }
|
|
1253
|
+
.session-actions-dialog>button { display:block; width:100%; min-height:48px; padding:12px; margin:4px 0; border:0; border-radius:10px; background:var(--dsr-panel); color:var(--dsr-text); font:inherit; text-align:left; cursor:pointer; }
|
|
1254
|
+
.session-actions-dialog>button:hover { background:var(--dsr-accent-soft); }
|
|
1255
|
+
.session-actions-dialog>button svg { display:none; }
|
|
1256
|
+
.session-actions-dialog #btn-archive-session { color:var(--dsr-warning); border-top:1px solid var(--dsr-line); margin-top:12px; }
|
|
1257
|
+
.session-info-dialog dl { margin:0 0 16px; }
|
|
1258
|
+
.session-info-dialog dt { margin-top:14px; color:var(--dsr-muted); font-size:12px; }
|
|
1259
|
+
.session-info-dialog dd { margin:4px 0 0; white-space:pre-wrap; overflow-wrap:anywhere; line-height:1.6; }
|
|
1260
|
+
.session-info-dialog>button { min-height:44px; padding:8px 14px; border:1px solid var(--dsr-line); border-radius:10px; background:var(--dsr-panel); color:var(--dsr-text); font:inherit; cursor:pointer; }
|
|
1261
|
+
.session-actions-dialog button:focus-visible,.session-info-dialog button:focus-visible { outline:2px solid var(--dsr-accent); outline-offset:2px; }
|
|
1262
|
+
|
|
1263
|
+
body.in-session .session-head { gap:10px; margin-bottom:0; }
|
|
1264
|
+
.session-head .icon-btn { width:44px; height:44px; flex:none; }
|
|
1265
|
+
.session-title { display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; width:100%; padding:0; text-align:left; white-space:normal; overflow-wrap:anywhere; line-height:1.4; }
|
|
1266
|
+
#session-sub { display:block; flex:none; min-height:36px; width:100%; padding:7px 2px; margin:0; text-align:left; }
|
|
1267
|
+
.composer-status { padding:4px 12px 0; min-height:36px; }
|
|
1268
|
+
.composer-status #btn-cancel { margin-left:auto; min-height:36px; font-size:12px; padding:5px 10px; }
|
|
1269
|
+
body.in-session .history { padding-bottom:calc(var(--composer-height, calc(96px + var(--dsr-safe-b))) + 12px); }
|
|
1270
|
+
body.in-session.has-composer-images .history { padding-bottom:calc(var(--composer-height, calc(166px + var(--dsr-safe-b))) + 12px); }
|
|
1271
|
+
|
|
1272
|
+
.session-info-dialog>button:disabled { opacity:.45; cursor:default; }
|
|
1273
|
+
|
|
1274
|
+
/* 有界历史视图:保留消息节点,窗口外记录不参与布局。 */
|
|
1275
|
+
.history-entry { flex:0 0 auto; min-width:0; overflow-anchor:none; display:flow-root; }
|
|
1276
|
+
.history-page-control { flex:none; align-self:center; min-height:44px; padding:8px 14px; border:1px solid var(--dsr-line); border-radius:10px; background:var(--dsr-panel); color:var(--dsr-muted); font:inherit; cursor:pointer; }
|
|
1277
|
+
.history-page-control[hidden],.history-live:empty { display:none; }
|
|
1278
|
+
.history-empty { padding:24px 8px; text-align:center; color:var(--dsr-muted); }
|
|
1279
|
+
.history-source { color:var(--dsr-muted); font-size:11px; font-weight:400; letter-spacing:0; }
|
|
1280
|
+
.history-meta { display:flex; align-items:center; gap:8px; min-width:0; flex-wrap:wrap; justify-content:flex-end; }
|
|
1281
|
+
.history-latest { position:absolute; right:22px; bottom:20px; z-index:8; min-height:44px; padding:8px 12px; border:1px solid var(--dsr-accent-line); border-radius:999px; color:var(--dsr-accent-strong); background:var(--dsr-bg-2); box-shadow:0 4px 16px var(--dsr-shadow); font:inherit; cursor:pointer; }
|
|
1282
|
+
|
|
1283
|
+
#history { overflow-anchor:none; }
|
|
1284
|
+
#history-wrap>.history-latest { bottom:calc(var(--composer-height, 96px) + 16px); }
|
|
1285
|
+
.session-title { min-height:44px; }
|
|
1286
|
+
|
|
1287
|
+
.crash-preview {margin:10px 0;font-size:13px;}
|
|
1288
|
+
.crash-preview summary {cursor:pointer;min-height:44px;display:flex;align-items:center;}
|
|
1289
|
+
.crash-preview pre {max-height:200px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px;padding:10px;background:var(--dsr-panel);border-radius:8px;}
|
|
1290
|
+
/* Keep feedback actions visible while reading expanded crash summaries. */
|
|
1291
|
+
#modal-feedback .modal-card { display:flex; flex-direction:column; max-height:calc(100dvh - 48px - var(--dsr-safe-t) - var(--dsr-safe-b)); overflow:hidden; }
|
|
1292
|
+
#modal-feedback .modal-title,#modal-feedback .modal-actions { flex-shrink:0; }
|
|
1293
|
+
#modal-feedback .modal-body { min-height:0; overflow-y:auto; overscroll-behavior:contain; }
|
|
1294
|
+
#modal-feedback .modal-actions .btn { min-height:44px; }
|
|
1295
|
+
|
|
1296
|
+
/* Link instrument: persistent geometry, compositor sweep and interruptible state transitions. */
|
|
1297
|
+
.overview-pulse-card { --pulse-ease:cubic-bezier(0.23,1,0.32,1); transition:border-color 240ms ease; }
|
|
1298
|
+
.overview-pulse-copy,.overview-link { position:relative; }
|
|
1299
|
+
.overview-status { line-height:1.25; min-block-size:1.25em; }
|
|
1300
|
+
html[lang="en"] .overview-status { min-block-size:2.5em; }
|
|
1301
|
+
.overview-status-desc { line-height:1.4; min-block-size:2.8em; }
|
|
1302
|
+
.overview-pulse-card.status-checking { border-color:var(--dsr-accent-line); }
|
|
1303
|
+
.overview-pulse-card.status-checking .overview-primary-action { border-color:var(--dsr-accent-strong); background:var(--dsr-accent-strong); color:var(--dsr-on-accent); }
|
|
1304
|
+
.overview-primary-action { transition:transform 160ms var(--pulse-ease),background-color 240ms ease,border-color 240ms ease,color 240ms ease; }
|
|
1305
|
+
.system-pulse-ring { width:108px; height:108px; padding:0; background:none; box-shadow:none; isolation:isolate; flex:none; }
|
|
1306
|
+
.system-pulse-ring::before { inset:0; border:0; opacity:.7; background:repeating-conic-gradient(var(--dsr-accent-line) 0deg 1deg,transparent 1deg 15deg); -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 2px),#000 calc(100% - 1px)); mask:radial-gradient(farthest-side,transparent calc(100% - 2px),#000 calc(100% - 1px)); }
|
|
1307
|
+
.system-pulse-ring::after { content:""; position:absolute; inset:12%; border-radius:50%; box-shadow:0 0 24px var(--dsr-accent-line); opacity:.12; transform:scale(.96); transition:opacity 240ms var(--pulse-ease),transform 240ms var(--pulse-ease); pointer-events:none; }
|
|
1308
|
+
.overview-pulse-card.status-checking .system-pulse-ring::after { opacity:.55; transform:scale(1); }
|
|
1309
|
+
.system-pulse-ring .pulse-dial { position:absolute; inset:0; width:100%; height:100%; overflow:visible; fill:none; stroke:var(--dsr-accent); stroke-width:2; stroke-linecap:round; }
|
|
1310
|
+
.system-pulse-ring .pulse-dial path { opacity:.15; transition:opacity 240ms var(--pulse-ease),stroke 240ms ease; }
|
|
1311
|
+
.system-pulse-ring .pulse-dial [data-confirmed="true"] { opacity:1; }
|
|
1312
|
+
.overview-pulse-card.status-nominal .system-pulse-ring .pulse-dial [data-confirmed="true"] { stroke:var(--dsr-success); }
|
|
1313
|
+
.system-pulse-ring .pulse-sweep { position:absolute; inset:3%; border-radius:50%; background:conic-gradient(from 0deg,transparent 0deg 278deg,var(--dsr-accent-soft) 306deg,var(--dsr-accent) 350deg,var(--dsr-accent-strong) 358deg,transparent 360deg); -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2px)); mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2px)); opacity:0; animation:overview-scan 3s linear infinite; animation-play-state:paused; transition:opacity 240ms var(--pulse-ease); pointer-events:none; }
|
|
1314
|
+
.overview-pulse-card[data-pulse-running="true"] .pulse-sweep { animation-play-state:running; }
|
|
1315
|
+
.overview-pulse-card.status-checking .pulse-sweep { opacity:1; }
|
|
1316
|
+
.system-pulse-ring .pulse-reticle { position:absolute; inset:22%; border:1px solid var(--dsr-accent-line); border-radius:50%; opacity:.6; pointer-events:none; transition:border-color 240ms ease; }
|
|
1317
|
+
.system-pulse-ring .pulse-reticle::before,.system-pulse-ring .pulse-reticle::after { content:""; position:absolute; width:1px; height:5px; left:50%; background:var(--dsr-accent); opacity:.65; }
|
|
1318
|
+
.system-pulse-ring .pulse-reticle::before { top:-3px; }
|
|
1319
|
+
.system-pulse-ring .pulse-reticle::after { bottom:-3px; }
|
|
1320
|
+
.system-pulse-core { position:absolute; inset:24%; width:auto; height:auto; background:var(--dsr-bg-2); z-index:1; }
|
|
1321
|
+
.system-pulse-core strong { font-size:12px; letter-spacing:.6px; transition:color 240ms ease; }
|
|
1322
|
+
.system-pulse-core span { font-family:ui-monospace,SFMono-Regular,Consolas,monospace; font-variant-numeric:tabular-nums; font-size:9px; letter-spacing:.5px; }
|
|
1323
|
+
.overview-pulse-card.status-nominal .system-pulse-core strong { color:var(--dsr-success); }
|
|
1324
|
+
.overview-link i { transition:background-color 240ms ease,box-shadow 240ms ease; }
|
|
1325
|
+
.overview-link.pending i { background:var(--dsr-accent); animation:overview-detect 2.5s ease-in-out infinite; }
|
|
1326
|
+
.overview-link:nth-child(2) i { animation-delay:-.15s; }
|
|
1327
|
+
.overview-link:nth-child(3) i { animation-delay:-.3s; }
|
|
1328
|
+
.overview-link:nth-child(4) i { animation-delay:-.45s; }
|
|
1329
|
+
.overview-link.pending b { color:var(--dsr-muted); }
|
|
1330
|
+
.overview-refresh:disabled { cursor:progress; opacity:.6; }
|
|
1331
|
+
.pulse-text-echo { position:absolute!important; pointer-events:none; user-select:none; z-index:2; }
|
|
1332
|
+
@keyframes overview-scan { to { transform:rotate(360deg); } }
|
|
1333
|
+
@keyframes overview-detect { 50% { opacity:.4; } }
|
|
1334
|
+
@media(prefers-reduced-motion:reduce) {
|
|
1335
|
+
.overview-pulse-card,.overview-pulse-card .pulse-dial path,.overview-pulse-card .pulse-reticle,.overview-pulse-card .pulse-sweep,.overview-pulse-card .system-pulse-ring::after,.overview-pulse-card .overview-link i,.overview-pulse-card .system-pulse-core strong,.overview-pulse-card .overview-primary-action { transition:none; }
|
|
1336
|
+
.overview-pulse-card .pulse-sweep,.overview-pulse-card .overview-link.pending i { animation:none; }
|
|
1337
|
+
.overview-pulse-card.status-checking .pulse-sweep { opacity:.4; }
|
|
1338
|
+
.overview-pulse-card .pulse-text-echo { display:none; }
|
|
1339
|
+
}
|
package/public/update.json
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.7.
|
|
2
|
+
"version": "0.7.3",
|
|
3
3
|
"apkUrl": "dsh-remote.apk",
|
|
4
|
-
"sha256": "
|
|
5
|
-
"releasedAt": "2026-10-
|
|
6
|
-
"notes": "
|
|
4
|
+
"sha256": "e2f186e022797c0c94110728cdc9ad5abc828c9989ee66ca66b49396a2c8e79f",
|
|
5
|
+
"releasedAt": "2026-10-10T05:27:42.179Z",
|
|
6
|
+
"notes": "修复手机对话页输入栏下方空白,标题与工作区独立显示,操作集中到更多菜单。主页系统链路自动检测和重试,新增分段仪表、拖尾扫描与平滑状态切换。对话历史先显示本地缓存,再后台核对云端内容;一致时保留消息与阅读位置,修复持续上翻导致的卡顿,隐藏无意义的标题事件。插件详情原地展开,清理重复入口,完善 DSH Desktop 插件管理。新增 Windows Desktop 远程启动与重启(实验性),以及网关、受控 DSH 与 Desktop 的限次崩溃恢复;本机轮转记录诊断日志,用户可预览并自行选择通过现有反馈通道上传摘要。加强敏感目录访问、设备权限、配对与系统备份保护,新增离线贡献者致谢,更新现有 Capacitor 至 8.5.3。Android 已完成构建与浏览器验收,尚未手机真机验收;本次不提供 HarmonyOS HAP,新增 WebUI 功能尚未同步鸿蒙。",
|
|
7
7
|
"history": [
|
|
8
|
+
{
|
|
9
|
+
"version": "0.7.3",
|
|
10
|
+
"notes": "修复手机对话页输入栏下方空白,标题与工作区独立显示,操作集中到更多菜单。主页系统链路自动检测和重试,新增分段仪表、拖尾扫描与平滑状态切换。对话历史先显示本地缓存,再后台核对云端内容;一致时保留消息与阅读位置,修复持续上翻导致的卡顿,隐藏无意义的标题事件。插件详情原地展开,清理重复入口,完善 DSH Desktop 插件管理。新增 Windows Desktop 远程启动与重启(实验性),以及网关、受控 DSH 与 Desktop 的限次崩溃恢复;本机轮转记录诊断日志,用户可预览并自行选择通过现有反馈通道上传摘要。加强敏感目录访问、设备权限、配对与系统备份保护,新增离线贡献者致谢,更新现有 Capacitor 至 8.5.3。Android 已完成构建与浏览器验收,尚未手机真机验收;本次不提供 HarmonyOS HAP,新增 WebUI 功能尚未同步鸿蒙。"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"version": "0.7.2",
|
|
14
|
+
"notes": "补齐 DSH Desktop 的插件管理接入,使用桌面版自带管理入口,支持安装、更新、卸载及配置启停,修复后台任务启动和 pnpm 11 卸载参数兼容。新增手机与桌面的上下文、费用和额度面板,适配 dsh-context 与 dsh-cost-meter;需要主机安装并启用对应插件。修复设备密钥访问插件管理接口的越权、切换连接竞态、插件任务残留锁和 Desktop 打开控制台无响应。提供 Android 本地测试安装包(未做手机真机安装验证);鸿蒙本批未同步上下文与费用面板。"
|
|
15
|
+
},
|
|
8
16
|
{
|
|
9
17
|
"version": "0.7.1",
|
|
10
18
|
"notes": "适配 DSH 0.2.0-rc.2 的 Inbox 队列、后台任务流与子代理目录,修复子代理接口 404 和归档后刷新状态滞后,保留旧版实时通道兼容;修复 Desktop 插件面板被标题栏遮挡、收起后阴影残留及更新说明响应校验。合入鸿蒙插件中心、长按发送和主题改进,并修复切换连接时的旧确认卡、误发送及迟到回执问题;鸿蒙本次仅更新源码,暂不提供安装包。"
|
|
@@ -36,14 +44,6 @@
|
|
|
36
44
|
{
|
|
37
45
|
"version": "0.6.21",
|
|
38
46
|
"notes": "0.6.21:左上角 DSH Remote 名称可展开服务器组快捷切换抽屉,当前组、组内服务器数量和管理入口一目了然,手机与桌面端均可一键切换;修复部分新版 DSH 命令执行成功返回 void 时被误判为未执行、继而把 /命令作为普通文本发送的问题,同时兼容旧版三参数、新版四参数及默认参数签名。"
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"version": "0.6.20",
|
|
42
|
-
"notes": "0.6.20:适配 DSH 0.1.2-alpha.1 的新版客户端模块、认证、斜杠 RPC 与 remote.mux 实时协议,同时保留旧版 DSH 的自动回退;修复斜杠命令因 commands.execute 参数变化触发 aborted 报错,以及新版历史、工作区、模型、目标和子代理等接口不兼容问题;审批与用户提问现在会在所属对话内完整显示并可直接处理,主页仍保留全局待办入口,长工具参数、原因和调用标识不再被截断。"
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"version": "0.6.19",
|
|
46
|
-
"notes": "0.6.19:全面优化手机端、桌面端、管理页和插件页的布局、动效与响应式体验,并支持减少动态效果偏好;重做蓝色、草原、音乐厅等主题的明暗层级和文字图标对比度,新增利落的黑白配色;统一主页图标配色并修正设置齿轮中心孔偏移;目标面板支持收起为始终可见的侧边入口,保留运行状态、可随时恢复,并按会话与目标在本地记忆。"
|
|
47
47
|
}
|
|
48
48
|
]
|
|
49
49
|
}
|
package/public/version.json
CHANGED