dsh-remote-plugin 0.6.0 → 0.6.2

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.
@@ -35,7 +35,7 @@
35
35
  <span class="ds-feedback-ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 20h9"/><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4Z"/></svg></span>
36
36
  <span class="ds-feedback-body"><span class="ds-feedback-name" data-i18n="ds.feedbackWrite">写反馈</span><span class="ds-feedback-desc" data-i18n="ds.feedbackWriteDesc">App 内直接提交</span></span>
37
37
  </button>
38
- <a class="ds-feedback-item primary" href="https://github.com/Blank-not-black/dsh-Remote/issues" target="_blank" rel="noopener" role="menuitem">
38
+ <a class="ds-feedback-item" href="https://github.com/Blank-not-black/dsh-Remote/issues" target="_blank" rel="noopener" role="menuitem">
39
39
  <span class="ds-feedback-ico"><svg viewBox="0 0 16 16" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8a8.01 8.01 0 0 0 5.47 7.59c.4.08.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-.27s1.36.09 2 .27c1.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"/></svg></span>
40
40
  <span class="ds-feedback-body"><span class="ds-feedback-name">GitHub Issues</span><span class="ds-feedback-desc" data-i18n="ds.feedbackGithubDesc">反馈 bug / 提建议</span></span>
41
41
  </a>
@@ -63,6 +63,7 @@
63
63
  <div class="ds-top-right">
64
64
  <span class="ds-conn" id="conn-badge" title="">●</span>
65
65
  <span class="ds-server" id="server-badge"></span>
66
+ <button id="btn-donate" class="ds-icon-btn" data-i18n-aria="ds.donate" data-i18n-title="ds.donate">🎁</button>
66
67
  <button id="btn-stats-top" class="ds-icon-btn" data-i18n-aria="ds.stats" data-i18n-title="ds.stats">📊</button>
67
68
  </div>
68
69
  </header>
@@ -76,10 +77,36 @@
76
77
 
77
78
  <!-- 会话详情 -->
78
79
  <section id="view-chat" class="ds-view">
80
+ <div id="session-cards" class="ds-session-cards"></div>
79
81
  <div id="history" class="ds-history" aria-live="polite"></div>
80
82
  <div class="ds-composer">
81
83
  <textarea id="composer" rows="1" data-i18n-placeholder="ds.composerPlaceholder" placeholder="输入消息…"></textarea>
82
- <button id="btn-send" class="ds-btn primary" data-i18n="ds.send">发送</button>
84
+ <div class="ds-composer-actions">
85
+ <div class="ds-composer-left">
86
+ <div style="position:relative">
87
+ <button id="btn-cmd" class="ds-btn" data-i18n="ds.commands">指令</button>
88
+ <div id="cmd-menu" class="ds-group-menu hidden" style="width:280px; left:0; right:auto; top:auto; bottom:calc(100% + 8px)">
89
+ <button class="ds-feedback-item" data-ds-cmd="/compact" data-i18n="ds.cmdCompact">/compact 压缩对话历史</button>
90
+ <button class="ds-feedback-item" data-ds-cmd="/export" data-i18n="ds.cmdExport">/export 导出会话日志 ZIP</button>
91
+ <button class="ds-feedback-item" data-ds-cmd="/feedback" data-i18n="ds.cmdFeedback">/feedback 反馈当前会话</button>
92
+ <button class="ds-feedback-item" data-ds-cmd="/goal" data-i18n="ds.cmdGoal">/goal 设置/查看任务目标</button>
93
+ <button class="ds-feedback-item" data-ds-cmd="/permission" data-i18n="ds.cmdPermission">/permission 切换权限预设</button>
94
+ <button class="ds-feedback-item" data-ds-cmd="/plan" data-i18n="ds.cmdPlan">/plan 进入/退出计划模式</button>
95
+ </div>
96
+ </div>
97
+ <div style="position:relative">
98
+ <button id="btn-preset" class="ds-btn" data-i18n="ds.presets">预设</button>
99
+ <div id="preset-menu" class="ds-group-menu hidden" style="width:260px; left:0; right:auto; top:auto; bottom:calc(100% + 8px)"></div>
100
+ </div>
101
+ <div style="position:relative">
102
+ <button id="btn-model" class="ds-btn" data-i18n="ds.models">模型</button>
103
+ <div id="model-menu" class="ds-group-menu hidden" style="width:360px; left:0; right:auto; top:auto; bottom:calc(100% + 8px)"></div>
104
+ </div>
105
+ </div>
106
+ <div class="ds-composer-right">
107
+ <button id="btn-send" class="ds-btn primary ds-send-btn" data-i18n-aria="ds.send" data-i18n-title="ds.send" aria-label="发送">↑</button>
108
+ </div>
109
+ </div>
83
110
  </div>
84
111
  </section>
85
112
 
@@ -97,7 +124,53 @@
97
124
  <!-- 设置 -->
98
125
  <section id="view-settings" class="ds-view hidden">
99
126
  <div class="ds-section-label" data-i18n="ds.settings">设置</div>
100
- <div class="ds-settings">
127
+ <div id="settings-home">
128
+ <div class="ds-settings">
129
+ <div class="ds-setting-row" data-settings-group="general" style="cursor:pointer">
130
+ <div><div class="ds-setting-name" data-i18n="ds.groupGeneral">通用</div><div class="ds-setting-desc" data-i18n="ds.groupGeneralDesc">工具调用、预设提示词</div></div>
131
+ <span class="ds-setting-arrow" aria-hidden="true">›</span>
132
+ </div>
133
+ <div class="ds-setting-row" data-settings-group="servers" style="cursor:pointer">
134
+ <div><div class="ds-setting-name" data-i18n="ds.groupServers">服务器</div><div class="ds-setting-desc" data-i18n="ds.groupServersDesc">服务器地址</div></div>
135
+ <span class="ds-setting-arrow" aria-hidden="true">›</span>
136
+ </div>
137
+ <div class="ds-setting-row" data-settings-group="theme" style="cursor:pointer">
138
+ <div><div class="ds-setting-name" data-i18n="ds.groupTheme">皮肤</div><div class="ds-setting-desc" data-i18n="ds.groupThemeDesc">配色主题</div></div>
139
+ <span class="ds-setting-arrow" aria-hidden="true">›</span>
140
+ </div>
141
+ <div class="ds-setting-row" data-settings-group="about" style="cursor:pointer">
142
+ <div><div class="ds-setting-name" data-i18n="ds.groupAbout">关于</div><div class="ds-setting-desc" data-i18n="ds.groupAboutDesc">版本信息</div></div>
143
+ <span class="ds-setting-arrow" aria-hidden="true">›</span>
144
+ </div>
145
+ </div>
146
+ <div class="ds-settings">
147
+ <div class="ds-setting-row">
148
+ <div><div class="ds-setting-name" data-i18n="ds.tokenTitle">访问令牌</div><div class="ds-setting-desc" id="token-desc"></div></div>
149
+ <button id="btn-copy-token" class="ds-btn" data-i18n="ds.copyToken">复制</button>
150
+ </div>
151
+ <div class="ds-setting-row">
152
+ <div><div class="ds-setting-name" data-i18n="ds.langTitle">语言 / Language</div></div>
153
+ <button id="btn-lang" class="ds-btn">EN</button>
154
+ </div>
155
+ </div>
156
+ </div>
157
+
158
+ <div id="settings-page-general" class="ds-settings hidden">
159
+ <div class="ds-setting-row" data-settings-back style="cursor:pointer">
160
+ <button class="ds-btn" data-i18n="ds.back">‹ 返回</button>
161
+ <div class="ds-setting-name" data-i18n="ds.groupGeneral">通用</div>
162
+ </div>
163
+ <div class="ds-setting-row">
164
+ <div><div class="ds-setting-name" data-i18n="presets.title">预设提示词</div><div class="ds-setting-desc"><span data-i18n="presets.desc">常用提示词,对话界面一键插入(最多 20 条)</span> <span id="preset-count-home"></span></div></div>
165
+ <button id="btn-manage-presets" class="ds-btn" data-i18n="presets.manage">管理</button>
166
+ </div>
167
+ </div>
168
+
169
+ <div id="settings-page-servers" class="ds-settings hidden">
170
+ <div class="ds-setting-row" data-settings-back style="cursor:pointer">
171
+ <button class="ds-btn" data-i18n="ds.back">‹ 返回</button>
172
+ <div class="ds-setting-name" data-i18n="ds.groupServers">服务器</div>
173
+ </div>
101
174
  <div class="ds-setting-row">
102
175
  <div><div class="ds-setting-name" data-i18n="ds.serversTitle">服务器(分组)</div><div class="ds-setting-desc" id="server-desc"></div></div>
103
176
  <button id="btn-server-speed" class="ds-btn" data-i18n="ds.speedTest">测速</button>
@@ -115,25 +188,27 @@
115
188
  <input id="server-input" type="url" placeholder="http://IP:8787">
116
189
  <button id="btn-server-add" class="ds-btn" data-i18n="ds.addServer">添加</button>
117
190
  </div>
118
- <div class="ds-setting-row">
119
- <div><div class="ds-setting-name" data-i18n="ds.tokenTitle">访问令牌</div><div class="ds-setting-desc" id="token-desc"></div></div>
120
- <button id="btn-copy-token" class="ds-btn" data-i18n="ds.copyToken">复制</button>
191
+ </div>
192
+
193
+ <div id="settings-page-theme" class="ds-settings hidden">
194
+ <div class="ds-setting-row" data-settings-back style="cursor:pointer">
195
+ <button class="ds-btn" data-i18n="ds.back">‹ 返回</button>
196
+ <div class="ds-setting-name" data-i18n="ds.groupTheme">皮肤</div>
121
197
  </div>
122
198
  <div class="ds-setting-row">
123
199
  <div><div class="ds-setting-name" data-i18n="ds.themeTitle">皮肤</div><div class="ds-setting-desc" data-i18n="ds.themeDesc">四套皮肤</div></div>
124
200
  <button id="btn-theme" class="ds-btn">默认深空</button>
125
201
  </div>
126
- <div class="ds-setting-row">
127
- <div><div class="ds-setting-name" data-i18n="ds.langTitle">语言 / Language</div></div>
128
- <button id="btn-lang" class="ds-btn">EN</button>
129
- </div>
130
- <div class="ds-setting-row">
131
- <div><div class="ds-setting-name" data-i18n="ds.feedbackTitle">反馈渠道</div><div class="ds-setting-desc" data-i18n="ds.feedbackDesc">GitHub / Gitee / B站:反馈 bug、提建议、唠嗑</div></div>
202
+ </div>
203
+
204
+ <div id="settings-page-about" class="ds-settings hidden">
205
+ <div class="ds-setting-row" data-settings-back style="cursor:pointer">
206
+ <button class="ds-btn" data-i18n="ds.back">‹ 返回</button>
207
+ <div class="ds-setting-name" data-i18n="ds.groupAbout">关于</div>
132
208
  </div>
133
- <div class="ds-feedback-links">
134
- <a class="ds-btn" href="https://github.com/Blank-not-black/dsh-Remote" target="_blank" rel="noopener">GitHub</a>
135
- <a class="ds-btn" href="https://gitee.com/Blankneverfails/dsh-Remote" target="_blank" rel="noopener">Gitee</a>
136
- <a class="ds-btn" href="https://space.bilibili.com/419009275/dynamic" target="_blank" rel="noopener">B站</a>
209
+ <div class="ds-setting-row" id="btn-donate-about" style="cursor:pointer">
210
+ <div><div class="ds-setting-name" data-i18n="ds.donate">赞赏支持</div><div class="ds-setting-desc" data-i18n="ds.donateDesc">如果 dsh-remote 帮到了你,欢迎赞赏支持开发 ☕</div></div>
211
+ <span class="ds-setting-arrow" aria-hidden="true">›</span>
137
212
  </div>
138
213
  </div>
139
214
  </section>
@@ -191,6 +266,55 @@
191
266
  </div>
192
267
  </div>
193
268
 
269
+ <!-- 预设提示词管理模态 -->
270
+ <div id="modal-presets" class="ds-modal hidden">
271
+ <div class="ds-modal-card">
272
+ <div class="ds-modal-title" data-i18n="presets.title">预设提示词</div>
273
+ <div class="ds-modal-body">
274
+ <div class="ds-preset-toolbar">
275
+ <span id="preset-count" class="ds-preset-count"></span>
276
+ <button id="btn-preset-add" class="ds-btn" data-i18n="presets.add">新增</button>
277
+ </div>
278
+ <div id="preset-list" class="ds-preset-list"></div>
279
+ </div>
280
+ <div class="ds-modal-actions">
281
+ <button id="btn-presets-close" class="ds-btn" data-i18n="ds.close">关闭</button>
282
+ </div>
283
+ </div>
284
+ </div>
285
+
286
+ <!-- 赞赏支持模态 -->
287
+ <div id="modal-donate" class="ds-modal hidden">
288
+ <div class="ds-modal-card">
289
+ <div class="ds-modal-title" data-i18n="ds.donate">赞赏支持</div>
290
+ <div class="ds-modal-body donate-body">
291
+ <img src="../donate.png" alt="" class="donate-img" style="display:block;margin:0 auto;max-width:100%;max-height:60vh;border-radius:8px">
292
+ <p class="donate-thanks" data-i18n="ds.donateThanks" style="text-align:center;margin-top:12px">感谢你的支持 ☕</p>
293
+ </div>
294
+ <div class="ds-modal-actions">
295
+ <button id="btn-donate-close" class="ds-btn" data-i18n="ds.donateClose">关闭</button>
296
+ </div>
297
+ </div>
298
+ </div>
299
+
300
+ <!-- 更新内容模态 -->
301
+ <div id="modal-notes" class="ds-modal hidden">
302
+ <div class="ds-modal-card">
303
+ <div class="ds-modal-title"><span id="notes-version" style="opacity:.75"></span> <span data-i18n="ds.notesTitle">更新内容</span></div>
304
+ <div class="ds-modal-body notes-body">
305
+ <div id="notes-pages" class="notes-pages" style="display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:12px;scrollbar-width:none;-ms-overflow-style:none;"></div>
306
+ <div class="notes-nav" style="display:flex;align-items:center;justify-content:center;gap:12px;margin-top:8px;">
307
+ <button id="notes-prev" class="ds-btn" aria-label="‹">‹</button>
308
+ <span id="notes-page" style="opacity:.75">1/1</span>
309
+ <button id="notes-next" class="ds-btn" aria-label="›">›</button>
310
+ </div>
311
+ </div>
312
+ <div class="ds-modal-actions">
313
+ <button id="notes-close" class="ds-btn" data-i18n="ds.notesClose">关闭</button>
314
+ </div>
315
+ </div>
316
+ </div>
317
+
194
318
  <div id="toast" class="ds-toast hidden"></div>
195
319
  <div id="ds-tip" class="ds-tip hidden" role="tooltip" aria-hidden="true"></div>
196
320
 
@@ -199,8 +323,20 @@
199
323
  zh: {
200
324
  'ds.repo': 'GitHub 仓库', 'ds.newSession': '+ 新会话', 'ds.sessions': '会话',
201
325
  'ds.files': '文件传输', 'ds.settings': '设置', 'ds.stats': '统计', 'ds.menu': '导航',
202
- 'ds.send': '发送', 'ds.composerPlaceholder': '输入消息,Enter 发送…',
326
+ 'ds.send': '发送', 'ds.composerPlaceholder': '输入消息,Enter 发送…', 'ds.presets': '预设',
327
+ 'ds.commands': '指令',
328
+ 'ds.cmdCompact': '/compact 压缩对话历史', 'ds.cmdExport': '/export 导出会话日志 ZIP',
329
+ 'ds.cmdFeedback': '/feedback 反馈当前会话', 'ds.cmdGoal': '/goal 设置/查看任务目标',
330
+ 'ds.cmdPermission': '/permission 切换权限预设', 'ds.cmdPlan': '/plan 进入/退出计划模式',
203
331
  'ds.fsUp': '上级', 'ds.fsRefresh': '刷新', 'ds.fsEmpty': '目录为空',
332
+ 'ds.groupGeneral': '通用', 'ds.groupGeneralDesc': '工具调用、预设提示词',
333
+ 'ds.groupServers': '服务器', 'ds.groupServersDesc': '服务器地址',
334
+ 'ds.groupNotify': '通知', 'ds.groupNotifyDesc': '通知与提醒',
335
+ 'ds.groupTheme': '皮肤', 'ds.groupThemeDesc': '配色主题',
336
+ 'ds.groupAbout': '关于', 'ds.groupAboutDesc': '版本信息',
337
+ 'ds.donate': '赞赏支持', 'ds.donateDesc': '如果 dsh-remote 帮到了你,欢迎赞赏支持开发 ☕', 'ds.donateThanks': '感谢你的支持 ☕', 'ds.donateClose': '关闭',
338
+ 'ds.notesTitle': '更新内容', 'ds.notesClose': '关闭', 'ds.notesPage': '版本号 {current}/{total}',
339
+ 'ds.back': '‹ 返回', 'ds.emptyGroup': '暂无设置项',
204
340
  'ds.serversTitle': '服务器(分组)', 'ds.speedTest': '测速', 'ds.currentGroup': '当前组',
205
341
  'ds.addGroup': '+ 组', 'ds.addServer': '添加', 'ds.tokenTitle': '访问令牌', 'ds.copyToken': '复制',
206
342
  'ds.themeTitle': '皮肤', 'ds.themeDesc': '默认深空 / 落日 / 易北爱乐厅 / 草原孤塔', 'ds.langTitle': '语言 / Language',
@@ -255,15 +391,46 @@
255
391
  'ds.groupsConfirmDelete': '删除组「{group}」?组内服务器将归入默认组。', 'ds.groupsDeleted': '组已删除',
256
392
  'ds.theme.default': '默认深空', 'ds.theme.dark': '落日', 'ds.theme.light': '易北爱乐厅', 'ds.theme.neutral': '草原孤塔',
257
393
  'ds.role.me': '我', 'ds.role.dsh': 'DSH', 'ds.toolDefault': '工具',
394
+ 'ds.eventSystemReminder': '系统提示',
258
395
  'ds.questionOptions': '选项', 'ds.questionCustom': '自定义回答',
259
396
  'ds.questionNeedAnswer': '请选择一个选项或填写自定义回答', 'ds.questionSubmitted': '已提交回答',
260
397
  'ds.questionFrom': '来自 {server}',
398
+ 'ds.models': '模型', 'ds.close': '关闭',
399
+ 'ds.presetsEmpty': '暂时未设置快捷提示词', 'ds.presetsGuide': '去设置 → 通用 → 预设提示词 管理添加',
400
+ 'presets.title': '预设提示词', 'presets.desc': '常用提示词,对话界面一键插入(最多 20 条)', 'presets.manage': '管理',
401
+ 'presets.add': '新增', 'presets.edit': '编辑', 'presets.delete': '删除', 'presets.empty': '暂无预设',
402
+ 'presets.menuTitle': '预设', 'presets.namePrompt': '预设名称(≤20 字):', 'presets.textPrompt': '预设内容(≤2000 字):',
403
+ 'presets.nameEmpty': '名称不能为空', 'presets.nameTooLong': '名称不能超过 20 字', 'presets.textTooLong': '内容不能超过 2000 字', 'presets.limit': '最多 20 条预设', 'presets.added': '预设已添加',
404
+ 'presets.confirmDelete': '删除预设「{name}」?', 'presets.saved': '预设已保存', 'presets.deleted': '预设已删除',
405
+ 'goal.title': '目标', 'goal.pause': '暂停', 'goal.resume': '继续', 'goal.complete': '完成', 'goal.edit': '改目标', 'goal.clear': '清除',
406
+ 'goal.none': '当前会话没有目标', 'goal.confirmClear': '清除当前目标?(不会删除会话)', 'goal.confirmComplete': '将目标标记为完成?',
407
+ 'goal.actionFailed': '目标操作失败', 'goal.actionSubmitted': '目标操作已提交',
408
+ 'goal.cannotEmpty': '目标不能为空', 'goal.updateFailed': '更新失败', 'goal.updated': '目标已更新', 'goal.editPrompt': '修改目标:',
409
+ 'todos.title': '任务清单',
410
+ 'subagent.title': '子代理', 'subagent.diagnostic': '诊断项', 'subagent.running': '· 运行中', 'subagent.interrupt': '中断',
411
+ 'subagent.confirmInterrupt': '中断这个子代理当前回合?', 'subagent.interruptFailed': '中断失败', 'subagent.interruptSubmitted': '中断请求已提交',
412
+ 'models.loading': '模型加载中…', 'models.loadFailed': '模型列表加载失败:{msg}', 'models.unavailable': '不可用', 'models.none': '没有可用模型',
413
+ 'models.switchFailed': '切换模型失败', 'models.switched': '已切换模型:{model}',
414
+ 'models.effortFailed': '切换思考深度失败', 'models.effortSwitched': '思考深度:{effort}',
415
+ 'menu.modelTitle': '模型切换', 'menu.effortTitle': '思考深度',
261
416
  },
262
417
  en: {
263
418
  'ds.repo': 'GitHub repo', 'ds.newSession': '+ New session', 'ds.sessions': 'Sessions',
264
419
  'ds.files': 'Files', 'ds.settings': 'Settings', 'ds.stats': 'Stats', 'ds.menu': 'Menu',
265
- 'ds.send': 'Send', 'ds.composerPlaceholder': 'Type a message, Enter to send…',
420
+ 'ds.send': 'Send', 'ds.composerPlaceholder': 'Type a message, Enter to send…', 'ds.presets': 'Presets',
421
+ 'ds.commands': 'Commands',
422
+ 'ds.cmdCompact': '/compact Compress conversation history', 'ds.cmdExport': '/export Export session log ZIP',
423
+ 'ds.cmdFeedback': '/feedback Feedback current session', 'ds.cmdGoal': '/goal Set/view task goal',
424
+ 'ds.cmdPermission': '/permission Switch permission preset', 'ds.cmdPlan': '/plan Enter/exit plan mode',
266
425
  'ds.fsUp': 'Up', 'ds.fsRefresh': 'Refresh', 'ds.fsEmpty': 'Empty directory',
426
+ 'ds.groupGeneral': 'General', 'ds.groupGeneralDesc': 'Tool calls, prompt presets',
427
+ 'ds.groupServers': 'Servers', 'ds.groupServersDesc': 'Server address',
428
+ 'ds.groupNotify': 'Notifications', 'ds.groupNotifyDesc': 'Notifications & reminders',
429
+ 'ds.groupTheme': 'Theme', 'ds.groupThemeDesc': 'Color themes',
430
+ 'ds.groupAbout': 'About', 'ds.groupAboutDesc': 'Version info',
431
+ 'ds.donate': 'Support', 'ds.donateDesc': 'If dsh-remote has been helpful to you, feel free to support development with a coffee ☕', 'ds.donateThanks': 'Thanks for your support ☕', 'ds.donateClose': 'Close',
432
+ 'ds.notesTitle': 'What\'s New', 'ds.notesClose': 'Close', 'ds.notesPage': 'Version {current}/{total}',
433
+ 'ds.back': '‹ Back', 'ds.emptyGroup': 'No settings here',
267
434
  'ds.serversTitle': 'Servers (groups)', 'ds.speedTest': 'Test', 'ds.currentGroup': 'Current group',
268
435
  'ds.addGroup': '+ Group', 'ds.addServer': 'Add', 'ds.tokenTitle': 'Access token', 'ds.copyToken': 'Copy',
269
436
  'ds.themeTitle': 'Theme', 'ds.themeDesc': 'Deep Space / Sunset / Elbphilharmonie / Prairie Tower', 'ds.langTitle': 'Language',
@@ -318,9 +485,28 @@
318
485
  'ds.groupsConfirmDelete': 'Delete group "{group}"? Its servers move to the default group.', 'ds.groupsDeleted': 'Group deleted',
319
486
  'ds.theme.default': 'Deep Space', 'ds.theme.dark': 'Sunset', 'ds.theme.light': 'Elbphilharmonie', 'ds.theme.neutral': 'Prairie Tower',
320
487
  'ds.role.me': 'Me', 'ds.role.dsh': 'DSH', 'ds.toolDefault': 'tool',
488
+ 'ds.eventSystemReminder': 'System reminder',
321
489
  'ds.questionOptions': 'Options', 'ds.questionCustom': 'Custom answer',
322
490
  'ds.questionNeedAnswer': 'Choose an option or write a custom answer', 'ds.questionSubmitted': 'Answer submitted',
323
491
  'ds.questionFrom': 'From {server}',
492
+ 'ds.models': 'Models', 'ds.close': 'Close',
493
+ 'ds.presetsEmpty': 'No quick prompts yet', 'ds.presetsGuide': 'Go to Settings → General → Prompt presets to add one',
494
+ 'presets.title': 'Prompt presets', 'presets.desc': 'Common prompts, insert into the composer in one tap (max 20)', 'presets.manage': 'Manage',
495
+ 'presets.add': 'Add', 'presets.edit': 'Edit', 'presets.delete': 'Delete', 'presets.empty': 'No presets yet',
496
+ 'presets.menuTitle': 'Presets', 'presets.namePrompt': 'Preset name (≤20 chars):', 'presets.textPrompt': 'Preset content (≤2000 chars):',
497
+ 'presets.nameEmpty': 'Name cannot be empty', 'presets.nameTooLong': 'Name must be ≤20 characters', 'presets.textTooLong': 'Content must be ≤2000 characters', 'presets.limit': 'At most 20 presets', 'presets.added': 'Preset added',
498
+ 'presets.confirmDelete': 'Delete preset "{name}"?', 'presets.saved': 'Preset saved', 'presets.deleted': 'Preset deleted',
499
+ 'goal.title': 'Goal', 'goal.pause': 'Pause', 'goal.resume': 'Resume', 'goal.complete': 'Complete', 'goal.edit': 'Edit goal', 'goal.clear': 'Clear',
500
+ 'goal.none': 'This session has no goal', 'goal.confirmClear': 'Clear the current goal? (the session stays)', 'goal.confirmComplete': 'Mark the goal as completed?',
501
+ 'goal.actionFailed': 'Goal action failed', 'goal.actionSubmitted': 'Goal action submitted',
502
+ 'goal.cannotEmpty': 'Goal cannot be empty', 'goal.updateFailed': 'Update failed', 'goal.updated': 'Goal updated', 'goal.editPrompt': 'Edit goal:',
503
+ 'todos.title': 'Todos',
504
+ 'subagent.title': 'Subagents', 'subagent.diagnostic': 'Diagnostic', 'subagent.running': '· running', 'subagent.interrupt': 'Interrupt',
505
+ 'subagent.confirmInterrupt': 'Interrupt this subagent\'s current turn?', 'subagent.interruptFailed': 'Interrupt failed', 'subagent.interruptSubmitted': 'Interrupt requested',
506
+ 'models.loading': 'Loading models…', 'models.loadFailed': 'Failed to load models: {msg}', 'models.unavailable': 'unavailable', 'models.none': 'No models available',
507
+ 'models.switchFailed': 'Model switch failed', 'models.switched': 'Switched model: {model}',
508
+ 'models.effortFailed': 'Failed to switch reasoning effort', 'models.effortSwitched': 'Reasoning effort: {effort}',
509
+ 'menu.modelTitle': 'Model', 'menu.effortTitle': 'Reasoning effort',
324
510
  }
325
511
  }
326
512
  </script>