@foxden-app/foxclaw 0.5.60 → 0.5.61
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/.env.example +2 -2
- package/CHANGELOG.md +12 -0
- package/dist/config.js +1 -1
- package/dist/controller/controller.d.ts +1 -1
- package/dist/controller/controller.js +90 -26
- package/dist/i18n.d.ts +12 -0
- package/dist/i18n.js +12 -0
- package/package.json +1 -1
package/.env.example
CHANGED
|
@@ -38,9 +38,9 @@ TELEGRAM_PREVIEW_THROTTLE_MS=800
|
|
|
38
38
|
# Set to false if you prefer to keep "read files / edited files / ran command"
|
|
39
39
|
# detail cards in the chat history.
|
|
40
40
|
# TELEGRAM_DELETE_TOOL_DETAILS_AFTER_FINAL=true
|
|
41
|
-
# Delete time-sensitive interactive panels such as /auth and /threads after
|
|
41
|
+
# Delete time-sensitive interactive panels such as /auth, /setup, and /threads after 5 minutes.
|
|
42
42
|
# The timer restarts whenever the panel is refreshed. Set to 0 to disable.
|
|
43
|
-
# TELEGRAM_PANEL_TTL_MS=
|
|
43
|
+
# TELEGRAM_PANEL_TTL_MS=300000
|
|
44
44
|
THREAD_LIST_LIMIT=10
|
|
45
45
|
CODEX_CLI_BIN=/absolute/path/to/codex
|
|
46
46
|
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
All notable FoxClaw changes are listed here. Each release note is bilingual so GitHub Releases and the npm package are useful to both Chinese and English readers.
|
|
4
4
|
|
|
5
|
+
## 0.5.61 - 2026-06-21
|
|
6
|
+
|
|
7
|
+
### 中文
|
|
8
|
+
- 将 `/auth`、`/setup`、`/threads` 等交互面板的默认自动清理时间从 30 分钟改为 5 分钟,并把 `/where`、旧 model/access 设置面板和 `/config` 面板纳入同一类时效清理。
|
|
9
|
+
- `/config` 现在明确定位为 FoxClaw 自身设置面板,新增“最终回复后删除操作明细”开关;可通过按钮或 `/config delete_tool_details <on|off>` 修改,并写回 `TELEGRAM_DELETE_TOOL_DETAILS_AFTER_FINAL`。
|
|
10
|
+
- `/config` 展示当前 `TELEGRAM_DELETE_TOOL_DETAILS_AFTER_FINAL` 和 `TELEGRAM_PANEL_TTL_MS`,方便确认聊天清理策略是否生效。
|
|
11
|
+
|
|
12
|
+
### English
|
|
13
|
+
- Changed the default cleanup timeout for interactive panels such as `/auth`, `/setup`, and `/threads` from 30 minutes to 5 minutes, and applied the same stale-panel cleanup to `/where`, legacy model/access settings panels, and `/config`.
|
|
14
|
+
- `/config` is now the FoxClaw runtime settings panel and includes a "delete operation details after final reply" toggle. It can be changed via the button or `/config delete_tool_details <on|off>`, writing `TELEGRAM_DELETE_TOOL_DETAILS_AFTER_FINAL`.
|
|
15
|
+
- `/config` shows the current `TELEGRAM_DELETE_TOOL_DETAILS_AFTER_FINAL` and `TELEGRAM_PANEL_TTL_MS` values so cleanup behavior is visible.
|
|
16
|
+
|
|
5
17
|
## 0.5.60 - 2026-06-21
|
|
6
18
|
|
|
7
19
|
### 中文
|
package/dist/config.js
CHANGED
|
@@ -78,7 +78,7 @@ export function loadConfig() {
|
|
|
78
78
|
telegramPollIntervalMs: intEnv('TELEGRAM_POLL_INTERVAL_MS', 1200),
|
|
79
79
|
telegramPreviewThrottleMs: intEnv('TELEGRAM_PREVIEW_THROTTLE_MS', 800),
|
|
80
80
|
telegramDeleteToolDetailsAfterFinal: boolEnv('TELEGRAM_DELETE_TOOL_DETAILS_AFTER_FINAL', true),
|
|
81
|
-
telegramPanelTtlMs: intEnv('TELEGRAM_PANEL_TTL_MS',
|
|
81
|
+
telegramPanelTtlMs: intEnv('TELEGRAM_PANEL_TTL_MS', 5 * 60_000),
|
|
82
82
|
threadListLimit: intEnv('THREAD_LIST_LIMIT', 10),
|
|
83
83
|
statusPath: DEFAULT_STATUS_PATH,
|
|
84
84
|
logPath: DEFAULT_LOG_PATH,
|
|
@@ -352,7 +352,7 @@ export declare class BridgeSessionCore {
|
|
|
352
352
|
private handleFeaturesCommand;
|
|
353
353
|
private handleConfigCommand;
|
|
354
354
|
private handleConfigToggleCallback;
|
|
355
|
-
private
|
|
355
|
+
private setFoxClawBooleanConfig;
|
|
356
356
|
private formatConfigToggleUpdate;
|
|
357
357
|
private handleRequirementsCommand;
|
|
358
358
|
private handleProviderCommand;
|
|
@@ -1088,9 +1088,9 @@ export class BridgeSessionCore {
|
|
|
1088
1088
|
await this.handleSetupCallback(event, setupMatch[1], setupMatch[2], locale);
|
|
1089
1089
|
return;
|
|
1090
1090
|
}
|
|
1091
|
-
const configMatch = /^config:auth_auto_delete:(on|off)$/.exec(event.data);
|
|
1091
|
+
const configMatch = /^config:(auth_auto_delete|delete_tool_details):(on|off)$/.exec(event.data);
|
|
1092
1092
|
if (configMatch) {
|
|
1093
|
-
await this.handleConfigToggleCallback(event, configMatch[1] === 'on', locale);
|
|
1093
|
+
await this.handleConfigToggleCallback(event, configMatch[1], configMatch[2] === 'on', locale);
|
|
1094
1094
|
return;
|
|
1095
1095
|
}
|
|
1096
1096
|
const voiceMatch = /^voice:([a-f0-9]+)$/.exec(event.data);
|
|
@@ -5583,46 +5583,73 @@ export class BridgeSessionCore {
|
|
|
5583
5583
|
await this.sendMessage(scopeId, t(locale, 'config_auth_auto_delete_usage'));
|
|
5584
5584
|
return;
|
|
5585
5585
|
}
|
|
5586
|
-
const update = await this.
|
|
5586
|
+
const update = await this.setFoxClawBooleanConfig('auth_auto_delete', enabled);
|
|
5587
5587
|
const binding = this.store.getBinding(scopeId);
|
|
5588
5588
|
const result = await this.app.readConfig(binding?.cwd ?? this.config.defaultCwd, true);
|
|
5589
|
-
await this.sendMessage(scopeId, `${this.formatConfigToggleUpdate(locale, update)}\n\n${formatConfigMessage(locale, result, this.config, this.store.getCodexAuthPoolStats())}`, configKeyboard(locale, this.config));
|
|
5589
|
+
const sentMessageId = await this.sendMessage(scopeId, `${this.formatConfigToggleUpdate(locale, update)}\n\n${formatConfigMessage(locale, result, this.config, this.store.getCodexAuthPoolStats())}`, configKeyboard(locale, this.config));
|
|
5590
|
+
this.scheduleStalePanelDeletion(scopeId, sentMessageId);
|
|
5591
|
+
return;
|
|
5592
|
+
}
|
|
5593
|
+
if (['delete_tool_details', 'delete-tool-details', 'tool_details', 'tool-details'].includes(action)) {
|
|
5594
|
+
const enabled = parseConfigBooleanArg(args[1]);
|
|
5595
|
+
if (enabled === null) {
|
|
5596
|
+
await this.sendMessage(scopeId, t(locale, 'config_delete_tool_details_usage'));
|
|
5597
|
+
return;
|
|
5598
|
+
}
|
|
5599
|
+
const update = await this.setFoxClawBooleanConfig('delete_tool_details', enabled);
|
|
5600
|
+
const binding = this.store.getBinding(scopeId);
|
|
5601
|
+
const result = await this.app.readConfig(binding?.cwd ?? this.config.defaultCwd, true);
|
|
5602
|
+
const sentMessageId = await this.sendMessage(scopeId, `${this.formatConfigToggleUpdate(locale, update)}\n\n${formatConfigMessage(locale, result, this.config, this.store.getCodexAuthPoolStats())}`, configKeyboard(locale, this.config));
|
|
5603
|
+
this.scheduleStalePanelDeletion(scopeId, sentMessageId);
|
|
5590
5604
|
return;
|
|
5591
5605
|
}
|
|
5592
5606
|
const binding = this.store.getBinding(scopeId);
|
|
5593
5607
|
const result = await this.app.readConfig(binding?.cwd ?? this.config.defaultCwd, true);
|
|
5594
|
-
await this.sendMessage(scopeId, formatConfigMessage(locale, result, this.config, this.store.getCodexAuthPoolStats()), configKeyboard(locale, this.config));
|
|
5608
|
+
const sentMessageId = await this.sendMessage(scopeId, formatConfigMessage(locale, result, this.config, this.store.getCodexAuthPoolStats()), configKeyboard(locale, this.config));
|
|
5609
|
+
this.scheduleStalePanelDeletion(scopeId, sentMessageId);
|
|
5595
5610
|
}
|
|
5596
|
-
async handleConfigToggleCallback(event, enabled, locale) {
|
|
5597
|
-
const update = await this.
|
|
5611
|
+
async handleConfigToggleCallback(event, key, enabled, locale) {
|
|
5612
|
+
const update = await this.setFoxClawBooleanConfig(key, enabled);
|
|
5598
5613
|
await this.messaging.answerCallback(event.callbackQueryId, t(locale, 'decision_recorded'));
|
|
5599
5614
|
const binding = this.store.getBinding(event.scopeId);
|
|
5600
5615
|
const result = await this.app.readConfig(binding?.cwd ?? this.config.defaultCwd, true);
|
|
5601
5616
|
const message = `${this.formatConfigToggleUpdate(locale, update)}\n\n${formatConfigMessage(locale, result, this.config, this.store.getCodexAuthPoolStats())}`;
|
|
5602
5617
|
if (event.messageId !== null) {
|
|
5603
5618
|
await this.editMessage(event.scopeId, event.messageId, message, configKeyboard(locale, this.config));
|
|
5619
|
+
this.scheduleStalePanelDeletion(event.scopeId, event.messageId);
|
|
5604
5620
|
}
|
|
5605
5621
|
else {
|
|
5606
|
-
await this.sendMessage(event.scopeId, message, configKeyboard(locale, this.config));
|
|
5622
|
+
const sentMessageId = await this.sendMessage(event.scopeId, message, configKeyboard(locale, this.config));
|
|
5623
|
+
this.scheduleStalePanelDeletion(event.scopeId, sentMessageId);
|
|
5607
5624
|
}
|
|
5608
5625
|
}
|
|
5609
|
-
async
|
|
5610
|
-
|
|
5626
|
+
async setFoxClawBooleanConfig(key, enabled) {
|
|
5627
|
+
const envKey = key === 'auth_auto_delete'
|
|
5628
|
+
? 'AUTH_AUTO_DELETE_NEEDS_REPAIR'
|
|
5629
|
+
: 'TELEGRAM_DELETE_TOOL_DETAILS_AFTER_FINAL';
|
|
5630
|
+
if (key === 'auth_auto_delete') {
|
|
5631
|
+
this.config.authAutoDeleteNeedsRepair = enabled;
|
|
5632
|
+
}
|
|
5633
|
+
else {
|
|
5634
|
+
this.config.telegramDeleteToolDetailsAfterFinal = enabled;
|
|
5635
|
+
}
|
|
5611
5636
|
const envPath = this.config.envPath;
|
|
5612
5637
|
if (!envPath) {
|
|
5613
|
-
return { enabled, envPath: null, envUpdated: false, envError: null };
|
|
5638
|
+
return { key, enabled, envKey, envPath: null, envUpdated: false, envError: null };
|
|
5614
5639
|
}
|
|
5615
5640
|
try {
|
|
5616
|
-
await writeEnvBoolean(envPath,
|
|
5617
|
-
return { enabled, envPath, envUpdated: true, envError: null };
|
|
5641
|
+
await writeEnvBoolean(envPath, envKey, enabled);
|
|
5642
|
+
return { key, enabled, envKey, envPath, envUpdated: true, envError: null };
|
|
5618
5643
|
}
|
|
5619
5644
|
catch (error) {
|
|
5620
|
-
this.logger.warn('config.env_update_failed', { key:
|
|
5621
|
-
return { enabled, envPath, envUpdated: false, envError: formatUserError(error) };
|
|
5645
|
+
this.logger.warn('config.env_update_failed', { key: envKey, envPath, error: toErrorMeta(error) });
|
|
5646
|
+
return { key, enabled, envKey, envPath, envUpdated: false, envError: formatUserError(error) };
|
|
5622
5647
|
}
|
|
5623
5648
|
}
|
|
5624
5649
|
formatConfigToggleUpdate(locale, update) {
|
|
5625
|
-
const lines = [t(locale, '
|
|
5650
|
+
const lines = [t(locale, update.key === 'auth_auto_delete' ? 'config_auth_auto_delete_updated' : 'config_delete_tool_details_updated', {
|
|
5651
|
+
value: t(locale, update.enabled ? 'yes' : 'no'),
|
|
5652
|
+
})];
|
|
5626
5653
|
if (update.envError) {
|
|
5627
5654
|
lines.push(t(locale, 'config_env_update_failed', { value: update.envPath ?? t(locale, 'unknown'), error: update.envError }));
|
|
5628
5655
|
}
|
|
@@ -7207,9 +7234,11 @@ export class BridgeSessionCore {
|
|
|
7207
7234
|
}
|
|
7208
7235
|
if (messageId !== undefined) {
|
|
7209
7236
|
await this.editMessage(scopeId, messageId, text, whereKeyboard(locale, false));
|
|
7237
|
+
this.scheduleStalePanelDeletion(scopeId, messageId);
|
|
7210
7238
|
return;
|
|
7211
7239
|
}
|
|
7212
|
-
await this.sendMessage(scopeId, text, whereKeyboard(locale, false));
|
|
7240
|
+
const sentMessageId = await this.sendMessage(scopeId, text, whereKeyboard(locale, false));
|
|
7241
|
+
this.scheduleStalePanelDeletion(scopeId, sentMessageId);
|
|
7213
7242
|
return;
|
|
7214
7243
|
}
|
|
7215
7244
|
const readyBinding = await this.ensureThreadReady(scopeId, binding);
|
|
@@ -7221,9 +7250,11 @@ export class BridgeSessionCore {
|
|
|
7221
7250
|
}
|
|
7222
7251
|
if (messageId !== undefined) {
|
|
7223
7252
|
await this.editMessage(scopeId, messageId, text, whereKeyboard(locale, false));
|
|
7253
|
+
this.scheduleStalePanelDeletion(scopeId, messageId);
|
|
7224
7254
|
return;
|
|
7225
7255
|
}
|
|
7226
|
-
await this.sendMessage(scopeId, text, whereKeyboard(locale, false));
|
|
7256
|
+
const sentMessageId = await this.sendMessage(scopeId, text, whereKeyboard(locale, false));
|
|
7257
|
+
this.scheduleStalePanelDeletion(scopeId, sentMessageId);
|
|
7227
7258
|
return;
|
|
7228
7259
|
}
|
|
7229
7260
|
let text = formatWhereMessage(locale, thread, settings, this.config.defaultCwd, access, fastStatus);
|
|
@@ -7232,9 +7263,11 @@ export class BridgeSessionCore {
|
|
|
7232
7263
|
}
|
|
7233
7264
|
if (messageId !== undefined) {
|
|
7234
7265
|
await this.editMessage(scopeId, messageId, text, whereKeyboard(locale, true));
|
|
7266
|
+
this.scheduleStalePanelDeletion(scopeId, messageId);
|
|
7235
7267
|
return;
|
|
7236
7268
|
}
|
|
7237
|
-
await this.sendMessage(scopeId, text, whereKeyboard(locale, true));
|
|
7269
|
+
const sentMessageId = await this.sendMessage(scopeId, text, whereKeyboard(locale, true));
|
|
7270
|
+
this.scheduleStalePanelDeletion(scopeId, sentMessageId);
|
|
7238
7271
|
}
|
|
7239
7272
|
async handleThreadListNavigationCallback(event, action, locale) {
|
|
7240
7273
|
const state = this.threadListPresentationState.get(event.scopeId) ?? {
|
|
@@ -7342,9 +7375,11 @@ export class BridgeSessionCore {
|
|
|
7342
7375
|
const keyboard = buildModelSettingsKeyboard(locale, models, settings);
|
|
7343
7376
|
if (messageId !== undefined) {
|
|
7344
7377
|
await this.editHtmlMessage(scopeId, messageId, text, keyboard);
|
|
7378
|
+
this.scheduleStalePanelDeletion(scopeId, messageId);
|
|
7345
7379
|
return;
|
|
7346
7380
|
}
|
|
7347
|
-
await this.sendHtmlMessage(scopeId, text, keyboard);
|
|
7381
|
+
const sentMessageId = await this.sendHtmlMessage(scopeId, text, keyboard);
|
|
7382
|
+
this.scheduleStalePanelDeletion(scopeId, sentMessageId);
|
|
7348
7383
|
}
|
|
7349
7384
|
async showSetupPanel(scopeId, focus, messageId, locale = this.localeForChat(scopeId)) {
|
|
7350
7385
|
const models = await this.app.listModels();
|
|
@@ -7375,9 +7410,11 @@ export class BridgeSessionCore {
|
|
|
7375
7410
|
const keyboard = buildAccessSettingsKeyboard(locale, access);
|
|
7376
7411
|
if (messageId !== undefined) {
|
|
7377
7412
|
await this.editHtmlMessage(scopeId, messageId, text, keyboard);
|
|
7413
|
+
this.scheduleStalePanelDeletion(scopeId, messageId);
|
|
7378
7414
|
return;
|
|
7379
7415
|
}
|
|
7380
|
-
await this.sendHtmlMessage(scopeId, text, keyboard);
|
|
7416
|
+
const sentMessageId = await this.sendHtmlMessage(scopeId, text, keyboard);
|
|
7417
|
+
this.scheduleStalePanelDeletion(scopeId, sentMessageId);
|
|
7381
7418
|
}
|
|
7382
7419
|
async handleSettingsCallback(event, kind, rawValue, locale) {
|
|
7383
7420
|
await this.handleSetupCallback(event, kind, rawValue, locale);
|
|
@@ -9359,6 +9396,12 @@ function formatConfigMessage(locale, result, appConfig, authPoolStats) {
|
|
|
9359
9396
|
value: t(locale, appConfig.authAutoDeleteNeedsRepair ? 'yes' : 'no'),
|
|
9360
9397
|
}));
|
|
9361
9398
|
lines.push(`AUTH_AUTO_DELETE_NEEDS_REPAIR=${appConfig.authAutoDeleteNeedsRepair ? 'true' : 'false'}`);
|
|
9399
|
+
lines.push(t(locale, 'config_delete_tool_details_after_final', {
|
|
9400
|
+
value: t(locale, appConfig.telegramDeleteToolDetailsAfterFinal ? 'yes' : 'no'),
|
|
9401
|
+
}));
|
|
9402
|
+
lines.push(`TELEGRAM_DELETE_TOOL_DETAILS_AFTER_FINAL=${appConfig.telegramDeleteToolDetailsAfterFinal ? 'true' : 'false'}`);
|
|
9403
|
+
lines.push(t(locale, 'config_panel_ttl', { value: formatDurationMs(locale, appConfig.telegramPanelTtlMs) }));
|
|
9404
|
+
lines.push(`TELEGRAM_PANEL_TTL_MS=${appConfig.telegramPanelTtlMs}`);
|
|
9362
9405
|
lines.push(formatCodexAuthPoolSummary(locale, authPoolStats));
|
|
9363
9406
|
return lines.join('\n');
|
|
9364
9407
|
}
|
|
@@ -9373,11 +9416,32 @@ function isInvalidCodexAuthDeleteReason(reason) {
|
|
|
9373
9416
|
return reason === AUTH_DELETE_REASON_NEEDS_REPAIR;
|
|
9374
9417
|
}
|
|
9375
9418
|
function configKeyboard(locale, appConfig) {
|
|
9376
|
-
const
|
|
9377
|
-
|
|
9378
|
-
|
|
9379
|
-
|
|
9380
|
-
|
|
9419
|
+
const authAutoDeleteEnabled = appConfig.authAutoDeleteNeedsRepair;
|
|
9420
|
+
const deleteToolDetailsEnabled = appConfig.telegramDeleteToolDetailsAfterFinal;
|
|
9421
|
+
return [
|
|
9422
|
+
[{
|
|
9423
|
+
text: t(locale, authAutoDeleteEnabled ? 'button_config_auth_auto_delete_off' : 'button_config_auth_auto_delete_on'),
|
|
9424
|
+
callback_data: `config:auth_auto_delete:${authAutoDeleteEnabled ? 'off' : 'on'}`,
|
|
9425
|
+
}],
|
|
9426
|
+
[{
|
|
9427
|
+
text: t(locale, deleteToolDetailsEnabled ? 'button_config_delete_tool_details_off' : 'button_config_delete_tool_details_on'),
|
|
9428
|
+
callback_data: `config:delete_tool_details:${deleteToolDetailsEnabled ? 'off' : 'on'}`,
|
|
9429
|
+
}],
|
|
9430
|
+
];
|
|
9431
|
+
}
|
|
9432
|
+
function formatDurationMs(locale, value) {
|
|
9433
|
+
if (value <= 0) {
|
|
9434
|
+
return locale === 'zh' ? '关闭' : 'disabled';
|
|
9435
|
+
}
|
|
9436
|
+
if (value % 60_000 === 0) {
|
|
9437
|
+
const minutes = value / 60_000;
|
|
9438
|
+
return locale === 'zh' ? `${minutes} 分钟` : `${minutes} min`;
|
|
9439
|
+
}
|
|
9440
|
+
if (value % 1000 === 0) {
|
|
9441
|
+
const seconds = value / 1000;
|
|
9442
|
+
return locale === 'zh' ? `${seconds} 秒` : `${seconds} sec`;
|
|
9443
|
+
}
|
|
9444
|
+
return `${value}ms`;
|
|
9381
9445
|
}
|
|
9382
9446
|
function parseConfigBooleanArg(value) {
|
|
9383
9447
|
const normalized = value?.trim().toLowerCase();
|
package/dist/i18n.d.ts
CHANGED
|
@@ -282,6 +282,8 @@ declare const MESSAGES: {
|
|
|
282
282
|
readonly button_auth_filter_attention: "Attention";
|
|
283
283
|
readonly button_config_auth_auto_delete_on: "Auto-delete on";
|
|
284
284
|
readonly button_config_auth_auto_delete_off: "Auto-delete off";
|
|
285
|
+
readonly button_config_delete_tool_details_on: "Delete tool details";
|
|
286
|
+
readonly button_config_delete_tool_details_off: "Keep tool details";
|
|
285
287
|
readonly another_turn_running: "Another turn is already running. Use /interrupt, /takeover, /queue, or wait.";
|
|
286
288
|
readonly working: "Working...";
|
|
287
289
|
readonly usage_open: "Usage: /open <n>";
|
|
@@ -617,6 +619,10 @@ declare const MESSAGES: {
|
|
|
617
619
|
readonly config_auth_auto_delete_needs_repair: "Auto-delete unrecoverable auth candidates: {value}";
|
|
618
620
|
readonly config_auth_auto_delete_updated: "Auto-delete unrecoverable auth candidates set to: {value}";
|
|
619
621
|
readonly config_auth_auto_delete_usage: "Usage: /config auth_auto_delete <on|off>";
|
|
622
|
+
readonly config_delete_tool_details_after_final: "Delete operation details after final reply: {value}";
|
|
623
|
+
readonly config_delete_tool_details_updated: "Delete operation details after final reply set to: {value}";
|
|
624
|
+
readonly config_delete_tool_details_usage: "Usage: /config delete_tool_details <on|off>";
|
|
625
|
+
readonly config_panel_ttl: "Interactive panel cleanup: {value}";
|
|
620
626
|
readonly config_env_update_failed: "Runtime setting changed, but updating {value} failed: {error}";
|
|
621
627
|
readonly requirements_title: "Config requirements";
|
|
622
628
|
readonly requirements_empty: "No config requirements are configured.";
|
|
@@ -982,6 +988,8 @@ declare const MESSAGES: {
|
|
|
982
988
|
readonly button_auth_filter_attention: "需关注";
|
|
983
989
|
readonly button_config_auth_auto_delete_on: "开启自动剔除";
|
|
984
990
|
readonly button_config_auth_auto_delete_off: "关闭自动剔除";
|
|
991
|
+
readonly button_config_delete_tool_details_on: "删除操作明细";
|
|
992
|
+
readonly button_config_delete_tool_details_off: "保留操作明细";
|
|
985
993
|
readonly another_turn_running: "已经有一个回复在进行中。请先等待,或使用 /interrupt、/takeover、/queue。";
|
|
986
994
|
readonly working: "处理中...";
|
|
987
995
|
readonly usage_open: "用法:/open <编号>";
|
|
@@ -1317,6 +1325,10 @@ declare const MESSAGES: {
|
|
|
1317
1325
|
readonly config_auth_auto_delete_needs_repair: "自动剔除无法恢复的 auth 候选:{value}";
|
|
1318
1326
|
readonly config_auth_auto_delete_updated: "自动剔除无法恢复的 auth 候选已设置为:{value}";
|
|
1319
1327
|
readonly config_auth_auto_delete_usage: "用法:/config auth_auto_delete <on|off>";
|
|
1328
|
+
readonly config_delete_tool_details_after_final: "最终回复后删除操作明细:{value}";
|
|
1329
|
+
readonly config_delete_tool_details_updated: "最终回复后删除操作明细已设置为:{value}";
|
|
1330
|
+
readonly config_delete_tool_details_usage: "用法:/config delete_tool_details <on|off>";
|
|
1331
|
+
readonly config_panel_ttl: "交互面板自动清理:{value}";
|
|
1320
1332
|
readonly config_env_update_failed: "运行时设置已改变,但更新 {value} 失败:{error}";
|
|
1321
1333
|
readonly requirements_title: "配置要求";
|
|
1322
1334
|
readonly requirements_empty: "当前没有配置要求。";
|
package/dist/i18n.js
CHANGED
|
@@ -280,6 +280,8 @@ const MESSAGES = {
|
|
|
280
280
|
button_auth_filter_attention: 'Attention',
|
|
281
281
|
button_config_auth_auto_delete_on: 'Auto-delete on',
|
|
282
282
|
button_config_auth_auto_delete_off: 'Auto-delete off',
|
|
283
|
+
button_config_delete_tool_details_on: 'Delete tool details',
|
|
284
|
+
button_config_delete_tool_details_off: 'Keep tool details',
|
|
283
285
|
another_turn_running: 'Another turn is already running. Use /interrupt, /takeover, /queue, or wait.',
|
|
284
286
|
working: 'Working...',
|
|
285
287
|
usage_open: 'Usage: /open <n>',
|
|
@@ -615,6 +617,10 @@ const MESSAGES = {
|
|
|
615
617
|
config_auth_auto_delete_needs_repair: 'Auto-delete unrecoverable auth candidates: {value}',
|
|
616
618
|
config_auth_auto_delete_updated: 'Auto-delete unrecoverable auth candidates set to: {value}',
|
|
617
619
|
config_auth_auto_delete_usage: 'Usage: /config auth_auto_delete <on|off>',
|
|
620
|
+
config_delete_tool_details_after_final: 'Delete operation details after final reply: {value}',
|
|
621
|
+
config_delete_tool_details_updated: 'Delete operation details after final reply set to: {value}',
|
|
622
|
+
config_delete_tool_details_usage: 'Usage: /config delete_tool_details <on|off>',
|
|
623
|
+
config_panel_ttl: 'Interactive panel cleanup: {value}',
|
|
618
624
|
config_env_update_failed: 'Runtime setting changed, but updating {value} failed: {error}',
|
|
619
625
|
requirements_title: 'Config requirements',
|
|
620
626
|
requirements_empty: 'No config requirements are configured.',
|
|
@@ -980,6 +986,8 @@ const MESSAGES = {
|
|
|
980
986
|
button_auth_filter_attention: '需关注',
|
|
981
987
|
button_config_auth_auto_delete_on: '开启自动剔除',
|
|
982
988
|
button_config_auth_auto_delete_off: '关闭自动剔除',
|
|
989
|
+
button_config_delete_tool_details_on: '删除操作明细',
|
|
990
|
+
button_config_delete_tool_details_off: '保留操作明细',
|
|
983
991
|
another_turn_running: '已经有一个回复在进行中。请先等待,或使用 /interrupt、/takeover、/queue。',
|
|
984
992
|
working: '处理中...',
|
|
985
993
|
usage_open: '用法:/open <编号>',
|
|
@@ -1315,6 +1323,10 @@ const MESSAGES = {
|
|
|
1315
1323
|
config_auth_auto_delete_needs_repair: '自动剔除无法恢复的 auth 候选:{value}',
|
|
1316
1324
|
config_auth_auto_delete_updated: '自动剔除无法恢复的 auth 候选已设置为:{value}',
|
|
1317
1325
|
config_auth_auto_delete_usage: '用法:/config auth_auto_delete <on|off>',
|
|
1326
|
+
config_delete_tool_details_after_final: '最终回复后删除操作明细:{value}',
|
|
1327
|
+
config_delete_tool_details_updated: '最终回复后删除操作明细已设置为:{value}',
|
|
1328
|
+
config_delete_tool_details_usage: '用法:/config delete_tool_details <on|off>',
|
|
1329
|
+
config_panel_ttl: '交互面板自动清理:{value}',
|
|
1318
1330
|
config_env_update_failed: '运行时设置已改变,但更新 {value} 失败:{error}',
|
|
1319
1331
|
requirements_title: '配置要求',
|
|
1320
1332
|
requirements_empty: '当前没有配置要求。',
|