dsh-remote-plugin 0.6.13 → 0.6.15
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 +261 -27
- package/package.json +1 -1
- package/public/announcements.json +25 -0
- package/public/app.js +570 -62
- package/public/desktop/desktop.css +42 -7
- package/public/desktop/desktop.html +30 -6
- package/public/desktop/desktop.js +395 -46
- package/public/index.html +57 -20
- package/public/md.js +71 -1
- package/public/morphicons-init.js +41 -0
- package/public/motion.js +469 -0
- package/public/plugin.html +4 -1
- package/public/plugin.js +1 -0
- package/public/styles.css +47 -6
- package/public/transcribe-core.js +74 -0
- package/public/update.json +12 -12
- package/public/vendor/gsap/NOTICE.md +10 -0
- package/public/vendor/gsap/gsap.min.js +11 -0
- package/public/vendor/morphicons/LICENSE +21 -0
- package/public/vendor/morphicons/README.md +10 -0
- package/public/vendor/morphicons/controller-CXZuwJ_M.js +152 -0
- package/public/vendor/morphicons/dom.js +206 -0
- package/public/vendor/morphicons/element.js +261 -0
- package/public/vendor/morphicons/normalize-CYnN3Npw.js +540 -0
- package/public/vendor/morphicons/spring-CFHloqPP.js +623 -0
- package/public/version.json +1 -1
|
@@ -34,6 +34,12 @@ a.ds-btn { text-decoration: none; }
|
|
|
34
34
|
box-sizing: border-box; padding: 8px 10px 4px; border-bottom: 1px solid var(--dsr-line);
|
|
35
35
|
color: var(--dsr-accent-strong); font-size: 10px; font-weight: 700; line-height: 1.2;
|
|
36
36
|
}
|
|
37
|
+
.ds-session-workspace-group { flex: 0 0 auto; display: flex; flex-direction: column; gap: 0; }
|
|
38
|
+
.ds-session-group { touch-action: pan-y; user-select: none; }
|
|
39
|
+
.ds-session-group-drag-handle { flex: 0 0 auto; color: var(--dsr-muted); opacity: .52; font-size: 13px; line-height: 1; letter-spacing: -3px; }
|
|
40
|
+
.ds-session-workspace-group.reorder-pressing { outline: 1px solid var(--dsr-accent-line); border-radius: 10px; }
|
|
41
|
+
.ds-session-workspace-group.reorder-dragging { position: relative; z-index: 5; opacity: .76; outline: 1px solid var(--dsr-accent-strong); box-shadow: 0 10px 24px var(--dsr-shadow); touch-action: none; }
|
|
42
|
+
.ds-session-workspace-group .ds-session-item { touch-action: pan-y; }
|
|
37
43
|
.ds-session-group-icon { flex: 0 0 auto; color: var(--dsr-accent-2); font-size: 11px; }
|
|
38
44
|
.ds-session-group-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
39
45
|
.ds-session-item { width: 100%; flex: 0 0 auto; text-align: left; border: 1px solid transparent; background: transparent; color: var(--dsr-text); font: inherit; font-size: 13px; padding: 9px 10px; border-radius: 11px; cursor: pointer; display: flex; flex-direction: column; gap: 3px; transition: transform .18s ease, background .18s ease, border-color .18s ease; }
|
|
@@ -104,12 +110,19 @@ a.ds-btn { text-decoration: none; }
|
|
|
104
110
|
.ds-wb-panel > * { flex-shrink: 0; }
|
|
105
111
|
.ds-wb-panel-title { font-size: 10.5px; font-weight: 700; color: var(--dsr-muted); letter-spacing: .6px; text-transform: uppercase; }
|
|
106
112
|
.ds-wb-project { border: 1px solid var(--dsr-line); border-radius: 9px; background: var(--dsr-panel); overflow: hidden; }
|
|
107
|
-
.ds-wb-project-head { width: 100%; display: flex; align-items: center; gap: 6px; border: none; background: transparent; color: var(--dsr-text); font: inherit; font-size: 12.5px; padding: 6px 8px; cursor: pointer; text-align: left; }
|
|
113
|
+
.ds-wb-project-head { width: 100%; display: flex; align-items: center; gap: 6px; border: none; background: transparent; color: var(--dsr-text); font: inherit; font-size: 12.5px; padding: 6px 8px; cursor: pointer; text-align: left; touch-action: pan-y; user-select: none; }
|
|
114
|
+
.ds-wb-drag-handle, .ds-wb-session-drag-handle { flex: none; color: var(--dsr-muted); opacity: .52; font-size: 13px; line-height: 1; letter-spacing: -3px; }
|
|
115
|
+
.ds-wb-project.reorder-pressing, .ds-wb-session.reorder-pressing { outline: 1px solid var(--dsr-accent-line); }
|
|
116
|
+
.ds-wb-project.reorder-dragging, .ds-wb-session.reorder-dragging { position: relative; z-index: 5; opacity: .76; outline: 1px solid var(--dsr-accent-strong); box-shadow: 0 10px 24px var(--dsr-shadow); touch-action: none; }
|
|
117
|
+
.ds-wb-panel.reorder-active { user-select: none; }
|
|
118
|
+
.reorder-placeholder { flex: 0 0 auto; box-sizing: border-box; border: 1px dashed var(--dsr-accent-line); border-radius: 7px; background: var(--dsr-accent-soft); opacity: .72; }
|
|
119
|
+
html.reorder-scroll-lock { overscroll-behavior: none; }
|
|
120
|
+
html.reorder-scroll-lock body { overscroll-behavior: none; }
|
|
108
121
|
.ds-wb-project-title { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
109
122
|
.ds-wb-project-count { flex: none; font-size: 10.5px; color: var(--dsr-muted); background: var(--dsr-bg-2); border-radius: 999px; padding: 0 7px; line-height: 16px; }
|
|
110
123
|
.ds-wb-project-body { display: flex; flex-direction: column; gap: 3px; padding: 2px 6px 7px; }
|
|
111
124
|
.ds-wb-new-session { align-self: flex-start; margin: 2px 0 3px; }
|
|
112
|
-
.ds-wb-session { display: flex; align-items: center; gap: 6px; width: 100%; text-align: left; border: none; background: transparent; color: var(--dsr-text); font: inherit; font-size: 12px; padding: 5px 7px; border-radius: 7px; cursor: pointer; }
|
|
125
|
+
.ds-wb-session { display: flex; align-items: center; gap: 6px; width: 100%; text-align: left; border: none; background: transparent; color: var(--dsr-text); font: inherit; font-size: 12px; padding: 5px 7px; border-radius: 7px; cursor: pointer; touch-action: pan-y; user-select: none; }
|
|
113
126
|
.ds-wb-session.current { background: var(--dsr-accent-soft); color: var(--dsr-accent-strong); }
|
|
114
127
|
.ds-wb-session-dot { flex: none; width: 6px; height: 6px; border-radius: 50%; background: var(--dsr-line); }
|
|
115
128
|
.ds-wb-session-dot.running { background: var(--dsr-warning); }
|
|
@@ -153,8 +166,12 @@ a.ds-btn { text-decoration: none; }
|
|
|
153
166
|
.ds-icon-btn:hover { filter: brightness(1.06); }
|
|
154
167
|
#btn-donate { color: var(--dsr-accent-2); }
|
|
155
168
|
#btn-stats-top { color: var(--dsr-info); }
|
|
169
|
+
#btn-cancel { color: var(--dsr-error); border-color: var(--dsr-error-line); }
|
|
156
170
|
#btn-mobile-nav { display: none; }
|
|
157
171
|
.ds-title { flex: 1; min-width: 0; font-weight: 700; font-size: 15px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
172
|
+
.ds-session-status { flex: none; max-width: 150px; color: var(--dsr-muted); font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
173
|
+
.ds-text-input { width: 100%; box-sizing: border-box; min-height: 42px; padding: 10px 12px; border: 1px solid var(--dsr-line); border-radius: 10px; background: var(--dsr-bg-2); color: var(--dsr-text); font: inherit; outline: none; }
|
|
174
|
+
.ds-text-input:focus { border-color: var(--dsr-accent-line); }
|
|
158
175
|
.ds-top-right { display: flex; align-items: center; gap: 10px; }
|
|
159
176
|
.ds-conn { font-size: 11px; color: var(--dsr-muted); }
|
|
160
177
|
.ds-conn.on { color: var(--dsr-success); }
|
|
@@ -164,7 +181,6 @@ a.ds-btn { text-decoration: none; }
|
|
|
164
181
|
.ds-content { flex: 1; min-height: 0; display: flex; }
|
|
165
182
|
.ds-view { flex: 1; min-width: 0; display: flex; flex-direction: column; padding: 20px 26px 32px; overflow: hidden; }
|
|
166
183
|
.ds-view.hidden { display: none; }
|
|
167
|
-
.ds-view { animation: dsFade .15s ease; }
|
|
168
184
|
|
|
169
185
|
/* ---------- 系统总览 · A 方案 ---------- */
|
|
170
186
|
#view-overview { overflow-y:auto; background:radial-gradient(circle at 86% 4%,var(--dsr-accent-soft),transparent 32%),var(--dsr-bg); }
|
|
@@ -231,11 +247,21 @@ button.ds-overview-attention-item, button.ds-overview-session-item { cursor:poin
|
|
|
231
247
|
.ds-overview-session-item .ds-overview-mark { background:var(--dsr-info-soft); color:var(--dsr-info); }
|
|
232
248
|
.ds-overview-session-item.running .ds-overview-mark { background:var(--dsr-success-soft); color:var(--dsr-success); }
|
|
233
249
|
.ds-overview-empty { padding:10px; border:1px dashed var(--dsr-line); border-radius:12px; color:var(--dsr-muted); font-size:12px; text-align:center; }
|
|
234
|
-
@keyframes dsFade { from { opacity: .5; } to { opacity: 1; } }
|
|
235
|
-
|
|
236
250
|
/* 会话视图 */
|
|
237
251
|
#view-chat { padding: 0; }
|
|
238
252
|
.ds-history { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: 18px 22px; display: flex; flex-direction: column; gap: 10px; }
|
|
253
|
+
.ds-queue-dock { flex: none; margin: 0 16px 8px; border: 1px solid var(--dsr-line); border-radius: 12px; background: var(--dsr-surface); overflow: hidden; }
|
|
254
|
+
.ds-queue-dock-head { display: flex; align-items: center; gap: 8px; padding: 8px 12px; color: var(--dsr-muted); font-size: 12px; font-weight: 700; border-bottom: 1px solid var(--dsr-line); }
|
|
255
|
+
.ds-queue-dock-list { max-height: 220px; overflow-y: auto; }
|
|
256
|
+
.ds-queue-dock-item { display: flex; align-items: center; gap: 10px; padding: 8px 10px 8px 12px; border-bottom: 1px solid var(--dsr-line); }
|
|
257
|
+
.ds-queue-dock-item:last-child { border-bottom: 0; }
|
|
258
|
+
.ds-queue-dock-preview { flex: 1; min-width: 0; color: var(--dsr-text); font-size: 13px; line-height: 1.4; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
259
|
+
.ds-queue-dock-action { flex: 0 0 auto; }
|
|
260
|
+
.md-table-wrap { max-width: 100%; overflow-x: auto; margin: 8px 0; }
|
|
261
|
+
.md-table-wrap table { width: max-content; min-width: 100%; border-collapse: collapse; font-size: .94em; }
|
|
262
|
+
.md-table-wrap th, .md-table-wrap td { padding: 6px 9px; border: 1px solid var(--dsr-line); text-align: left; white-space: nowrap; }
|
|
263
|
+
.md-table-wrap th { background: var(--dsr-bg-2); font-weight: 700; }
|
|
264
|
+
.md-table-wrap tbody tr:nth-child(even) { background: color-mix(in srgb, var(--dsr-bg-2) 45%, transparent); }
|
|
239
265
|
.ds-msg { max-width: min(78%, 680px); width: fit-content; box-sizing: border-box; padding: 9px 12px; border-radius: 12px; font-size: 13.5px; line-height: 1.6; white-space: pre-wrap; word-break: break-word; }
|
|
240
266
|
.ds-msg.user { align-self: flex-end; background: var(--dsr-accent-soft); border: 1px solid var(--dsr-accent-line); color: var(--dsr-accent-strong); }
|
|
241
267
|
.ds-msg.assistant { align-self: flex-start; background: var(--dsr-panel); border: 1px solid var(--dsr-line); color: var(--dsr-text); }
|
|
@@ -274,6 +300,13 @@ button.ds-overview-attention-item, button.ds-overview-session-item { cursor:poin
|
|
|
274
300
|
.ds-card-row { display: flex; align-items: center; gap: 10px; font-size: 12.5px; padding: 3px 0; }
|
|
275
301
|
.ds-card-k { flex: 1; min-width: 0; word-break: break-word; }
|
|
276
302
|
.ds-card-v { color: var(--dsr-muted); font-size: 11.5px; white-space: nowrap; }
|
|
303
|
+
.ds-subagent-card { padding: 0; overflow: hidden; }
|
|
304
|
+
.ds-subagent-toggle { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 10px 12px; border: 0; background: transparent; color: inherit; text-align: left; cursor: pointer; }
|
|
305
|
+
.ds-subagent-toggle .ds-card-title { margin: 0; }
|
|
306
|
+
.ds-subagent-toggle-icon { color: var(--dsr-muted); font-size: 16px; line-height: 1; }
|
|
307
|
+
.ds-subagent-toggle-icon morph-icon,
|
|
308
|
+
.ds-subagent-toggle-icon morph-icon svg { width: 16px; height: 16px; display: block; }
|
|
309
|
+
.ds-subagent-list { padding: 0 12px 10px; border-top: 1px solid var(--dsr-line); }
|
|
277
310
|
.ds-model-head { font-size: 11px; font-weight: 700; color: var(--dsr-muted); letter-spacing: .6px; padding: 4px 6px 2px; }
|
|
278
311
|
.ds-model-group { padding: 2px 0 4px; }
|
|
279
312
|
.ds-model-provider { font-size: 11px; color: var(--dsr-muted); padding: 2px 6px; }
|
|
@@ -289,6 +322,9 @@ button.ds-overview-attention-item, button.ds-overview-session-item { cursor:poin
|
|
|
289
322
|
.ds-reasoning-live summary::after { content: ''; display: inline-block; width: 6px; height: 6px; margin-left: 7px; border-radius: 50%; background: var(--dsr-accent-strong); animation: ds-reasoning-pulse 1.2s ease-in-out infinite; }
|
|
290
323
|
@keyframes ds-reasoning-pulse { 0%, 100% { opacity: .35; transform: scale(.8); } 50% { opacity: 1; transform: scale(1); } }
|
|
291
324
|
.ds-composer { flex: none; display: flex; flex-direction: column; gap: 8px; padding: 12px 16px; border-top: 1px solid var(--dsr-line); background: var(--dsr-panel); }
|
|
325
|
+
.ds-composer-status { display: flex; align-items: center; gap: 7px; padding: 0 3px; color: var(--dsr-accent-strong); font-size: 12px; font-weight: 700; }
|
|
326
|
+
.ds-composer-status-dot { width: 7px; height: 7px; border-radius: 50%; background: currentColor; box-shadow: 0 0 0 0 currentColor; animation: dsr-running-pulse 1.3s ease-out infinite; }
|
|
327
|
+
@keyframes dsr-running-pulse { 0% { box-shadow: 0 0 0 0 currentColor; opacity: 1; } 70% { box-shadow: 0 0 0 6px transparent; opacity: .65; } 100% { box-shadow: 0 0 0 0 transparent; opacity: 1; } }
|
|
292
328
|
.ds-composer textarea { width: 100%; min-width: 0; resize: none; background: var(--dsr-bg-2); color: var(--dsr-text); border: 1px solid var(--dsr-line); border-radius: 12px; padding: 10px 14px; font: inherit; font-size: 13.5px; line-height: 1.5; outline: none; min-height: 44px; max-height: 120px; box-sizing: border-box; }
|
|
293
329
|
.ds-composer-actions { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
|
|
294
330
|
.ds-composer-left { display: flex; align-items: center; gap: 8px; min-width: 0; flex-wrap: wrap; }
|
|
@@ -388,9 +424,8 @@ button.ds-overview-attention-item, button.ds-overview-session-item { cursor:poin
|
|
|
388
424
|
.ds-stats-note { font-size: 11px; color: var(--dsr-muted); line-height: 1.6; margin-top: 8px; }
|
|
389
425
|
|
|
390
426
|
/* 统计抽屉(右侧滑出) */
|
|
391
|
-
.ds-drawer { position: fixed; top: 0; right: 0; bottom: 0; z-index: 110; width: min(540px, 100vw); background: var(--dsr-panel); border-left: 1px solid var(--dsr-line); box-shadow: -12px 0 32px rgba(0,0,0,.35); display: flex; flex-direction: column;
|
|
427
|
+
.ds-drawer { position: fixed; top: 0; right: 0; bottom: 0; z-index: 110; width: min(540px, 100vw); background: var(--dsr-panel); border-left: 1px solid var(--dsr-line); box-shadow: -12px 0 32px rgba(0,0,0,.35); display: flex; flex-direction: column; }
|
|
392
428
|
.ds-drawer.hidden { display: none; }
|
|
393
|
-
@keyframes dsDrawerIn { from { transform: translateX(40px); opacity: 0; } to { transform: none; opacity: 1; } }
|
|
394
429
|
.ds-drawer-head { flex: none; display: flex; align-items: center; justify-content: space-between; padding: 13px 15px; border-bottom: 1px solid var(--dsr-line); font-weight: 700; font-size: 15px; }
|
|
395
430
|
.ds-drawer-body { flex: 1; min-height: 0; overflow-y: auto; padding: 14px 15px; scrollbar-width: thin; scrollbar-color: var(--dsr-line) transparent; }
|
|
396
431
|
.ds-drawer-body::-webkit-scrollbar { width: 8px; }
|
|
@@ -86,6 +86,9 @@
|
|
|
86
86
|
<header class="ds-topbar">
|
|
87
87
|
<button id="btn-mobile-nav" class="ds-icon-btn" data-i18n-aria="ds.menu" data-i18n-title="ds.menu"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h16"/></svg></button>
|
|
88
88
|
<div class="ds-title" id="ds-title" data-i18n="ds.sessions">会话</div>
|
|
89
|
+
<span id="ds-session-status" class="ds-session-status hidden"></span>
|
|
90
|
+
<button id="btn-rename-session" class="ds-icon-btn hidden" data-i18n-title="ds.sessionRename" data-i18n-aria="ds.sessionRename">✎</button>
|
|
91
|
+
<button id="btn-archive-session" class="ds-btn hidden" data-i18n="ds.sessionArchive">归档</button>
|
|
89
92
|
<div class="ds-top-right">
|
|
90
93
|
<span class="ds-conn" id="conn-badge" title="">●</span>
|
|
91
94
|
<span class="ds-server" id="server-badge"></span>
|
|
@@ -146,8 +149,10 @@
|
|
|
146
149
|
<!-- 会话详情 -->
|
|
147
150
|
<section id="view-chat" class="ds-view">
|
|
148
151
|
<div id="session-cards" class="ds-session-cards"></div>
|
|
152
|
+
<div id="queue-dock" class="ds-queue-dock hidden" aria-live="polite"></div>
|
|
149
153
|
<div id="history" class="ds-history" aria-live="polite"></div>
|
|
150
154
|
<div class="ds-composer">
|
|
155
|
+
<div id="composer-status" class="ds-composer-status hidden" role="status" aria-live="polite"><span class="ds-composer-status-dot" aria-hidden="true"></span><span data-i18n="ds.composerRunning">运行中…</span></div>
|
|
151
156
|
<textarea id="composer" rows="1" data-i18n-placeholder="ds.composerPlaceholder" placeholder="输入消息…"></textarea>
|
|
152
157
|
<div class="ds-composer-actions">
|
|
153
158
|
<div class="ds-composer-left">
|
|
@@ -172,6 +177,7 @@
|
|
|
172
177
|
</div>
|
|
173
178
|
</div>
|
|
174
179
|
<div class="ds-composer-right">
|
|
180
|
+
<button id="btn-cancel" class="ds-btn ds-stop-btn hidden" data-i18n="ds.sessionStop">停止本轮</button>
|
|
175
181
|
<button id="btn-send" class="ds-btn primary ds-send-btn" data-i18n-aria="ds.send" data-i18n-title="ds.send" aria-label="发送">↑</button>
|
|
176
182
|
</div>
|
|
177
183
|
</div>
|
|
@@ -315,6 +321,19 @@
|
|
|
315
321
|
</div>
|
|
316
322
|
</div>
|
|
317
323
|
|
|
324
|
+
<div id="modal-rename" class="ds-modal hidden" role="dialog" aria-modal="true" aria-labelledby="rename-session-title">
|
|
325
|
+
<div class="ds-modal-card">
|
|
326
|
+
<div id="rename-session-title" class="ds-modal-title" data-i18n="ds.sessionRenameTitle">重命名会话</div>
|
|
327
|
+
<div class="ds-modal-body">
|
|
328
|
+
<input id="rename-session-input" class="ds-text-input" maxlength="160" autocomplete="off" data-i18n-placeholder="ds.sessionRenamePlaceholder" placeholder="输入新的会话名称">
|
|
329
|
+
</div>
|
|
330
|
+
<div class="ds-modal-actions">
|
|
331
|
+
<button id="rename-cancel" class="ds-btn" data-i18n="ds.cancel">取消</button>
|
|
332
|
+
<button id="rename-confirm" class="ds-btn primary" data-i18n="ds.sessionRenameConfirm">保存</button>
|
|
333
|
+
</div>
|
|
334
|
+
</div>
|
|
335
|
+
</div>
|
|
336
|
+
|
|
318
337
|
<!-- 写反馈模态 -->
|
|
319
338
|
<div id="modal-feedback" class="ds-modal hidden" role="dialog" aria-modal="true">
|
|
320
339
|
<div class="ds-modal-card">
|
|
@@ -432,9 +451,9 @@
|
|
|
432
451
|
'ds.systemPulse': '系统链路', 'ds.systemNominal': '系统链路正常', 'ds.systemDegraded': '部分链路需要关注', 'ds.systemOffline': '连接已断开', 'ds.checking': '检查中…', 'ds.components': '{n}/4 个模块在线', 'ds.live': 'LIVE', 'ds.allLinked': '全部链路', 'ds.offlineCore': 'OFFLINE',
|
|
433
452
|
'ds.gateway': '网关', 'ds.dshUpstream': 'DSH 上游', 'ds.mux': '实时 mux', 'ds.host': '实时 host', 'ds.online': '在线', 'ds.offlineShort': '离线',
|
|
434
453
|
'ds.attention': '需要你处理', 'ds.runtime': '运行指标', 'ds.recentActivity': '近期活动', 'ds.dshVersion': 'DSH 版本', 'ds.gatewayStatus': '网关状态', 'ds.activeSessions': '活跃会话', 'ds.connectionMode': '连接模式', 'ds.liveWs': '实时 WS', 'ds.poll': '降级轮询', 'ds.running': '运行中', 'ds.noReason': '无说明', 'ds.noActivity': '暂无后台活动', 'ds.noSessions': '暂无会话', 'ds.refreshOverview': '刷新总览', 'ds.pendingCount': '{n} 项待处理', 'ds.activeCount': '{n} 个活跃会话', 'ds.nothingPending': '暂无事项', 'ds.action.openSession': '打开最近会话', 'ds.action.newSession': '新建会话', 'ds.action.attention': '处理待办', 'ds.action.connect': '去设置连接', 'ds.action.refresh': '重新检查连接',
|
|
435
|
-
'ds.sortLabel': '会话排序', 'ds.sortTime': '按时间', 'ds.sortWorkspace': '按工作区', 'ds.workspace': '工作区', 'ds.workspaceUnknown': '未指定工作区',
|
|
454
|
+
'ds.sortLabel': '会话排序', 'ds.sortTime': '按时间', 'ds.sortWorkspace': '按工作区', 'ds.workspace': '工作区', 'ds.workspaceUnknown': '未指定工作区', 'ds.wbOrderSaved': '顺序已保存到当前设备',
|
|
436
455
|
'ds.files': '文件传输', 'ds.settings': '设置', 'ds.stats': '统计', 'ds.menu': '导航',
|
|
437
|
-
'ds.send': '发送', 'ds.composerPlaceholder': '输入消息,Enter 发送…', 'ds.presets': '预设',
|
|
456
|
+
'ds.send': '发送', 'ds.composerPlaceholder': '输入消息,Enter 发送…', 'ds.composerRunning': '运行中…', 'ds.presets': '预设', 'ds.sessionRename': '重命名会话', 'ds.sessionRenameTitle': '重命名会话', 'ds.sessionRenamePlaceholder': '输入新的会话名称', 'ds.sessionRenameConfirm': '保存', 'ds.sessionRenameFailed': '重命名失败', 'ds.sessionRenameEmpty': '会话名称不能为空', 'ds.sessionRenamed': '会话名称已更新', 'ds.sessionArchive': '归档', 'ds.sessionArchiveConfirm': '归档这个会话?归档后可在“显示已归档”中打开。', 'ds.sessionArchived': '会话已归档', 'ds.sessionStop': '停止本轮', 'ds.sessionStopConfirm': '停止当前回合?排队中的消息不会被删除。', 'ds.sessionStopFailed': '停止失败', 'ds.sessionStopRequested': '已请求停止本轮', 'ds.sessionRecovering': '恢复会话中…', 'ds.sessionReady': '会话已恢复', 'ds.sessionRecoveryFailed': '会话恢复失败',
|
|
438
457
|
'ds.commands': '指令',
|
|
439
458
|
'ds.cmdCompact': '/compact 压缩对话历史', 'ds.cmdExport': '/export 导出会话日志 ZIP',
|
|
440
459
|
'ds.cmdFeedback': '/feedback 反馈当前会话', 'ds.cmdGoal': '/goal 设置/查看任务目标',
|
|
@@ -520,8 +539,9 @@
|
|
|
520
539
|
'goal.actionFailed': '目标操作失败', 'goal.actionSubmitted': '目标操作已提交',
|
|
521
540
|
'goal.cannotEmpty': '目标不能为空', 'goal.updateFailed': '更新失败', 'goal.updated': '目标已更新', 'goal.editPrompt': '修改目标:',
|
|
522
541
|
'todos.title': '任务清单',
|
|
523
|
-
'subagent.title': '子代理', 'subagent.diagnostic': '诊断项', 'subagent.running': '· 运行中', 'subagent.interrupt': '中断',
|
|
542
|
+
'subagent.title': '子代理', 'subagent.count': '子代理 · {n} 个', 'subagent.expand': '展开子代理', 'subagent.collapse': '收起子代理', 'subagent.diagnostic': '诊断项', 'subagent.running': '· 运行中', 'subagent.interrupt': '中断',
|
|
524
543
|
'subagent.confirmInterrupt': '中断这个子代理当前回合?', 'subagent.interruptFailed': '中断失败', 'subagent.interruptSubmitted': '中断请求已提交',
|
|
544
|
+
'queue.title': '排队消息', 'queue.steer': '插话', 'queue.steerUnavailable': '仅运行中可插话', 'queue.steerSubmitted': '插话请求已提交', 'queue.steerFailed': '插话失败:{msg}', 'queue.image': '图片消息',
|
|
525
545
|
'models.loading': '模型加载中…', 'models.loadFailed': '模型列表加载失败:{msg}', 'models.unavailable': '不可用', 'models.none': '没有可用模型',
|
|
526
546
|
'models.switchFailed': '切换模型失败', 'models.switched': '已切换模型:{model}',
|
|
527
547
|
'models.effortFailed': '切换思考深度失败', 'models.effortSwitched': '思考深度:{effort}', 'models.effortLow': '低', 'models.effortHigh': '高', 'models.effortMax': '极高', 'models.effortOff': '关闭', 'models.effortCustomHint': '该路由未公布档位,按 DSH 兼容值尝试;不支持时不会更改当前设置。',
|
|
@@ -533,9 +553,9 @@
|
|
|
533
553
|
'ds.systemPulse': 'System pulse', 'ds.systemNominal': 'System nominal', 'ds.systemDegraded': 'Some links need attention', 'ds.systemOffline': 'Connection offline', 'ds.checking': 'Checking…', 'ds.components': '{n}/4 components online', 'ds.live': 'LIVE', 'ds.allLinked': 'ALL LINKED', 'ds.offlineCore': 'OFFLINE',
|
|
534
554
|
'ds.gateway': 'Gateway', 'ds.dshUpstream': 'DSH upstream', 'ds.mux': 'Live mux', 'ds.host': 'Live host', 'ds.online': 'Online', 'ds.offlineShort': 'Offline',
|
|
535
555
|
'ds.attention': 'Needs attention', 'ds.runtime': 'Runtime metrics', 'ds.recentActivity': 'Recent activity', 'ds.dshVersion': 'DSH version', 'ds.gatewayStatus': 'Gateway status', 'ds.activeSessions': 'Active sessions', 'ds.connectionMode': 'Connection mode', 'ds.liveWs': 'Live WS', 'ds.poll': 'Degraded polling', 'ds.running': 'Running', 'ds.noReason': 'No reason given', 'ds.noActivity': 'No background activity', 'ds.noSessions': 'No sessions yet', 'ds.refreshOverview': 'Refresh overview', 'ds.pendingCount': '{n} pending', 'ds.activeCount': '{n} active sessions', 'ds.nothingPending': 'Nothing pending', 'ds.action.openSession': 'Open recent session', 'ds.action.newSession': 'New session', 'ds.action.attention': 'Review pending', 'ds.action.connect': 'Set up connection', 'ds.action.refresh': 'Check connection',
|
|
536
|
-
'ds.sortLabel': 'Session sort', 'ds.sortTime': 'By time', 'ds.sortWorkspace': 'By workspace', 'ds.workspace': 'Workspace', 'ds.workspaceUnknown': 'No workspace',
|
|
556
|
+
'ds.sortLabel': 'Session sort', 'ds.sortTime': 'By time', 'ds.sortWorkspace': 'By workspace', 'ds.workspace': 'Workspace', 'ds.workspaceUnknown': 'No workspace', 'ds.wbOrderSaved': 'Order saved on this device',
|
|
537
557
|
'ds.files': 'Files', 'ds.settings': 'Settings', 'ds.stats': 'Stats', 'ds.menu': 'Menu',
|
|
538
|
-
'ds.send': 'Send', 'ds.composerPlaceholder': 'Type a message, Enter to send…', 'ds.presets': 'Presets',
|
|
558
|
+
'ds.send': 'Send', 'ds.composerPlaceholder': 'Type a message, Enter to send…', 'ds.composerRunning': 'Running…', 'ds.presets': 'Presets', 'ds.sessionRename': 'Rename session', 'ds.sessionRenameTitle': 'Rename session', 'ds.sessionRenamePlaceholder': 'Enter a new session name', 'ds.sessionRenameConfirm': 'Save', 'ds.sessionRenameFailed': 'Rename failed', 'ds.sessionRenameEmpty': 'Session name cannot be empty', 'ds.sessionRenamed': 'Session name updated', 'ds.sessionArchive': 'Archive', 'ds.sessionArchiveConfirm': 'Archive this session? You can open it from “Show archived”.', 'ds.sessionArchived': 'Session archived', 'ds.sessionStop': 'Stop turn', 'ds.sessionStopConfirm': 'Stop the current turn? Queued messages will be kept.', 'ds.sessionStopFailed': 'Stop failed', 'ds.sessionStopRequested': 'Stop requested', 'ds.sessionRecovering': 'Restoring session…', 'ds.sessionReady': 'Session ready', 'ds.sessionRecoveryFailed': 'Session restore failed',
|
|
539
559
|
'ds.commands': 'Commands',
|
|
540
560
|
'ds.cmdCompact': '/compact Compress conversation history', 'ds.cmdExport': '/export Export session log ZIP',
|
|
541
561
|
'ds.cmdFeedback': '/feedback Feedback current session', 'ds.cmdGoal': '/goal Set/view task goal',
|
|
@@ -621,8 +641,9 @@
|
|
|
621
641
|
'goal.actionFailed': 'Goal action failed', 'goal.actionSubmitted': 'Goal action submitted',
|
|
622
642
|
'goal.cannotEmpty': 'Goal cannot be empty', 'goal.updateFailed': 'Update failed', 'goal.updated': 'Goal updated', 'goal.editPrompt': 'Edit goal:',
|
|
623
643
|
'todos.title': 'Todos',
|
|
624
|
-
'subagent.title': 'Subagents', 'subagent.diagnostic': 'Diagnostic', 'subagent.running': '· running', 'subagent.interrupt': 'Interrupt',
|
|
644
|
+
'subagent.title': 'Subagents', 'subagent.count': 'Subagents · {n}', 'subagent.expand': 'Expand subagents', 'subagent.collapse': 'Collapse subagents', 'subagent.diagnostic': 'Diagnostic', 'subagent.running': '· running', 'subagent.interrupt': 'Interrupt',
|
|
625
645
|
'subagent.confirmInterrupt': 'Interrupt this subagent\'s current turn?', 'subagent.interruptFailed': 'Interrupt failed', 'subagent.interruptSubmitted': 'Interrupt requested',
|
|
646
|
+
'queue.title': 'Queued messages', 'queue.steer': 'Interject', 'queue.steerUnavailable': 'Only available while running', 'queue.steerSubmitted': 'Interjection requested', 'queue.steerFailed': 'Interjection failed: {msg}', 'queue.image': 'Image message',
|
|
626
647
|
'models.loading': 'Loading models…', 'models.loadFailed': 'Failed to load models: {msg}', 'models.unavailable': 'unavailable', 'models.none': 'No models available',
|
|
627
648
|
'models.switchFailed': 'Model switch failed', 'models.switched': 'Switched model: {model}',
|
|
628
649
|
'models.effortFailed': 'Failed to switch reasoning effort', 'models.effortSwitched': 'Reasoning effort: {effort}', 'models.effortLow': 'Low', 'models.effortHigh': 'High', 'models.effortMax': 'Max', 'models.effortOff': 'Off', 'models.effortCustomHint': 'This route does not publish effort metadata. DSH compatibility values are tried; unsupported values leave the current setting unchanged.',
|
|
@@ -633,6 +654,9 @@
|
|
|
633
654
|
</script>
|
|
634
655
|
<script src="i18n.js"></script>
|
|
635
656
|
<script src="../md.js"></script>
|
|
657
|
+
<script src="../vendor/gsap/gsap.min.js"></script>
|
|
658
|
+
<script src="../motion.js"></script>
|
|
659
|
+
<script type="module" src="../morphicons-init.js"></script>
|
|
636
660
|
<script src="desktop.js"></script>
|
|
637
661
|
</body>
|
|
638
662
|
</html>
|