dsh-remote-plugin 0.6.11 → 0.6.13
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/README.en.md +3 -2
- package/README.md +3 -2
- package/apk/dsh-remote.apk +0 -0
- package/gateway.cjs +760 -82
- package/index.mjs +32 -6
- package/package.json +1 -1
- package/public/admin.html +157 -8
- package/public/admin.js +264 -5
- package/public/announcements.json +35 -0
- package/public/app.js +475 -55
- package/public/desktop/desktop.css +5 -0
- package/public/desktop/desktop.html +4 -2
- package/public/desktop/desktop.js +103 -14
- package/public/index.html +79 -16
- package/public/styles.css +64 -2
- package/public/update.json +13 -13
- package/public/version.json +1 -1
package/public/styles.css
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
|
|
4
4
|
@import 'theme-vars.css';
|
|
5
5
|
|
|
6
|
+
/* 思考流与兼容档位提示 */
|
|
7
|
+
.effort-hint { flex-basis: 100%; color: var(--dsr-muted); font-size: 11px; line-height: 1.45; }
|
|
8
|
+
.msg.reasoning-live { border-color: var(--dsr-accent-line); box-shadow: 0 0 0 1px var(--dsr-accent-soft) inset; }
|
|
9
|
+
.msg.reasoning-live summary::after { content: ''; display: inline-block; width: 6px; height: 6px; margin-left: 7px; border-radius: 50%; background: var(--dsr-accent); animation: reasoning-pulse 1.2s ease-in-out infinite; }
|
|
10
|
+
@keyframes reasoning-pulse { 0%, 100% { opacity: .35; transform: scale(.8); } 50% { opacity: 1; transform: scale(1); } }
|
|
11
|
+
|
|
6
12
|
|
|
7
13
|
/* ============ 基础 ============ */
|
|
8
14
|
* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
|
|
@@ -149,10 +155,16 @@ a.mini-btn { text-decoration: none; display: inline-flex; align-items: center; }
|
|
|
149
155
|
.workspace-select.full { margin: 7px 0 10px; }
|
|
150
156
|
.workspace-path-scroll {
|
|
151
157
|
display: block; min-width: 0; overflow-x: auto; overflow-y: hidden; white-space: nowrap;
|
|
152
|
-
scrollbar-width: thin;
|
|
158
|
+
scrollbar-width: thin; touch-action: pan-x; overscroll-behavior-inline: contain;
|
|
159
|
+
color: var(--dsr-text); background: var(--dsr-bg-2); border: 1px solid var(--dsr-line); border-radius: 9px;
|
|
153
160
|
padding: 7px 9px; font-size: 11.5px; user-select: text;
|
|
154
161
|
}
|
|
155
162
|
.workspace-nav > .workspace-path-scroll { grid-column: 1 / -1; }
|
|
163
|
+
.workspace-name-block { display: grid; gap: 6px; margin: 2px 0 10px; color: var(--dsr-muted); font-size: 12px; }
|
|
164
|
+
.workspace-name-block strong {
|
|
165
|
+
min-width: 0; padding: 8px 10px; color: var(--dsr-text); background: var(--dsr-panel); border: 1px solid var(--dsr-line);
|
|
166
|
+
border-radius: 9px; font-size: 14px; line-height: 1.45; overflow-wrap: anywhere; user-select: text;
|
|
167
|
+
}
|
|
156
168
|
.workspace-path-block { display: grid; gap: 6px; margin-top: 2px; color: var(--dsr-muted); font-size: 12px; }
|
|
157
169
|
|
|
158
170
|
/* ---------- Token 统计(移动端) ---------- */
|
|
@@ -519,9 +531,25 @@ body.in-session .main { padding-bottom: 0; }
|
|
|
519
531
|
.overview-eyebrow { color:var(--dsr-accent-strong); font-size:10px; font-weight:800; letter-spacing:1.7px; line-height:1.3; }
|
|
520
532
|
.overview-title { margin:3px 0 2px; font-size:25px; line-height:1.18; letter-spacing:-.4px; }
|
|
521
533
|
.overview-subtitle { margin:0; color:var(--dsr-muted); font-size:12px; }
|
|
522
|
-
.overview-refresh { width:34px; height:34px; padding:0; border-radius:11px; font-size:18px; line-height:1; }
|
|
534
|
+
.overview-refresh { width:34px; height:34px; padding:0; display:grid; place-items:center; border-radius:11px; font-size:18px; line-height:1; }
|
|
523
535
|
.overview-refresh { color: var(--dsr-accent-strong); }
|
|
524
536
|
.overview-refresh svg { width:17px; height:17px; display:block; }
|
|
537
|
+
.overview-board { margin-bottom:14px; padding:14px; border:1px solid var(--dsr-accent-line); border-radius:16px; background:linear-gradient(145deg,var(--dsr-accent-soft),var(--dsr-panel) 55%,var(--dsr-bg-2)); box-shadow:0 8px 22px var(--dsr-shadow); }
|
|
538
|
+
.overview-board-head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:11px; }
|
|
539
|
+
.overview-board-head h2 { margin:3px 0 0; color:var(--dsr-text); font-size:18px; line-height:1.25; letter-spacing:-.2px; }
|
|
540
|
+
.overview-announcement-list { display:grid; gap:8px; }
|
|
541
|
+
.overview-announcement-card { width:100%; min-width:0; display:block; padding:12px; border:1px solid var(--dsr-line); border-radius:13px; background:var(--dsr-bg-2); color:var(--dsr-text); text-align:left; cursor:pointer; }
|
|
542
|
+
.overview-announcement-card.poll { border-color:var(--dsr-accent-line); }
|
|
543
|
+
.overview-announcement-card:active { background:var(--dsr-panel-2); }
|
|
544
|
+
.overview-announcement-meta { display:flex; align-items:center; gap:7px; min-width:0; margin-bottom:7px; color:var(--dsr-muted); font-size:10.5px; }
|
|
545
|
+
.overview-announcement-badge { flex:0 0 auto; padding:2px 7px; border-radius:999px; background:var(--dsr-panel); border:1px solid var(--dsr-line); color:var(--dsr-muted); font-size:10px; font-weight:750; }
|
|
546
|
+
.overview-announcement-card.poll .overview-announcement-badge { background:var(--dsr-accent-soft); border-color:var(--dsr-accent-line); color:var(--dsr-accent-strong); }
|
|
547
|
+
.overview-announcement-new { flex:0 0 auto; padding:1px 6px; border-radius:999px; background:var(--dsr-error-soft); color:var(--dsr-error); font-size:9.5px; font-weight:800; }
|
|
548
|
+
.overview-announcement-date { min-width:0; margin-left:auto; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
|
|
549
|
+
.overview-announcement-title { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:13.5px; font-weight:750; }
|
|
550
|
+
.overview-announcement-copy { display:-webkit-box; margin-top:4px; overflow:hidden; -webkit-box-orient:vertical; -webkit-line-clamp:2; color:var(--dsr-muted); font-size:11.5px; line-height:1.55; }
|
|
551
|
+
.overview-announcement-footer { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-top:10px; padding-top:8px; border-top:1px solid var(--dsr-line); color:var(--dsr-accent-strong); font-size:11px; font-weight:700; }
|
|
552
|
+
.overview-announcement-footer span:last-child { flex:0 0 auto; font-size:16px; font-weight:500; }
|
|
525
553
|
.overview-pulse-card { position:relative; overflow:hidden; display:grid; grid-template-columns:minmax(0,1fr) auto; gap:8px 12px; align-items:center; padding:14px; margin-bottom:14px; border:1px solid var(--dsr-accent-line); border-radius:16px; background:linear-gradient(135deg,var(--dsr-panel),var(--dsr-bg-2)); box-shadow:0 10px 26px var(--dsr-shadow); }
|
|
526
554
|
.overview-pulse-card::after { content:""; position:absolute; width:110px; height:110px; right:-45px; top:-55px; border-radius:50%; background:var(--dsr-accent-soft); filter:blur(3px); pointer-events:none; }
|
|
527
555
|
.overview-pulse-copy { min-width:0; align-self:start; }
|
|
@@ -660,6 +688,13 @@ button.overview-attention-item, button.overview-session-item { cursor:pointer; }
|
|
|
660
688
|
.setting-desc.expanded { white-space: normal; overflow: visible; text-overflow: clip; word-break: break-word; }
|
|
661
689
|
.setting-select { min-width: 112px; max-width: 145px; padding: 7px 9px; border-radius: 10px; border: 1px solid var(--dsr-line); background: var(--dsr-bg-2); color: var(--dsr-text); font: inherit; font-size: 12px; }
|
|
662
690
|
.setting-actions { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
|
|
691
|
+
.dsh-control-steps { display:flex; flex-direction:column; gap:5px; margin-top:8px; padding:8px 9px; border:1px solid var(--dsr-line); border-radius:10px; background:var(--dsr-bg-2); }
|
|
692
|
+
.dsh-control-step { display:grid; grid-template-columns:16px minmax(0,1fr); gap:6px; align-items:start; color:var(--dsr-muted); font-size:11px; line-height:1.45; }
|
|
693
|
+
.dsh-control-step.current { color:var(--dsr-accent-strong); }
|
|
694
|
+
.dsh-control-step.success { color:var(--dsr-success); }
|
|
695
|
+
.dsh-control-step.failed { color:var(--dsr-error); }
|
|
696
|
+
.dsh-control-step-mark { text-align:center; font-weight:800; }
|
|
697
|
+
.dsh-control-step-detail { grid-column:2; color:var(--dsr-muted); white-space:pre-wrap; overflow-wrap:anywhere; }
|
|
663
698
|
.about { text-align: center; color: var(--dsr-muted); font-size: 12px; margin-top: 16px; line-height: 1.8; }
|
|
664
699
|
|
|
665
700
|
/* 多服务器列表(分组) */
|
|
@@ -860,6 +895,33 @@ button.overview-attention-item, button.overview-session-item { cursor:pointer; }
|
|
|
860
895
|
}
|
|
861
896
|
.fb-textarea:focus, .fb-input:focus { border-color: var(--dsr-accent-line); }
|
|
862
897
|
.fb-input { min-height: 42px; }
|
|
898
|
+
.feedback-success-card { max-width: 360px; text-align: center; padding: 22px 20px 18px; }
|
|
899
|
+
.feedback-success-icon {
|
|
900
|
+
width: 52px; height: 52px; display: grid; place-items: center; margin: 0 auto 13px; border-radius: 50%;
|
|
901
|
+
color: var(--dsr-success); background: var(--dsr-success-soft); border: 1px solid var(--dsr-success-line);
|
|
902
|
+
}
|
|
903
|
+
.feedback-success-icon svg { width: 28px; height: 28px; }
|
|
904
|
+
.feedback-success-title { margin-bottom: 8px; font-size: 18px; }
|
|
905
|
+
.feedback-success-body { color: var(--dsr-muted); line-height: 1.65; }
|
|
906
|
+
.feedback-success-card .modal-actions { justify-content: stretch; }
|
|
907
|
+
.feedback-success-card .modal-actions .btn { flex: 1; min-height: 42px; }
|
|
908
|
+
|
|
909
|
+
.app-version-warning-card { max-width: 390px; text-align: center; padding: 22px 20px 18px; border-top: 3px solid var(--dsr-accent); }
|
|
910
|
+
.app-version-warning-icon {
|
|
911
|
+
width: 50px; height: 50px; display: grid; place-items: center; margin: 0 auto 12px; border-radius: 15px;
|
|
912
|
+
color: var(--dsr-accent-strong); background: var(--dsr-accent-soft); border: 1px solid var(--dsr-accent-line);
|
|
913
|
+
font-size: 28px; font-weight: 800; line-height: 1;
|
|
914
|
+
}
|
|
915
|
+
.app-version-warning-title { margin-bottom: 7px; font-size: 18px; }
|
|
916
|
+
.app-version-warning-body, .app-version-warning-hint { color: var(--dsr-muted); line-height: 1.6; }
|
|
917
|
+
.app-version-comparison { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 10px; margin: 16px 0 12px; }
|
|
918
|
+
.app-version-comparison > div { display: grid; gap: 5px; min-width: 0; padding: 11px 8px; border: 1px solid var(--dsr-line); border-radius: 12px; background: var(--dsr-panel); }
|
|
919
|
+
.app-version-comparison span { color: var(--dsr-muted); font-size: 11px; }
|
|
920
|
+
.app-version-comparison strong { overflow-wrap: anywhere; color: var(--dsr-text); font-size: 14px; }
|
|
921
|
+
.app-version-comparison > i { color: var(--dsr-accent-strong); font-style: normal; font-weight: 800; }
|
|
922
|
+
.app-version-warning-hint { font-size: 12px; }
|
|
923
|
+
.app-version-warning-card .modal-actions { justify-content: stretch; }
|
|
924
|
+
.app-version-warning-card .modal-actions .btn { flex: 1; min-height: 42px; }
|
|
863
925
|
|
|
864
926
|
/* ---------- 模态 ---------- */
|
|
865
927
|
.modal {
|
package/public/update.json
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.6.
|
|
2
|
+
"version": "0.6.13",
|
|
3
3
|
"apkUrl": "dsh-remote.apk",
|
|
4
|
-
"sha256": "
|
|
5
|
-
"releasedAt": "2026-08-
|
|
6
|
-
"notes": "0.6.
|
|
4
|
+
"sha256": "6cee7bfb1425fb26bcfbcd5c5f932b8ff26ca9d5026ac199b5393a00d0c343b1",
|
|
5
|
+
"releasedAt": "2026-08-24T05:49:23.534Z",
|
|
6
|
+
"notes": "0.6.13 正式版:新增首次连接 Doctor,集中检查 DSH 服务、远程网关、局域网地址、防火墙、终端配对和实时消息通道;网关控制台新增可选的独立设备密钥,支持设备备注、最近 IP、二维码、令牌轮换、复制和退出,共享令牌在启用后仅保留管理权限;手机端和桌面端支持实时思考内容,并为未声明推理档位的模型提供 low、high、max 三档选择;普通会话列表、工作区树和主页统计不再混入子代理内部会话;Android App 落后于网关版本时显示明确更新提醒;新增网关协议与能力协商并兼容旧网关,同时补充设备隔离、重启持久化、推理显示、会话过滤和版本差异回归测试。",
|
|
7
7
|
"history": [
|
|
8
|
+
{
|
|
9
|
+
"version": "0.6.13",
|
|
10
|
+
"notes": "0.6.13 正式版:新增首次连接 Doctor,集中检查 DSH 服务、远程网关、局域网地址、防火墙、终端配对和实时消息通道;网关控制台新增可选的独立设备密钥,支持设备备注、最近 IP、二维码、令牌轮换、复制和退出,共享令牌在启用后仅保留管理权限;手机端和桌面端支持实时思考内容,并为未声明推理档位的模型提供 low、high、max 三档选择;普通会话列表、工作区树和主页统计不再混入子代理内部会话;Android App 落后于网关版本时显示明确更新提醒;新增网关协议与能力协商并兼容旧网关,同时补充设备隔离、重启持久化、推理显示、会话过滤和版本差异回归测试。"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"version": "0.6.12",
|
|
14
|
+
"notes": "0.6.12:修复远程启动和重启 DSH 时统一报 HTTP 502 且无法确认结果的问题;改为异步追踪 systemd 服务检查、命令提交、进程启动、DSH HTTP 恢复和 mux/host 实时通道重连阶段,成功时显示 PID、HTTP 状态和用时,失败时区分服务不存在、systemd 不可用、权限不足、命令失败、服务失败、启动超时、HTTP 恢复超时和实时通道恢复超时;优化工作区会话筛选、文件预览和应用内选择器;新增中央投票公告与反馈成功确认;主页公告栏常驻并在无未读公告时显示空状态,同时修正设置页异常右箭头、主页刷新图标居中和周末谷时提醒。"
|
|
15
|
+
},
|
|
8
16
|
{
|
|
9
17
|
"version": "0.6.11",
|
|
10
|
-
"notes": "0.6.11 正式版:新增按 DSH 工作区筛选、切换和创建会话,文件页支持切换工作区并直接预览常见文本与 Markdown
|
|
18
|
+
"notes": "0.6.11 正式版:新增按 DSH 工作区筛选、切换和创建会话,文件页支持切换工作区并直接预览常见文本与 Markdown;修复工作区筛选未正确收敛会话、工作区位于默认文件根外时无法查看,以及新会话工作区名称与完整路径显示异常;新增投票公告及隐私化汇总;统一手机端应用内选择抽屉;周末全天按谷时并修复重复峰谷提醒;插件侧栏图标采用亮色背景并随插件自身四套皮肤切换配色;加强网关安装、连接与故障排查引导。"
|
|
11
19
|
},
|
|
12
20
|
{
|
|
13
21
|
"version": "0.6.10",
|
|
@@ -36,14 +44,6 @@
|
|
|
36
44
|
{
|
|
37
45
|
"version": "0.6.4",
|
|
38
46
|
"notes": "扫码配对改为显式双按钮(拍照/相册),修复小米等 ROM 选择器错乱;会话历史加载超时放宽至 45 秒,失败可重试;网关端口自定义(插件管理页可改,环境变量仍优先)+ 启动前端口占用检测;峰谷计费提醒改前台服务驱动,后台按时必达;消息 Markdown 渲染(标题/代码块/列表/链接);修复 DSH 重启后网关上游端口不刷新(Issue #1);新增测试通知按钮。"
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"version": "0.6.3",
|
|
42
|
-
"notes": "修复 DSH 重启后网关 upstream 端口不刷新(Issue #1):/health 增加 upstream/upstreamOk/pid 探测;插件 ensureGateway 检测上游变化或不可达时自动杀旧网关并按新 DSH_UPSTREAM 重启;启动/刷新写插件日志与 PID 文件。"
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"version": "0.6.2",
|
|
46
|
-
"notes": "桌面端 WebUI:设置页清理与输入区饱满化;新增会话功能(goal/todo/subagent/模型切换/思考深度);预设提示词管理与空状态引导;更新弹窗改为按正式版逐版展示历史(App/桌面端);移除通知分组;聊天宽度约 680px、输入框按钮对齐。"
|
|
47
47
|
}
|
|
48
48
|
]
|
|
49
49
|
}
|
package/public/version.json
CHANGED