@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.
- package/README.md +299 -297
- package/README_EN.md +299 -297
- package/dist/controller/controller.js +1 -1
- package/dist/controller/presentation.js +25 -15
- package/dist/i18n.d.ts +58 -58
- package/dist/i18n.js +58 -58
- package/docs/agent-assisted-install.md +84 -84
- package/docs/install-for-beginners.md +282 -282
- package/docs/troubleshooting.md +236 -236
- package/docs/zh/agent-assisted-install.md +83 -0
- package/docs/zh/foxclaw-skill.md +24 -0
- package/docs/zh/install-for-beginners.md +295 -0
- package/docs/zh/troubleshooting.md +222 -0
- package/package.json +2 -1
- package/scripts/doctor.sh +0 -0
- package/scripts/launchd/install.sh +0 -0
- package/scripts/status.sh +4 -4
- package/scripts/systemd/install.sh +4 -4
- package/scripts/systemd/uninstall.sh +4 -4
|
@@ -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:
|
|
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:
|
|
113
|
+
text: selectedButtonText(currentPreset === 'read-only', accessPresetButtonLabel(locale, 'read-only')),
|
|
114
114
|
callback_data: 'settings:access:read-only',
|
|
115
115
|
},
|
|
116
116
|
{
|
|
117
|
-
text:
|
|
117
|
+
text: selectedButtonText(currentPreset === 'default', accessPresetButtonLabel(locale, 'default')),
|
|
118
118
|
callback_data: 'settings:access:default',
|
|
119
119
|
},
|
|
120
120
|
{
|
|
121
|
-
text:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
294
|
+
text: selectedButtonText(ctx.access.preset === 'default', accessPresetButtonLabel(locale, 'default')),
|
|
295
295
|
callback_data: 'setup:access:default',
|
|
296
296
|
},
|
|
297
297
|
{
|
|
298
|
-
text:
|
|
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:
|
|
304
|
+
text: selectedButtonText(currentMode === 'default', `🤖 ${t(locale, 'collaboration_mode_default')}`),
|
|
305
305
|
callback_data: 'setup:mode:default',
|
|
306
306
|
},
|
|
307
307
|
{
|
|
308
|
-
text:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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: "
|
|
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
|
|
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
|
|
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: '
|
|
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
|
|
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}',
|