@foxden-app/foxclaw 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -38,7 +38,7 @@ export function buildThreadsKeyboard(locale, threads) {
38
38
  return threads.flatMap((thread, index) => {
39
39
  const ordinal = typeof thread.index === 'number' ? thread.index : index + 1;
40
40
  const openRow = [{
41
- text: `${ordinal}. ${truncate(compactWhitespace(thread.name || thread.preview || t(locale, 'empty')), 28)}`,
41
+ text: `🧵 ${ordinal}. ${truncate(compactWhitespace(thread.name || thread.preview || t(locale, 'empty')), 28)}`,
42
42
  callback_data: `thread:open:${thread.threadId}`,
43
43
  }];
44
44
  const actionRow = thread.archived
@@ -110,15 +110,15 @@ export function buildAccessSettingsKeyboard(locale, access) {
110
110
  const currentPreset = access.preset;
111
111
  const buttons = [
112
112
  {
113
- text: `${currentPreset === 'read-only' ? '• ' : ''}${t(locale, 'access_preset_read_only')}`,
113
+ text: selectedButtonText(currentPreset === 'read-only', accessPresetButtonLabel(locale, 'read-only')),
114
114
  callback_data: 'settings:access:read-only',
115
115
  },
116
116
  {
117
- text: `${currentPreset === 'default' ? '• ' : ''}${t(locale, 'access_preset_default')}`,
117
+ text: selectedButtonText(currentPreset === 'default', accessPresetButtonLabel(locale, 'default')),
118
118
  callback_data: 'settings:access:default',
119
119
  },
120
120
  {
121
- text: `${currentPreset === 'full-access' ? '• ' : ''}${t(locale, 'access_preset_full_access')}`,
121
+ text: selectedButtonText(currentPreset === 'full-access', accessPresetButtonLabel(locale, 'full-access')),
122
122
  callback_data: 'settings:access:full-access',
123
123
  },
124
124
  ];
@@ -256,7 +256,7 @@ export function buildSetupPanelKeyboard(locale, ctx) {
256
256
  callback_data: 'setup:model:default',
257
257
  },
258
258
  ...ctx.models.map((model) => ({
259
- text: `${currentModel === model.model ? '• ' : ''}${truncate(model.model, 14)}`,
259
+ text: selectedButtonText(currentModel === model.model, `🤖 ${truncate(model.model, 14)}`),
260
260
  callback_data: `setup:model:${encodeURIComponent(model.model)}`,
261
261
  })),
262
262
  ], 2));
@@ -266,7 +266,7 @@ export function buildSetupPanelKeyboard(locale, ctx) {
266
266
  callback_data: 'setup:effort:default',
267
267
  },
268
268
  ...efforts.map((effort) => ({
269
- text: `${ctx.settings?.reasoningEffort === effort ? '• ' : ''}${effort}`,
269
+ text: selectedButtonText(ctx.settings?.reasoningEffort === effort, `🧠 ${effort}`),
270
270
  callback_data: `setup:effort:${effort}`,
271
271
  })),
272
272
  ], 3));
@@ -287,35 +287,35 @@ export function buildSetupPanelKeyboard(locale, ctx) {
287
287
  }
288
288
  rows.push([
289
289
  {
290
- text: `${ctx.access.preset === 'read-only' ? '• ' : ''}${t(locale, 'access_preset_read_only')}`,
290
+ text: selectedButtonText(ctx.access.preset === 'read-only', accessPresetButtonLabel(locale, 'read-only')),
291
291
  callback_data: 'setup:access:read-only',
292
292
  },
293
293
  {
294
- text: `${ctx.access.preset === 'default' ? '• ' : ''}${t(locale, 'access_preset_default')}`,
294
+ text: selectedButtonText(ctx.access.preset === 'default', accessPresetButtonLabel(locale, 'default')),
295
295
  callback_data: 'setup:access:default',
296
296
  },
297
297
  {
298
- text: `${ctx.access.preset === 'full-access' ? '• ' : ''}${t(locale, 'access_preset_full_access')}`,
298
+ text: selectedButtonText(ctx.access.preset === 'full-access', accessPresetButtonLabel(locale, 'full-access')),
299
299
  callback_data: 'setup:access:full-access',
300
300
  },
301
301
  ]);
302
302
  rows.push([
303
303
  {
304
- text: `${currentMode === 'default' ? '• ' : ''}${t(locale, 'collaboration_mode_default')}`,
304
+ text: selectedButtonText(currentMode === 'default', `🤖 ${t(locale, 'collaboration_mode_default')}`),
305
305
  callback_data: 'setup:mode:default',
306
306
  },
307
307
  {
308
- text: `${currentMode === 'plan' ? '• ' : ''}${t(locale, 'collaboration_mode_plan')}`,
308
+ text: selectedButtonText(currentMode === 'plan', `📝 ${t(locale, 'collaboration_mode_plan')}`),
309
309
  callback_data: 'setup:mode:plan',
310
310
  },
311
311
  ]);
312
312
  rows.push([
313
313
  {
314
- text: `${activeTurnMessageMode === 'steer' ? '• ' : ''}${t(locale, 'active_turn_message_mode_steer')}`,
314
+ text: selectedButtonText(activeTurnMessageMode === 'steer', `🎯 ${t(locale, 'active_turn_message_mode_steer')}`),
315
315
  callback_data: 'setup:active:steer',
316
316
  },
317
317
  {
318
- text: `${activeTurnMessageMode === 'queue' ? '• ' : ''}${t(locale, 'active_turn_message_mode_queue')}`,
318
+ text: selectedButtonText(activeTurnMessageMode === 'queue', `📥 ${t(locale, 'active_turn_message_mode_queue')}`),
319
319
  callback_data: 'setup:active:queue',
320
320
  },
321
321
  ]);
@@ -382,6 +382,16 @@ function formatFastSetupLabel(locale, supported, enabled, tierName) {
382
382
  function resolveCollaborationMode(mode) {
383
383
  return mode === 'plan' ? 'plan' : 'default';
384
384
  }
385
+ function selectedButtonText(selected, label) {
386
+ return `${selected ? '• ' : ''}${label}`;
387
+ }
388
+ function accessPresetButtonLabel(locale, preset) {
389
+ if (preset === 'read-only')
390
+ return `👁️ ${formatAccessPresetLabel(locale, preset)}`;
391
+ if (preset === 'full-access')
392
+ return `🔓 ${formatAccessPresetLabel(locale, preset)}`;
393
+ return `🛡️ ${formatAccessPresetLabel(locale, preset)}`;
394
+ }
385
395
  export function formatModelSettingsMessage(locale, models, settings) {
386
396
  const selectedModel = resolveCurrentModel(models, settings?.model ?? null);
387
397
  const selectedModelLabel = settings?.model ?? t(locale, 'server_default');
@@ -417,7 +427,7 @@ export function buildModelSettingsKeyboard(locale, models, settings) {
417
427
  callback_data: 'settings:model:default',
418
428
  },
419
429
  ...models.map((model) => ({
420
- text: `${currentModel === model.model ? '• ' : ''}${truncate(model.model, 14)}`,
430
+ text: selectedButtonText(currentModel === model.model, `🤖 ${truncate(model.model, 14)}`),
421
431
  callback_data: `settings:model:${encodeURIComponent(model.model)}`,
422
432
  })),
423
433
  ];
@@ -427,7 +437,7 @@ export function buildModelSettingsKeyboard(locale, models, settings) {
427
437
  callback_data: 'settings:effort:default',
428
438
  },
429
439
  ...efforts.map((effort) => ({
430
- text: `${settings?.reasoningEffort === effort ? '• ' : ''}${effort}`,
440
+ text: selectedButtonText(settings?.reasoningEffort === effort, `🧠 ${effort}`),
431
441
  callback_data: `settings:effort:${effort}`,
432
442
  })),
433
443
  ];
package/dist/i18n.d.ts CHANGED
@@ -148,10 +148,10 @@ declare const MESSAGES: {
148
148
  readonly auth_add_cancelled: "New auth login cancelled. Restored previous auth.";
149
149
  readonly auth_add_reverted: "Restored previous auth.";
150
150
  readonly auth_add_missing_file: "Login completed, but the new auth file was not created: {value}";
151
- readonly button_login_device: "Login device";
152
- readonly button_auth_reload: "Reload auth";
153
- readonly button_auth_enable: "Enable";
154
- readonly button_auth_disable: "Disable";
151
+ readonly button_login_device: "🔑 Login";
152
+ readonly button_auth_reload: "🔄 Reload auth";
153
+ readonly button_auth_enable: "Enable";
154
+ readonly button_auth_disable: "⏸️ Disable";
155
155
  readonly another_turn_running: "Another turn is already running. Use /interrupt, /takeover, /queue, or wait.";
156
156
  readonly working: "Working...";
157
157
  readonly usage_open: "Usage: /open <n>";
@@ -295,16 +295,16 @@ declare const MESSAGES: {
295
295
  readonly approval_decision_accept: "allow";
296
296
  readonly approval_decision_session: "allow for session";
297
297
  readonly approval_decision_deny: "deny";
298
- readonly button_allow: "Allow";
299
- readonly button_allow_session: "Allow Session";
300
- readonly button_deny: "Deny";
301
- readonly button_interrupt: "Interrupt";
302
- readonly button_permissions: "Access";
303
- readonly button_models: "Models";
304
- readonly button_threads: "Threads";
305
- readonly button_reveal: "Reveal";
306
- readonly button_auto: "Auto";
307
- readonly button_new_thread: "New";
298
+ readonly button_allow: "Allow";
299
+ readonly button_allow_session: " Session";
300
+ readonly button_deny: "🚫 Deny";
301
+ readonly button_interrupt: "⏹️ Interrupt";
302
+ readonly button_permissions: "🛡️ Access";
303
+ readonly button_models: "🤖 Models";
304
+ readonly button_threads: "🧵 Threads";
305
+ readonly button_reveal: "↗️ Reveal";
306
+ readonly button_auto: "⚙️ Auto";
307
+ readonly button_new_thread: "New";
308
308
  readonly threads_no_matches: "<b>No threads matched</b>\n<code>{searchTerm}</code>";
309
309
  readonly threads_no_recent: "<b>No recent threads.</b>";
310
310
  readonly threads_recent_title: "<b>Recent threads</b>";
@@ -313,15 +313,15 @@ declare const MESSAGES: {
313
313
  readonly threads_filter: "Filter: <code>{searchTerm}</code>";
314
314
  readonly threads_range: "Showing {start}-{end}";
315
315
  readonly threads_filter_cleared_short: "Filter cleared";
316
- readonly button_prev_page: "Prev";
317
- readonly button_next_page: "Next";
318
- readonly button_clear_filter: "Clear filter";
319
- readonly button_recent_threads: "Recent";
320
- readonly button_archived_threads: "Archived";
321
- readonly button_thread_rename: "Rename";
322
- readonly button_thread_watch: "Watch";
323
- readonly button_thread_archive: "Archive/Delete";
324
- readonly button_thread_unarchive: "Unarchive";
316
+ readonly button_prev_page: "⬅️ Prev";
317
+ readonly button_next_page: "➡️ Next";
318
+ readonly button_clear_filter: "🧹 Clear";
319
+ readonly button_recent_threads: "🕘 Recent";
320
+ readonly button_archived_threads: "🗄️ Archived";
321
+ readonly button_thread_rename: "✏️ Rename";
322
+ readonly button_thread_watch: "👀 Watch";
323
+ readonly button_thread_archive: "🗑️ Archive/Delete";
324
+ readonly button_thread_unarchive: "♻️ Unarchive";
325
325
  readonly threads_current: "Current: <b>{title}</b>";
326
326
  readonly where_no_thread_bound: "No thread is currently bound.";
327
327
  readonly where_send_message_or_new: "Send a message or use /new.";
@@ -370,8 +370,8 @@ declare const MESSAGES: {
370
370
  readonly active_turn_message_mode_steer: "Steer current turn";
371
371
  readonly active_turn_message_mode_queue: "Queue next turn";
372
372
  readonly button_fast_on: "⚡ Fast: on";
373
- readonly button_fast_off: "Fast: off";
374
- readonly button_fast_unsupported: "Fast unsupported";
373
+ readonly button_fast_off: "Fast: off";
374
+ readonly button_fast_unsupported: "Fast unsupported";
375
375
  readonly access_preset_read_only: "Read-only";
376
376
  readonly access_preset_default: "Default";
377
377
  readonly access_preset_full_access: "Full access";
@@ -506,10 +506,10 @@ declare const MESSAGES: {
506
506
  readonly permission_read_paths: "Read paths: {value}";
507
507
  readonly permission_write_paths: "Write paths: {value}";
508
508
  readonly permission_entries: "File entries: {value}";
509
- readonly button_accept: "Accept";
510
- readonly button_decline: "Decline";
511
- readonly button_cancel: "Cancel";
512
- readonly button_create_dir: "Create";
509
+ readonly button_accept: "Accept";
510
+ readonly button_decline: "🚫 Decline";
511
+ readonly button_cancel: "✖️ Cancel";
512
+ readonly button_create_dir: "📁 Create";
513
513
  readonly thread_name_updated: "Thread renamed: {name}";
514
514
  readonly thread_archived_notification: "Thread archived: {threadId}";
515
515
  readonly thread_unarchived_notification: "Thread unarchived: {threadId}";
@@ -696,10 +696,10 @@ declare const MESSAGES: {
696
696
  readonly auth_add_cancelled: "新 auth 登录已取消,已恢复之前的 auth。";
697
697
  readonly auth_add_reverted: "已恢复之前的 auth。";
698
698
  readonly auth_add_missing_file: "登录已完成,但没有创建新的 auth 文件:{value}";
699
- readonly button_login_device: "设备登录";
700
- readonly button_auth_reload: "重载 auth";
701
- readonly button_auth_enable: "启用";
702
- readonly button_auth_disable: "禁用";
699
+ readonly button_login_device: "🔑 设备登录";
700
+ readonly button_auth_reload: "🔄 重载 auth";
701
+ readonly button_auth_enable: "启用";
702
+ readonly button_auth_disable: "⏸️ 禁用";
703
703
  readonly another_turn_running: "已经有一个回复在进行中。请先等待,或使用 /interrupt、/takeover、/queue。";
704
704
  readonly working: "处理中...";
705
705
  readonly usage_open: "用法:/open <编号>";
@@ -843,16 +843,16 @@ declare const MESSAGES: {
843
843
  readonly approval_decision_accept: "允许";
844
844
  readonly approval_decision_session: "本会话内允许";
845
845
  readonly approval_decision_deny: "拒绝";
846
- readonly button_allow: "允许";
847
- readonly button_allow_session: "本会话允许";
848
- readonly button_deny: "拒绝";
849
- readonly button_interrupt: "中断";
850
- readonly button_permissions: "权限";
851
- readonly button_models: "模型";
852
- readonly button_threads: "线程";
853
- readonly button_reveal: "打开";
854
- readonly button_auto: "自动";
855
- readonly button_new_thread: "新建";
846
+ readonly button_allow: "允许";
847
+ readonly button_allow_session: "✅ 本会话";
848
+ readonly button_deny: "🚫 拒绝";
849
+ readonly button_interrupt: "⏹️ 中断";
850
+ readonly button_permissions: "🛡️ 权限";
851
+ readonly button_models: "🤖 模型";
852
+ readonly button_threads: "🧵 线程";
853
+ readonly button_reveal: "↗️ 打开";
854
+ readonly button_auto: "⚙️ 自动";
855
+ readonly button_new_thread: "新建";
856
856
  readonly threads_no_matches: "<b>没有匹配的线程</b>\n<code>{searchTerm}</code>";
857
857
  readonly threads_no_recent: "<b>暂无最近线程。</b>";
858
858
  readonly threads_recent_title: "<b>最近线程</b>";
@@ -861,15 +861,15 @@ declare const MESSAGES: {
861
861
  readonly threads_filter: "筛选:<code>{searchTerm}</code>";
862
862
  readonly threads_range: "显示第 {start}-{end} 条";
863
863
  readonly threads_filter_cleared_short: "已清除筛选";
864
- readonly button_prev_page: "上一页";
865
- readonly button_next_page: "下一页";
866
- readonly button_clear_filter: "清除筛选";
867
- readonly button_recent_threads: "最近线程";
868
- readonly button_archived_threads: "已归档";
869
- readonly button_thread_rename: "重命名";
870
- readonly button_thread_watch: "观察";
871
- readonly button_thread_archive: "归档/删除";
872
- readonly button_thread_unarchive: "取消归档";
864
+ readonly button_prev_page: "⬅️ 上一页";
865
+ readonly button_next_page: "➡️ 下一页";
866
+ readonly button_clear_filter: "🧹 清除";
867
+ readonly button_recent_threads: "🕘 最近线程";
868
+ readonly button_archived_threads: "🗄️ 已归档";
869
+ readonly button_thread_rename: "✏️ 重命名";
870
+ readonly button_thread_watch: "👀 观察";
871
+ readonly button_thread_archive: "🗑️ 归档/删除";
872
+ readonly button_thread_unarchive: "♻️ 取消归档";
873
873
  readonly threads_current: "当前:<b>{title}</b>";
874
874
  readonly where_no_thread_bound: "当前没有绑定线程。";
875
875
  readonly where_send_message_or_new: "直接发一条消息,或者使用 /new。";
@@ -918,8 +918,8 @@ declare const MESSAGES: {
918
918
  readonly active_turn_message_mode_steer: "引导当前回复";
919
919
  readonly active_turn_message_mode_queue: "排队到下一轮";
920
920
  readonly button_fast_on: "⚡ Fast:开";
921
- readonly button_fast_off: "Fast:关";
922
- readonly button_fast_unsupported: "Fast 不支持";
921
+ readonly button_fast_off: "Fast:关";
922
+ readonly button_fast_unsupported: "Fast 不支持";
923
923
  readonly access_preset_read_only: "只读";
924
924
  readonly access_preset_default: "默认";
925
925
  readonly access_preset_full_access: "完全访问";
@@ -1054,10 +1054,10 @@ declare const MESSAGES: {
1054
1054
  readonly permission_read_paths: "可读路径:{value}";
1055
1055
  readonly permission_write_paths: "可写路径:{value}";
1056
1056
  readonly permission_entries: "文件条目:{value}";
1057
- readonly button_accept: "接受";
1058
- readonly button_decline: "拒绝";
1059
- readonly button_cancel: "取消";
1060
- readonly button_create_dir: "新建";
1057
+ readonly button_accept: "接受";
1058
+ readonly button_decline: "🚫 拒绝";
1059
+ readonly button_cancel: "✖️ 取消";
1060
+ readonly button_create_dir: "📁 新建";
1061
1061
  readonly thread_name_updated: "线程已重命名:{name}";
1062
1062
  readonly thread_archived_notification: "线程已归档:{threadId}";
1063
1063
  readonly thread_unarchived_notification: "线程已取消归档:{threadId}";
package/dist/i18n.js CHANGED
@@ -146,10 +146,10 @@ const MESSAGES = {
146
146
  auth_add_cancelled: 'New auth login cancelled. Restored previous auth.',
147
147
  auth_add_reverted: 'Restored previous auth.',
148
148
  auth_add_missing_file: 'Login completed, but the new auth file was not created: {value}',
149
- button_login_device: 'Login device',
150
- button_auth_reload: 'Reload auth',
151
- button_auth_enable: 'Enable',
152
- button_auth_disable: 'Disable',
149
+ button_login_device: '🔑 Login',
150
+ button_auth_reload: '🔄 Reload auth',
151
+ button_auth_enable: 'Enable',
152
+ button_auth_disable: '⏸️ Disable',
153
153
  another_turn_running: 'Another turn is already running. Use /interrupt, /takeover, /queue, or wait.',
154
154
  working: 'Working...',
155
155
  usage_open: 'Usage: /open <n>',
@@ -293,16 +293,16 @@ const MESSAGES = {
293
293
  approval_decision_accept: 'allow',
294
294
  approval_decision_session: 'allow for session',
295
295
  approval_decision_deny: 'deny',
296
- button_allow: 'Allow',
297
- button_allow_session: 'Allow Session',
298
- button_deny: 'Deny',
299
- button_interrupt: 'Interrupt',
300
- button_permissions: 'Access',
301
- button_models: 'Models',
302
- button_threads: 'Threads',
303
- button_reveal: 'Reveal',
304
- button_auto: 'Auto',
305
- button_new_thread: 'New',
296
+ button_allow: 'Allow',
297
+ button_allow_session: ' Session',
298
+ button_deny: '🚫 Deny',
299
+ button_interrupt: '⏹️ Interrupt',
300
+ button_permissions: '🛡️ Access',
301
+ button_models: '🤖 Models',
302
+ button_threads: '🧵 Threads',
303
+ button_reveal: '↗️ Reveal',
304
+ button_auto: '⚙️ Auto',
305
+ button_new_thread: 'New',
306
306
  threads_no_matches: '<b>No threads matched</b>\n<code>{searchTerm}</code>',
307
307
  threads_no_recent: '<b>No recent threads.</b>',
308
308
  threads_recent_title: '<b>Recent threads</b>',
@@ -311,15 +311,15 @@ const MESSAGES = {
311
311
  threads_filter: 'Filter: <code>{searchTerm}</code>',
312
312
  threads_range: 'Showing {start}-{end}',
313
313
  threads_filter_cleared_short: 'Filter cleared',
314
- button_prev_page: 'Prev',
315
- button_next_page: 'Next',
316
- button_clear_filter: 'Clear filter',
317
- button_recent_threads: 'Recent',
318
- button_archived_threads: 'Archived',
319
- button_thread_rename: 'Rename',
320
- button_thread_watch: 'Watch',
321
- button_thread_archive: 'Archive/Delete',
322
- button_thread_unarchive: 'Unarchive',
314
+ button_prev_page: '⬅️ Prev',
315
+ button_next_page: '➡️ Next',
316
+ button_clear_filter: '🧹 Clear',
317
+ button_recent_threads: '🕘 Recent',
318
+ button_archived_threads: '🗄️ Archived',
319
+ button_thread_rename: '✏️ Rename',
320
+ button_thread_watch: '👀 Watch',
321
+ button_thread_archive: '🗑️ Archive/Delete',
322
+ button_thread_unarchive: '♻️ Unarchive',
323
323
  threads_current: 'Current: <b>{title}</b>',
324
324
  where_no_thread_bound: 'No thread is currently bound.',
325
325
  where_send_message_or_new: 'Send a message or use /new.',
@@ -368,8 +368,8 @@ const MESSAGES = {
368
368
  active_turn_message_mode_steer: 'Steer current turn',
369
369
  active_turn_message_mode_queue: 'Queue next turn',
370
370
  button_fast_on: '⚡ Fast: on',
371
- button_fast_off: 'Fast: off',
372
- button_fast_unsupported: 'Fast unsupported',
371
+ button_fast_off: 'Fast: off',
372
+ button_fast_unsupported: 'Fast unsupported',
373
373
  access_preset_read_only: 'Read-only',
374
374
  access_preset_default: 'Default',
375
375
  access_preset_full_access: 'Full access',
@@ -504,10 +504,10 @@ const MESSAGES = {
504
504
  permission_read_paths: 'Read paths: {value}',
505
505
  permission_write_paths: 'Write paths: {value}',
506
506
  permission_entries: 'File entries: {value}',
507
- button_accept: 'Accept',
508
- button_decline: 'Decline',
509
- button_cancel: 'Cancel',
510
- button_create_dir: 'Create',
507
+ button_accept: 'Accept',
508
+ button_decline: '🚫 Decline',
509
+ button_cancel: '✖️ Cancel',
510
+ button_create_dir: '📁 Create',
511
511
  thread_name_updated: 'Thread renamed: {name}',
512
512
  thread_archived_notification: 'Thread archived: {threadId}',
513
513
  thread_unarchived_notification: 'Thread unarchived: {threadId}',
@@ -694,10 +694,10 @@ const MESSAGES = {
694
694
  auth_add_cancelled: '新 auth 登录已取消,已恢复之前的 auth。',
695
695
  auth_add_reverted: '已恢复之前的 auth。',
696
696
  auth_add_missing_file: '登录已完成,但没有创建新的 auth 文件:{value}',
697
- button_login_device: '设备登录',
698
- button_auth_reload: '重载 auth',
699
- button_auth_enable: '启用',
700
- button_auth_disable: '禁用',
697
+ button_login_device: '🔑 设备登录',
698
+ button_auth_reload: '🔄 重载 auth',
699
+ button_auth_enable: '启用',
700
+ button_auth_disable: '⏸️ 禁用',
701
701
  another_turn_running: '已经有一个回复在进行中。请先等待,或使用 /interrupt、/takeover、/queue。',
702
702
  working: '处理中...',
703
703
  usage_open: '用法:/open <编号>',
@@ -841,16 +841,16 @@ const MESSAGES = {
841
841
  approval_decision_accept: '允许',
842
842
  approval_decision_session: '本会话内允许',
843
843
  approval_decision_deny: '拒绝',
844
- button_allow: '允许',
845
- button_allow_session: '本会话允许',
846
- button_deny: '拒绝',
847
- button_interrupt: '中断',
848
- button_permissions: '权限',
849
- button_models: '模型',
850
- button_threads: '线程',
851
- button_reveal: '打开',
852
- button_auto: '自动',
853
- button_new_thread: '新建',
844
+ button_allow: '允许',
845
+ button_allow_session: '✅ 本会话',
846
+ button_deny: '🚫 拒绝',
847
+ button_interrupt: '⏹️ 中断',
848
+ button_permissions: '🛡️ 权限',
849
+ button_models: '🤖 模型',
850
+ button_threads: '🧵 线程',
851
+ button_reveal: '↗️ 打开',
852
+ button_auto: '⚙️ 自动',
853
+ button_new_thread: '新建',
854
854
  threads_no_matches: '<b>没有匹配的线程</b>\n<code>{searchTerm}</code>',
855
855
  threads_no_recent: '<b>暂无最近线程。</b>',
856
856
  threads_recent_title: '<b>最近线程</b>',
@@ -859,15 +859,15 @@ const MESSAGES = {
859
859
  threads_filter: '筛选:<code>{searchTerm}</code>',
860
860
  threads_range: '显示第 {start}-{end} 条',
861
861
  threads_filter_cleared_short: '已清除筛选',
862
- button_prev_page: '上一页',
863
- button_next_page: '下一页',
864
- button_clear_filter: '清除筛选',
865
- button_recent_threads: '最近线程',
866
- button_archived_threads: '已归档',
867
- button_thread_rename: '重命名',
868
- button_thread_watch: '观察',
869
- button_thread_archive: '归档/删除',
870
- button_thread_unarchive: '取消归档',
862
+ button_prev_page: '⬅️ 上一页',
863
+ button_next_page: '➡️ 下一页',
864
+ button_clear_filter: '🧹 清除',
865
+ button_recent_threads: '🕘 最近线程',
866
+ button_archived_threads: '🗄️ 已归档',
867
+ button_thread_rename: '✏️ 重命名',
868
+ button_thread_watch: '👀 观察',
869
+ button_thread_archive: '🗑️ 归档/删除',
870
+ button_thread_unarchive: '♻️ 取消归档',
871
871
  threads_current: '当前:<b>{title}</b>',
872
872
  where_no_thread_bound: '当前没有绑定线程。',
873
873
  where_send_message_or_new: '直接发一条消息,或者使用 /new。',
@@ -916,8 +916,8 @@ const MESSAGES = {
916
916
  active_turn_message_mode_steer: '引导当前回复',
917
917
  active_turn_message_mode_queue: '排队到下一轮',
918
918
  button_fast_on: '⚡ Fast:开',
919
- button_fast_off: 'Fast:关',
920
- button_fast_unsupported: 'Fast 不支持',
919
+ button_fast_off: 'Fast:关',
920
+ button_fast_unsupported: 'Fast 不支持',
921
921
  access_preset_read_only: '只读',
922
922
  access_preset_default: '默认',
923
923
  access_preset_full_access: '完全访问',
@@ -1052,10 +1052,10 @@ const MESSAGES = {
1052
1052
  permission_read_paths: '可读路径:{value}',
1053
1053
  permission_write_paths: '可写路径:{value}',
1054
1054
  permission_entries: '文件条目:{value}',
1055
- button_accept: '接受',
1056
- button_decline: '拒绝',
1057
- button_cancel: '取消',
1058
- button_create_dir: '新建',
1055
+ button_accept: '接受',
1056
+ button_decline: '🚫 拒绝',
1057
+ button_cancel: '✖️ 取消',
1058
+ button_create_dir: '📁 新建',
1059
1059
  thread_name_updated: '线程已重命名:{name}',
1060
1060
  thread_archived_notification: '线程已归档:{threadId}',
1061
1061
  thread_unarchived_notification: '线程已取消归档:{threadId}',