charness 3.2.0 → 3.3.1
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 +3 -6
- package/DEVELOPMENT.md +15 -0
- package/README.md +111 -38
- package/SETUP.md +121 -16
- package/dist/adapters/adapterEventRouting.d.ts +2 -1
- package/dist/adapters/adapterEventRouting.d.ts.map +1 -1
- package/dist/adapters/adapterEventRouting.js +3 -0
- package/dist/adapters/adapterEventRouting.js.map +1 -1
- package/dist/adapters/adapterNames.d.ts +13 -0
- package/dist/adapters/adapterNames.d.ts.map +1 -1
- package/dist/adapters/adapterNames.js +16 -0
- package/dist/adapters/adapterNames.js.map +1 -1
- package/dist/adapters/backendUnavailableError.d.ts +11 -0
- package/dist/adapters/backendUnavailableError.d.ts.map +1 -0
- package/dist/adapters/backendUnavailableError.js +19 -0
- package/dist/adapters/backendUnavailableError.js.map +1 -0
- package/dist/adapters/claudeCliAdapter.d.ts +29 -6
- package/dist/adapters/claudeCliAdapter.d.ts.map +1 -1
- package/dist/adapters/claudeCliAdapter.js +70 -16
- package/dist/adapters/claudeCliAdapter.js.map +1 -1
- package/dist/adapters/claudeJsonStreamAdapter.d.ts +36 -3
- package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
- package/dist/adapters/claudeJsonStreamAdapter.js +93 -30
- package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
- package/dist/adapters/createAdapter.d.ts +3 -14
- package/dist/adapters/createAdapter.d.ts.map +1 -1
- package/dist/adapters/createAdapter.js +9 -19
- package/dist/adapters/createAdapter.js.map +1 -1
- package/dist/adapters/openCodeAdapter.d.ts +140 -12
- package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/openCodeAdapter.js +385 -119
- package/dist/adapters/openCodeAdapter.js.map +1 -1
- package/dist/apiErrorRetry.d.ts +70 -6
- package/dist/apiErrorRetry.d.ts.map +1 -1
- package/dist/apiErrorRetry.js +312 -34
- package/dist/apiErrorRetry.js.map +1 -1
- package/dist/apiRetryKick.d.ts +26 -1
- package/dist/apiRetryKick.d.ts.map +1 -1
- package/dist/apiRetryKick.js +41 -2
- package/dist/apiRetryKick.js.map +1 -1
- package/dist/bot.d.ts +2 -1
- package/dist/bot.d.ts.map +1 -1
- package/dist/bot.js +736 -184
- package/dist/bot.js.map +1 -1
- package/dist/cli/claudeProfiles.d.ts +1 -1
- package/dist/cli/claudeProfiles.js +1 -1
- package/dist/cli/hot.d.ts +7 -1
- package/dist/cli/hot.d.ts.map +1 -1
- package/dist/cli/hot.js +29 -3
- package/dist/cli/hot.js.map +1 -1
- package/dist/configDirFile.d.ts +73 -0
- package/dist/configDirFile.d.ts.map +1 -0
- package/dist/configDirFile.js +216 -0
- package/dist/configDirFile.js.map +1 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +2 -2
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/autoContinueLimits.js +4 -4
- package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -1
- package/dist/connectors/telegram/commands/backendSwitch.d.ts +25 -0
- package/dist/connectors/telegram/commands/backendSwitch.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/backendSwitch.js +104 -0
- package/dist/connectors/telegram/commands/backendSwitch.js.map +1 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts +12 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/callbackMessage.js +24 -0
- package/dist/connectors/telegram/commands/callbackMessage.js.map +1 -1
- package/dist/connectors/telegram/commands/callbackToast.d.ts +36 -0
- package/dist/connectors/telegram/commands/callbackToast.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/callbackToast.js +83 -0
- package/dist/connectors/telegram/commands/callbackToast.js.map +1 -0
- package/dist/connectors/telegram/commands/claudeAccounts.d.ts +18 -0
- package/dist/connectors/telegram/commands/claudeAccounts.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/claudeAccounts.js +220 -66
- package/dist/connectors/telegram/commands/claudeAccounts.js.map +1 -1
- package/dist/connectors/telegram/commands/displayModes.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/displayModes.js +4 -2
- package/dist/connectors/telegram/commands/displayModes.js.map +1 -1
- package/dist/connectors/telegram/commands/fallbackChain.d.ts +5 -8
- package/dist/connectors/telegram/commands/fallbackChain.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/fallbackChain.js +183 -193
- package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -1
- package/dist/connectors/telegram/commands/limitsBoard.d.ts +40 -0
- package/dist/connectors/telegram/commands/limitsBoard.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/limitsBoard.js +281 -0
- package/dist/connectors/telegram/commands/limitsBoard.js.map +1 -0
- package/dist/connectors/telegram/commands/modelPage.d.ts +130 -0
- package/dist/connectors/telegram/commands/modelPage.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/modelPage.js +120 -0
- package/dist/connectors/telegram/commands/modelPage.js.map +1 -0
- package/dist/connectors/telegram/commands/modelProviders.d.ts +9 -1
- package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/modelProviders.js +203 -111
- package/dist/connectors/telegram/commands/modelProviders.js.map +1 -1
- package/dist/connectors/telegram/commands/stt.d.ts +32 -0
- package/dist/connectors/telegram/commands/stt.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/stt.js +460 -0
- package/dist/connectors/telegram/commands/stt.js.map +1 -0
- package/dist/effortLevels.d.ts +57 -7
- package/dist/effortLevels.d.ts.map +1 -1
- package/dist/effortLevels.js +65 -9
- package/dist/effortLevels.js.map +1 -1
- package/dist/i18n/de.d.ts.map +1 -1
- package/dist/i18n/de.js +160 -17
- package/dist/i18n/de.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +160 -17
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +160 -17
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/fr.d.ts.map +1 -1
- package/dist/i18n/fr.js +160 -17
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/hi.d.ts.map +1 -1
- package/dist/i18n/hi.js +160 -17
- package/dist/i18n/hi.js.map +1 -1
- package/dist/i18n/ja.d.ts.map +1 -1
- package/dist/i18n/ja.js +160 -17
- package/dist/i18n/ja.js.map +1 -1
- package/dist/i18n/ka.d.ts.map +1 -1
- package/dist/i18n/ka.js +160 -17
- package/dist/i18n/ka.js.map +1 -1
- package/dist/i18n/pt.d.ts.map +1 -1
- package/dist/i18n/pt.js +160 -17
- package/dist/i18n/pt.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +160 -17
- package/dist/i18n/ru.js.map +1 -1
- package/dist/i18n/uk.d.ts.map +1 -1
- package/dist/i18n/uk.js +160 -17
- package/dist/i18n/uk.js.map +1 -1
- package/dist/i18n/uz.d.ts.map +1 -1
- package/dist/i18n/uz.js +160 -17
- package/dist/i18n/uz.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +160 -17
- package/dist/i18n/zh.js.map +1 -1
- package/dist/installManager.d.ts +20 -4
- package/dist/installManager.d.ts.map +1 -1
- package/dist/installManager.js +82 -14
- package/dist/installManager.js.map +1 -1
- package/dist/instanceSettings.d.ts +52 -0
- package/dist/instanceSettings.d.ts.map +1 -0
- package/dist/instanceSettings.js +136 -0
- package/dist/instanceSettings.js.map +1 -0
- package/dist/pinnedStatus.d.ts +7 -1
- package/dist/pinnedStatus.d.ts.map +1 -1
- package/dist/pinnedStatus.js +1 -1
- package/dist/pinnedStatus.js.map +1 -1
- package/dist/requests/requestLedger.d.ts +8 -0
- package/dist/requests/requestLedger.d.ts.map +1 -1
- package/dist/requests/requestLedger.js +19 -1
- package/dist/requests/requestLedger.js.map +1 -1
- package/dist/scheduler/mcpSurface.js +4 -4
- package/dist/scheduler/mcpSurface.js.map +1 -1
- package/dist/shutdown.d.ts +14 -0
- package/dist/shutdown.d.ts.map +1 -1
- package/dist/shutdown.js +16 -0
- package/dist/shutdown.js.map +1 -1
- package/dist/state.d.ts +54 -2
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +62 -1
- package/dist/state.js.map +1 -1
- package/dist/stt/sttAutoInstall.d.ts +39 -0
- package/dist/stt/sttAutoInstall.d.ts.map +1 -0
- package/dist/stt/sttAutoInstall.js +158 -0
- package/dist/stt/sttAutoInstall.js.map +1 -0
- package/dist/stt/sttChildEnv.d.ts +11 -0
- package/dist/stt/sttChildEnv.d.ts.map +1 -0
- package/dist/stt/sttChildEnv.js +30 -0
- package/dist/stt/sttChildEnv.js.map +1 -0
- package/dist/stt/sttConfigEdit.d.ts +71 -0
- package/dist/stt/sttConfigEdit.d.ts.map +1 -0
- package/dist/stt/sttConfigEdit.js +144 -0
- package/dist/stt/sttConfigEdit.js.map +1 -0
- package/dist/stt/sttInstall.d.ts +147 -0
- package/dist/stt/sttInstall.d.ts.map +1 -0
- package/dist/stt/sttInstall.js +491 -0
- package/dist/stt/sttInstall.js.map +1 -0
- package/dist/stt/sttInstallEntry.d.ts +2 -0
- package/dist/stt/sttInstallEntry.d.ts.map +1 -0
- package/dist/stt/sttInstallEntry.js +31 -0
- package/dist/stt/sttInstallEntry.js.map +1 -0
- package/dist/stt/sttInstallReporter.d.ts +45 -0
- package/dist/stt/sttInstallReporter.d.ts.map +1 -0
- package/dist/stt/sttInstallReporter.js +57 -0
- package/dist/stt/sttInstallReporter.js.map +1 -0
- package/dist/stt/sttRuntime.d.ts +35 -0
- package/dist/stt/sttRuntime.d.ts.map +1 -0
- package/dist/stt/sttRuntime.js +73 -0
- package/dist/stt/sttRuntime.js.map +1 -0
- package/dist/stt/sttScreenPlan.d.ts +193 -0
- package/dist/stt/sttScreenPlan.d.ts.map +1 -0
- package/dist/stt/sttScreenPlan.js +541 -0
- package/dist/stt/sttScreenPlan.js.map +1 -0
- package/dist/stt/sttSettings.d.ts +201 -0
- package/dist/stt/sttSettings.d.ts.map +1 -0
- package/dist/stt/sttSettings.js +387 -0
- package/dist/stt/sttSettings.js.map +1 -0
- package/dist/stt/sttSidecarOwner.d.ts +115 -0
- package/dist/stt/sttSidecarOwner.d.ts.map +1 -0
- package/dist/stt/sttSidecarOwner.js +475 -0
- package/dist/stt/sttSidecarOwner.js.map +1 -0
- package/dist/stt/transcribeChain.d.ts +36 -0
- package/dist/stt/transcribeChain.d.ts.map +1 -0
- package/dist/stt/transcribeChain.js +42 -0
- package/dist/stt/transcribeChain.js.map +1 -0
- package/dist/types.d.ts +77 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/adapterSwitchSessionIds.d.ts +32 -0
- package/dist/utils/adapterSwitchSessionIds.d.ts.map +1 -0
- package/dist/utils/adapterSwitchSessionIds.js +44 -0
- package/dist/utils/adapterSwitchSessionIds.js.map +1 -0
- package/dist/utils/backendSwitchPlan.d.ts +63 -0
- package/dist/utils/backendSwitchPlan.d.ts.map +1 -0
- package/dist/utils/backendSwitchPlan.js +73 -0
- package/dist/utils/backendSwitchPlan.js.map +1 -0
- package/dist/utils/claudeAccountPickerPlan.d.ts +12 -1
- package/dist/utils/claudeAccountPickerPlan.d.ts.map +1 -1
- package/dist/utils/claudeAccountPickerPlan.js +20 -1
- package/dist/utils/claudeAccountPickerPlan.js.map +1 -1
- package/dist/utils/claudeTranscriptContent.d.ts +24 -0
- package/dist/utils/claudeTranscriptContent.d.ts.map +1 -0
- package/dist/utils/claudeTranscriptContent.js +107 -0
- package/dist/utils/claudeTranscriptContent.js.map +1 -0
- package/dist/utils/claudeUsage.d.ts +47 -8
- package/dist/utils/claudeUsage.d.ts.map +1 -1
- package/dist/utils/claudeUsage.js +76 -14
- package/dist/utils/claudeUsage.js.map +1 -1
- package/dist/utils/claudeUsageRefresher.d.ts +8 -1
- package/dist/utils/claudeUsageRefresher.d.ts.map +1 -1
- package/dist/utils/claudeUsageRefresher.js +9 -4
- package/dist/utils/claudeUsageRefresher.js.map +1 -1
- package/dist/utils/effortPickerPlan.d.ts +54 -0
- package/dist/utils/effortPickerPlan.d.ts.map +1 -0
- package/dist/utils/effortPickerPlan.js +56 -0
- package/dist/utils/effortPickerPlan.js.map +1 -0
- package/dist/utils/ensureSessionPlan.d.ts +20 -4
- package/dist/utils/ensureSessionPlan.d.ts.map +1 -1
- package/dist/utils/ensureSessionPlan.js +17 -4
- package/dist/utils/ensureSessionPlan.js.map +1 -1
- package/dist/utils/fallbackBridge.d.ts +6 -2
- package/dist/utils/fallbackBridge.d.ts.map +1 -1
- package/dist/utils/fallbackBridge.js +10 -3
- package/dist/utils/fallbackBridge.js.map +1 -1
- package/dist/utils/fallbackChain.d.ts +36 -0
- package/dist/utils/fallbackChain.d.ts.map +1 -1
- package/dist/utils/fallbackChain.js +65 -1
- package/dist/utils/fallbackChain.js.map +1 -1
- package/dist/utils/fallbackSwitchNotice.d.ts +41 -0
- package/dist/utils/fallbackSwitchNotice.d.ts.map +1 -0
- package/dist/utils/fallbackSwitchNotice.js +75 -0
- package/dist/utils/fallbackSwitchNotice.js.map +1 -0
- package/dist/utils/fileSendService.d.ts +33 -10
- package/dist/utils/fileSendService.d.ts.map +1 -1
- package/dist/utils/fileSendService.js +78 -27
- package/dist/utils/fileSendService.js.map +1 -1
- package/dist/utils/jsonStreamHost.d.ts +39 -0
- package/dist/utils/jsonStreamHost.d.ts.map +1 -1
- package/dist/utils/jsonStreamHost.js +60 -1
- package/dist/utils/jsonStreamHost.js.map +1 -1
- package/dist/utils/limitEpisodeRecovery.d.ts +16 -2
- package/dist/utils/limitEpisodeRecovery.d.ts.map +1 -1
- package/dist/utils/limitEpisodeRecovery.js +44 -3
- package/dist/utils/limitEpisodeRecovery.js.map +1 -1
- package/dist/utils/limitSettings.d.ts +25 -0
- package/dist/utils/limitSettings.d.ts.map +1 -0
- package/dist/utils/limitSettings.js +31 -0
- package/dist/utils/limitSettings.js.map +1 -0
- package/dist/utils/limitsBoardPlan.d.ts +52 -0
- package/dist/utils/limitsBoardPlan.d.ts.map +1 -0
- package/dist/utils/limitsBoardPlan.js +93 -0
- package/dist/utils/limitsBoardPlan.js.map +1 -0
- package/dist/utils/openCodeUsage.d.ts +93 -0
- package/dist/utils/openCodeUsage.d.ts.map +1 -0
- package/dist/utils/openCodeUsage.js +248 -0
- package/dist/utils/openCodeUsage.js.map +1 -0
- package/dist/utils/operatorSwitchPlan.d.ts +61 -0
- package/dist/utils/operatorSwitchPlan.d.ts.map +1 -0
- package/dist/utils/operatorSwitchPlan.js +32 -0
- package/dist/utils/operatorSwitchPlan.js.map +1 -0
- package/dist/utils/promptDelivery.d.ts +40 -0
- package/dist/utils/promptDelivery.d.ts.map +1 -1
- package/dist/utils/promptDelivery.js +31 -0
- package/dist/utils/promptDelivery.js.map +1 -1
- package/dist/utils/recvPreviewRedaction.d.ts +14 -4
- package/dist/utils/recvPreviewRedaction.d.ts.map +1 -1
- package/dist/utils/recvPreviewRedaction.js +19 -7
- package/dist/utils/recvPreviewRedaction.js.map +1 -1
- package/dist/utils/startupReadiness.d.ts +3 -3
- package/dist/utils/startupReadiness.d.ts.map +1 -1
- package/dist/utils/startupReadiness.js +2 -2
- package/dist/utils/startupReadiness.js.map +1 -1
- package/dist/utils/threadStatusReport.d.ts +3 -1
- package/dist/utils/threadStatusReport.d.ts.map +1 -1
- package/dist/utils/threadStatusReport.js +4 -3
- package/dist/utils/threadStatusReport.js.map +1 -1
- package/dist/utils/timezone.d.ts +23 -0
- package/dist/utils/timezone.d.ts.map +1 -1
- package/dist/utils/timezone.js +38 -0
- package/dist/utils/timezone.js.map +1 -1
- package/dist/utils/transcribeAudio.d.ts +25 -12
- package/dist/utils/transcribeAudio.d.ts.map +1 -1
- package/dist/utils/transcribeAudio.js +39 -21
- package/dist/utils/transcribeAudio.js.map +1 -1
- package/dist/utils/usageRefreshBudget.d.ts +9 -0
- package/dist/utils/usageRefreshBudget.d.ts.map +1 -0
- package/dist/utils/usageRefreshBudget.js +27 -0
- package/dist/utils/usageRefreshBudget.js.map +1 -0
- package/examples/.env.example +7 -3
- package/examples/docker-compose.yml +9 -7
- package/package.json +5 -4
- package/stt/gigaam_sidecar.py +800 -0
package/dist/i18n/zh.js
CHANGED
|
@@ -45,6 +45,7 @@ exports.zhDict = {
|
|
|
45
45
|
'/list — 列出话题\n' +
|
|
46
46
|
'/status — 所有话题的状态\n' +
|
|
47
47
|
'/quitall — 退出所有运行中的代理\n' +
|
|
48
|
+
'/stt — 语音识别设置\n' +
|
|
48
49
|
'/whoami /version — 调试\n\n' +
|
|
49
50
|
'要与代理对话 — 打开一个主题话题。',
|
|
50
51
|
'help.thread_unbound': '*话题未绑定文件夹。*\n' +
|
|
@@ -60,8 +61,9 @@ exports.zhDict = {
|
|
|
60
61
|
'/quit /status /output — 控制\n' +
|
|
61
62
|
'/compact — 压缩代理上下文\n' +
|
|
62
63
|
'/compact_on_idle — 空闲后自动压缩(开关)\n' +
|
|
63
|
-
'/limits —
|
|
64
|
-
'/
|
|
64
|
+
'/limits — 各账号和提供方的用量;点按其中一个即可切换此话题\n' +
|
|
65
|
+
'/limits_autoswitch — 达到用量上限时自动切换模型(备用列表、切换、等待)\n' +
|
|
66
|
+
'/accounts — Claude 账号与 OpenCode 提供商(切换、添加、重新登录、移除、连接、断开)\n' +
|
|
65
67
|
'/clear — 删除话题消息\n' +
|
|
66
68
|
'/c /y /n /enter /up /down /tab /esc — TUI 按键(Claude)\n' +
|
|
67
69
|
'/bind — 管理绑定',
|
|
@@ -133,6 +135,7 @@ exports.zhDict = {
|
|
|
133
135
|
'status.thread_account_pending': '待切换:{account} — 在代理本轮结束或下次启动时生效',
|
|
134
136
|
'status.thread_model': '模型:{model}',
|
|
135
137
|
'status.thread_effort': '推理强度:{effort}',
|
|
138
|
+
'status.thread_effort_next_start': '推理强度:{effort}(下次启动起为 {next})',
|
|
136
139
|
'status.thread_started': '启动时间:{started}',
|
|
137
140
|
'status.thread_running': '运行中',
|
|
138
141
|
'status.thread_stopped': '已停止',
|
|
@@ -183,8 +186,15 @@ exports.zhDict = {
|
|
|
183
186
|
'login.cancelled': '✖ 登录已取消。消息重新发送给代理。',
|
|
184
187
|
'agent.workingIndicator': '{glyph} 工作中…',
|
|
185
188
|
'terminal.ready': '🖥 终端已就绪,在 `{subdir}`{argsSuffix}\n每条消息作为命令执行。/c — Ctrl+C,/up /down — 历史,/tab — 补全,/quit — 关闭。',
|
|
186
|
-
'effort.choose': '⚙️
|
|
187
|
-
'effort.
|
|
189
|
+
'effort.choose': '⚙️ 此话题的 effort:{current} — {source}',
|
|
190
|
+
'effort.chooseNextStart': '⚙️ 此话题的 effort:{current}(下次启动起为 {next})— {source}',
|
|
191
|
+
'effort.sourceGeneral': '同 General',
|
|
192
|
+
'effort.sourceTopic': '已为此话题设置',
|
|
193
|
+
'effort.sameAsGeneralButton': '同 General({level})',
|
|
194
|
+
'effort.sameAsGeneralConfirmation': '✅ 此话题的 effort 重新跟随 General:{level}',
|
|
195
|
+
'effort.general.choose': '⚙️ 所有话题的默认 effort:{current}\n没有自己 effort 的话题使用此级别;有自己 effort 的话题保持不变。',
|
|
196
|
+
'effort.general.setConfirmation': '✅ 所有话题的默认 effort:{level}\n有自己 effort 的话题保持不变。从每个话题下次会话启动或唤醒时生效 — 正在运行的会话不会重启。',
|
|
197
|
+
'effort.general.writeFailedNotice': '⚠️ 无法保存默认 effort:{path} 不可写({code})。请使其目录可写。',
|
|
188
198
|
'effort.set_success': '✅ Effort: {level}',
|
|
189
199
|
'effort.current_hint': '⚙️ Effort:{effort}\n运行 /effort 可更改',
|
|
190
200
|
'effort.invalid_level': '⚠️ 级别 `{level}` 无效。可用:{valid}。',
|
|
@@ -307,10 +317,10 @@ exports.zhDict = {
|
|
|
307
317
|
'autoContinueLimits.skipDone': '已跳过本次继续。',
|
|
308
318
|
'autoContinueLimits.skipExpired': '没有可跳过的内容——本次等待已结束。',
|
|
309
319
|
'autoContinueLimits.skippedNotice': '⏭ 已跳过:本次我不会自行继续。请告诉我何时继续——本话题的自动继续仍然开启。',
|
|
310
|
-
'autoContinueLimits.noticeHint': '
|
|
320
|
+
'autoContinueLimits.noticeHint': '跳过这一次继续:/limits · 关闭等待:/limits_autoswitch',
|
|
311
321
|
'autoContinueLimits.setThisTopic': '✅ 达到用量上限后自动继续:本话题 {state}。',
|
|
312
322
|
'autoContinueLimits.setGlobal': '✅ 达到用量上限后自动继续:所有话题 {state}(各话题的覆盖设置仍然有效)。',
|
|
313
|
-
'autoContinueLimits.limitReachedDisabled': '🚧 已达到用量上限。此话题已关闭等待重置,所以我会停下等待——请告诉我何时继续(/
|
|
323
|
+
'autoContinueLimits.limitReachedDisabled': '🚧 已达到用量上限。此话题已关闭等待重置,所以我会停下等待——请告诉我何时继续(/limits_autoswitch 可开启等待)。',
|
|
314
324
|
'connect.prompt_key': '🔑 在下一条消息中发送 `{provider}` 的 API key。我会从历史中删除包含 key 的消息。',
|
|
315
325
|
'connect.empty_key': '❌ API key 为空。请在下一条消息中发送 key。',
|
|
316
326
|
'connect.invalid_key': '❌ 这看起来不像 API key(包含空格或非拉丁字符)。请在下一条消息中仅发送 key,或重新运行 /connect。',
|
|
@@ -338,7 +348,107 @@ exports.zhDict = {
|
|
|
338
348
|
'Telegram 拒绝删除超过 48 小时的消息 — 其余留在历史中。',
|
|
339
349
|
'clearMessages.no_messages': '此话题中没有可删除的消息。',
|
|
340
350
|
'edited.hint': '✏️ 我不将编辑的消息视为新输入 — 请将更正作为单独消息发送。',
|
|
341
|
-
'voice.no_api_key': '
|
|
351
|
+
'voice.no_api_key': '语音需要语音识别引擎——打开 /stt 进行设置。',
|
|
352
|
+
'voice.local_installing': '语音识别仍在设置中——本地引擎正在安装。准备好后请重新发送语音。',
|
|
353
|
+
'voice.engines_unavailable': '语音已关闭:列表中的识别引擎目前都无法使用。打开 /stt 查看原因。',
|
|
354
|
+
'voice.config_invalid': '语音已关闭:设置文件 stt.json 无效。问题见机器人日志——请修正该文件或打开 /stt。',
|
|
355
|
+
'stt.install.header': '🖥 正在安装本地语音识别… ({elapsed})',
|
|
356
|
+
'stt.install.creatingEnvironment': '正在创建 Python 环境…',
|
|
357
|
+
'stt.install.installingPackages': '正在安装软件包…',
|
|
358
|
+
'stt.install.downloadingModel': '正在下载模型 {progress}…',
|
|
359
|
+
'stt.install.checking': '正在检查模型…',
|
|
360
|
+
'stt.install.done': '✅ 本地识别已就绪——下一条语音消息起即会启动。',
|
|
361
|
+
'stt.install.doneNotAdded': '✅ 本地识别已安装,但不在引擎列表中:列表已满({limit} 个引擎)。请先删除一个,再在设置中添加本地引擎。',
|
|
362
|
+
'stt.install.doneNotSaved': '✅ 本地识别已安装,但无法写入设置文件({path}),因此本地引擎还不在列表中。请让该文件夹可写,然后在设置中添加本地引擎。',
|
|
363
|
+
'stt.install.failed': '❌ 无法安装本地识别:{error}',
|
|
364
|
+
'stt.engine.gigaam': 'GigaAM(本地)',
|
|
365
|
+
'stt.engine.url': '自定义服务器',
|
|
366
|
+
'stt.screen.title': '🎙 语音识别',
|
|
367
|
+
'stt.screen.sourceFile': '设置:{path}',
|
|
368
|
+
'stt.screen.sourceMissing': '设置:尚无文件({path})——你在这里第一次更改时会创建。',
|
|
369
|
+
'stt.screen.sourceLastGood': '⚠️ {path} 无效,因此继续使用上一份有效设置:{error}',
|
|
370
|
+
'stt.screen.sourceInvalid': '⚠️ {path} 无效且从未加载过有效设置,因此语音已关闭:{error}',
|
|
371
|
+
'stt.screen.language': '语言:{language}',
|
|
372
|
+
'stt.language.autoName': '自动检测',
|
|
373
|
+
'stt.language.autoShort': '自动',
|
|
374
|
+
'stt.language.auto': '自动',
|
|
375
|
+
'stt.language.title': '你的语音消息使用什么语言?“自动”由引擎自行检测。本地引擎只懂俄语。',
|
|
376
|
+
'stt.screen.chainEmpty': '还没有引擎——请在下方添加。',
|
|
377
|
+
'stt.screen.chainHeading': '引擎按此顺序尝试。一个失败时由下一个接手:',
|
|
378
|
+
'stt.btn.addEngine': '➕ 添加引擎',
|
|
379
|
+
'stt.btn.language': '🌐 语言:{language}',
|
|
380
|
+
'stt.btn.idle': '⏱ 空闲后退出:{value}',
|
|
381
|
+
'stt.btn.workers': '⚙️ 工作线程:{count}',
|
|
382
|
+
'stt.btn.tryAgain': '🔄 立即重试',
|
|
383
|
+
'stt.btn.showProgress': '📊 查看安装进度',
|
|
384
|
+
'stt.btn.removeLocal': '🗑 删除模型文件',
|
|
385
|
+
'stt.btn.close': '✖️ 关闭',
|
|
386
|
+
'stt.btn.addKey': '🔑 添加密钥',
|
|
387
|
+
'stt.btn.changeKey': '🔑 更换密钥',
|
|
388
|
+
'stt.btn.customUrl': '🌐 自定义服务器',
|
|
389
|
+
'stt.btn.install': '⬇️ 安装',
|
|
390
|
+
'stt.btn.cancel': '取消',
|
|
391
|
+
'stt.btn.removeConfirm': '🗑 删除',
|
|
392
|
+
'stt.btn.keyYes': '🔑 是,粘贴密钥',
|
|
393
|
+
'stt.btn.keyNo': '不需要密钥',
|
|
394
|
+
'stt.btn.openSettings': '⚙️ 设置',
|
|
395
|
+
'stt.btn.retry': '🔁 重试',
|
|
396
|
+
'stt.idle.never': '从不',
|
|
397
|
+
'stt.idle.minutes': '{count} 分钟',
|
|
398
|
+
'stt.idle.title': '本地引擎空闲多久后退出并归还内存?下一条语音消息会再次启动它(约多 2–3 秒)。',
|
|
399
|
+
'stt.workers.title': '一条长语音同时识别多少段?越多长语音越快,占用内存越多(8 ≈ 多 0.2 GB)。',
|
|
400
|
+
'stt.card.title': '{n}/{total} · {name}',
|
|
401
|
+
'stt.card.ready': '就绪。',
|
|
402
|
+
'stt.card.problem.disabled': '未使用(已关闭)。',
|
|
403
|
+
'stt.card.problem.languageNotSupported': '本地引擎只懂俄语;设置了其他语言时会被跳过。',
|
|
404
|
+
'stt.card.problem.missingKey': '还没有 API 密钥——添加之前会被跳过。',
|
|
405
|
+
'stt.card.problem.missingUrl': '没有服务器地址——已跳过。',
|
|
406
|
+
'stt.card.timeout': '超时:{base} 秒 + 语音时长的 {percent} %。',
|
|
407
|
+
'stt.card.url': '地址:{url}',
|
|
408
|
+
'stt.card.keySet': 'API 密钥:已设置。',
|
|
409
|
+
'stt.card.keyMissing': 'API 密钥:未设置。',
|
|
410
|
+
'stt.engineState.running': '运行中',
|
|
411
|
+
'stt.engineState.stopped': '已停止',
|
|
412
|
+
'stt.engineState.installing': '安装中',
|
|
413
|
+
'stt.engineState.paused': '已暂停',
|
|
414
|
+
'stt.engineState.noOwner': '不可用',
|
|
415
|
+
'stt.engineState.notInstalled': '未安装',
|
|
416
|
+
'stt.card.local.title': '🖥 GigaAM v3——本地,仅支持俄语',
|
|
417
|
+
'stt.card.local.status.running': '状态:就绪 · 运行中',
|
|
418
|
+
'stt.card.local.status.runningBusy': '状态:就绪 · 运行中,{count} 个正在处理',
|
|
419
|
+
'stt.card.local.status.runningSlow': '状态:就绪 · 运行中,正忙于处理长语音',
|
|
420
|
+
'stt.card.local.status.stopped': '状态:就绪 · 已停止——下一条语音消息时启动',
|
|
421
|
+
'stt.card.local.status.paused': '状态:多次启动失败,暂停至 {until}',
|
|
422
|
+
'stt.card.local.status.noOwner': '状态:不可用——需要重启一次机器人守护进程,它才能拥有该引擎',
|
|
423
|
+
'stt.card.local.status.installing': '状态:正在安装——{phase}',
|
|
424
|
+
'stt.card.local.status.notInstalled': '状态:未安装',
|
|
425
|
+
'stt.card.local.ram': '内存:运行时约 0.5 GB,长语音最多约 0.9 GB;停止时不占用。',
|
|
426
|
+
'stt.btn.timeoutValue': '⏱ 超时:{value}',
|
|
427
|
+
'stt.btn.removeFromList': '从列表中移除',
|
|
428
|
+
'stt.removeEngine.confirmLocal': '从列表中移除 GigaAM?其文件仍保留在磁盘上——可通过“添加引擎”重新加入。',
|
|
429
|
+
'stt.timeout.title': '{name} 的超时:第一行是基础秒数,第二行是叠加的语音时长比例(长语音获得更多时间)。',
|
|
430
|
+
'stt.timeout.seconds': '{count} 秒',
|
|
431
|
+
'stt.add.title': '要添加哪个引擎?',
|
|
432
|
+
'stt.enable.confirm': '启用本地识别?\n\n• 将下载并安装约 400 MB 到机器人的数据文件夹(Python 包和模型)。这台机器上需要有 uv,或带 venv 的 Python 3.10+。\n• 不运行时不占用内存。运行时短语音约占 0.5 GB,长语音最多约 0.9 GB;空闲 {idle} 后退出。\n• 只懂俄语。',
|
|
433
|
+
'stt.removeEngine.confirm': '从列表中移除 {name}?其 API 密钥会一并删除。',
|
|
434
|
+
'stt.removeFiles.confirm': '删除模型文件(约 400 MB)?GigaAM 也会从列表中移除。',
|
|
435
|
+
'stt.prompt.key': '🔑 现在粘贴 API 密钥。我会立即删除你的消息,且不再显示密钥。发送命令或点按钮可取消;该步骤 10 分钟后也会过期。',
|
|
436
|
+
'stt.prompt.url': '🌐 发送服务器地址——兼容 OpenAI 的转写接口,或仅其基础地址如 http://host:8000。发送命令或点按钮可取消;该步骤 10 分钟后也会过期。',
|
|
437
|
+
'stt.prompt.needsKey': '这个服务器需要 API 密钥吗?',
|
|
438
|
+
'stt.input.invalidUrl': '❌ 这不是 http(s) 地址。请重新发送,或用按钮取消。',
|
|
439
|
+
'stt.input.urlHasCredentials': '❌ 不要在地址里写用户名或密钥——我已删除你的消息。请发送不含它们的地址;密钥下一步再填。',
|
|
440
|
+
'stt.input.invalidKey': '❌ 这看起来不像 API 密钥(不含空格或非拉丁字符,8–4096 个字符)。请重新发送,或用按钮取消。',
|
|
441
|
+
'stt.input.expired': '⌛ 已超时——打开 /stt 重试。',
|
|
442
|
+
'stt.input.cancelled': '已取消。',
|
|
443
|
+
'stt.input.keySaved': '✅ 密钥已保存。你的消息已删除。',
|
|
444
|
+
'stt.notice.removed': '已移除。',
|
|
445
|
+
'stt.notice.localAdded': '本地引擎已添加到最前面。',
|
|
446
|
+
'stt.notice.urlAdded': '服务器已添加。',
|
|
447
|
+
'stt.notice.guardReset': '下一条语音消息会再次尝试。',
|
|
448
|
+
'stt.notice.busyInstalling': '安装仍在进行。',
|
|
449
|
+
'stt.notice.localRemoved': '本地引擎文件已删除。',
|
|
450
|
+
'stt.saveFailed': '❌ 无法写入设置文件 {path}——请查看机器人日志。',
|
|
451
|
+
'stt.stale': '设置已更改——已刷新。',
|
|
342
452
|
'voice.failed': '语音转录失败。',
|
|
343
453
|
'voice.retrying': '⚠️ 语音转录失败({error})。{seconds} 秒后重试…',
|
|
344
454
|
'voice.transcribed': '🎤 {text}',
|
|
@@ -374,6 +484,7 @@ exports.zhDict = {
|
|
|
374
484
|
'cb.sent_option': '已发送:{option}',
|
|
375
485
|
'cb.effort_set': 'Effort: {level}',
|
|
376
486
|
'cb.effort_error': '错误:{error}',
|
|
487
|
+
'cb.effort_same': '同 General:{level}',
|
|
377
488
|
'cb.claudeMode_already': '已激活',
|
|
378
489
|
'cb.claudeMode_switching': '切换中…',
|
|
379
490
|
'claudeMode.pick': '⚙️ Claude Code 后端 — 当前: {label}\n选择后端(切换保持同一对话):',
|
|
@@ -516,11 +627,17 @@ exports.zhDict = {
|
|
|
516
627
|
'apiRetry.usageLimitDelayNotice': '🚧 用量限制已达到 — {minutes} 分钟后重试(第 {attempt} 次)。',
|
|
517
628
|
'apiRetry.usageLimitResetNotice': '🚧 用量限制已达到 — 重置后自动恢复(~{time})。',
|
|
518
629
|
'apiRetry.resuming': '↻ 恢复中…',
|
|
630
|
+
'apiRetry.conversationTailNotice': '↻ 服务商拒绝了上一步 — 继续中…',
|
|
519
631
|
'apiRetry.limitResetResuming': '✅ 限额窗口已重置——我继续本话题的工作。',
|
|
520
632
|
'apiRetry.giveUp': '⚠️ {attempts} 次尝试后无法恢复。需要继续时给我发消息。',
|
|
521
633
|
'apiRetry.continueNudge': '从你停下的地方继续。',
|
|
522
634
|
'apiRetry.loggedOutClaude': '⚠️ Claude 已登出 — 运行 /login 继续。',
|
|
523
635
|
'apiRetry.loggedOutOpenCode': '⚠️ OpenCode: 凭据无效 — 重启 opencode 服务器。',
|
|
636
|
+
'openCodeServer.restartedSessionRestoredNotice': '✅ OpenCode 服务器已重启,会话已恢复。正在进行的回复已丢失 — 如有需要请重新发送。',
|
|
637
|
+
'openCodeServer.restartedSessionLostNotice': '⚠️ OpenCode 服务器已重启,但之前的会话已丢失。用 /opencode 开始新会话(或用 /quit 释放话题)。',
|
|
638
|
+
'openCodeServer.installingNotice': '正在安装 OpenCode…',
|
|
639
|
+
'openCodeServer.startingNotice': '正在启动 OpenCode 服务器…',
|
|
640
|
+
'agent.serverUnavailableNotice': '⚠️ 无法启动 {label} 服务器。你的下一条消息会再次尝试。',
|
|
524
641
|
// ── startup readiness status (boot-time owner notice) ──
|
|
525
642
|
'startup.ready': '✅ 已就绪 — 我可以处理机器人会话和群组话题中的消息。',
|
|
526
643
|
'startup.header_not_ready': '⚠️ 设置尚未完成。要开始与我协作,请完成以下步骤:',
|
|
@@ -528,14 +645,14 @@ exports.zhDict = {
|
|
|
528
645
|
'startup.item.grant_admin': '将我设为管理员并授予以下权限:{missing}。',
|
|
529
646
|
'startup.item.bind_topic': '创建一个话题,并使用 /bind 将其绑定到一个文件夹。',
|
|
530
647
|
'startup.item.install_agent': '安装一个智能体 CLI —— claude 或 opencode。',
|
|
531
|
-
'startup.item.optional_groq': '
|
|
648
|
+
'startup.item.optional_groq': '(可选)用 /stt 设置语音输入(本地识别、Groq、OpenAI 或你自己的服务器)。',
|
|
532
649
|
'startup.item.optional_owner': '(可选)设置 OWNER_USER_ID 以在你的私聊中接收此状态。',
|
|
533
650
|
'requests.alert.notAnsweringNotice': '⚠️ 请求 {requestId} 未获回复:智能体多次结束回合却未作答,提醒已停止。请检查此话题中的会话。',
|
|
534
651
|
'requests.alert.unreachableNotice': '⚠️ 请求 {requestId} 未获回复:无法连接智能体的会话以发送提醒。请检查此话题中的会话。',
|
|
535
652
|
'requests.limit.answerAfterResetNotice': '🚧 已达到使用限额 — 答复将在 {time} 之后给出。',
|
|
536
653
|
'requests.limit.answerNextAttemptNotice': '🚧 已达到使用限额 — 下次尝试时间为 {time}。',
|
|
537
654
|
'requests.limit.answerAutoResumeOffNotice': '🚧 已达到使用限额。自动恢复已关闭,工作将等待操作员恢复。',
|
|
538
|
-
'account.title': '👤
|
|
655
|
+
'account.title': '👤 此话题运行于:{current}\n\n{list}',
|
|
539
656
|
'account.titleGeneral': '👤 Claude 账号 — 所有话题的默认值:{name}\n\n{list}\n\n点按一个配置将其设为默认。自行选择过的话题保持不变。',
|
|
540
657
|
'account.row.loggedOut': '未登录',
|
|
541
658
|
'account.row.topics': ' · {count} 个话题',
|
|
@@ -565,7 +682,7 @@ exports.zhDict = {
|
|
|
565
682
|
'account.setThisTopic': '✅ 此话题的 Claude 账号:{name}。{apply}',
|
|
566
683
|
'account.setGlobal': '✅ 所有话题的默认 Claude 账号:{name}。自行选择过的话题保持不变;其余话题现在或在下次启动时切换。',
|
|
567
684
|
'account.followSet': '✅ 此话题跟随默认 Claude 账号({name})。{apply}',
|
|
568
|
-
'account.usage': '用法:/accounts — 选择器;/accounts add <名称>;/accounts use <名称>;/accounts login <名称>;/accounts remove <名称>;/accounts autoswitch on|off。',
|
|
685
|
+
'account.usage': '用法:/accounts — 选择器;/accounts add <名称>;/accounts use <名称>;/accounts use <provider>/<model>;/accounts login <名称>;/accounts remove <名称>;/accounts autoswitch on|off。',
|
|
569
686
|
'account.applied.inactive': ' 将在会话下次启动或恢复时生效。',
|
|
570
687
|
'account.applied.unchanged': '',
|
|
571
688
|
'account.applied.respawned': ' 运行中的会话已在其下重启——同一段对话。',
|
|
@@ -577,7 +694,7 @@ exports.zhDict = {
|
|
|
577
694
|
'account.row.usageStale': '(已过时)',
|
|
578
695
|
'account.row.limited': ' ⛔ 已达上限,直到 {until}',
|
|
579
696
|
'account.usageHint': '用量:各窗口已用 %,然后是何时重置(🔄 2小时后 = 两小时后)。',
|
|
580
|
-
'account.autoSwitchHint': '
|
|
697
|
+
'account.autoSwitchHint': '遇到用量上限时怎么办,请在 /limits 中设置。',
|
|
581
698
|
'fallback.backendClaude': 'Claude',
|
|
582
699
|
'fallback.backendOpenCode': 'OpenCode',
|
|
583
700
|
'fallback.topicModel': '话题当前模型',
|
|
@@ -602,12 +719,25 @@ exports.zhDict = {
|
|
|
602
719
|
'fallback.switchExpired': '此上限已结束 — 无需切换。',
|
|
603
720
|
'fallback.switchButton': '🔁 切换到 {label}',
|
|
604
721
|
'fallback.switchOffer': '🪜 有一个余量充足的备用模型 — 点按即可把此话题移过去并立即继续。',
|
|
605
|
-
'fallback.switched': '🔁 {from}
|
|
722
|
+
'fallback.switched': '🔁 账号 {from} 已达用量上限 — 此话题已切换到 {to} 并继续。{tail}',
|
|
723
|
+
'fallback.switchedModel': '🔁 模型 {from} 已达用量上限 — 此话题已切换到 {to} 并继续。{tail}',
|
|
724
|
+
'fallback.switchedUnknownSource': '🔁 已达用量上限 — 此话题已切换到 {to} 并继续。{tail}',
|
|
606
725
|
'fallback.backgroundStopped': '仍在运行的后台任务已因切换而停止。',
|
|
607
|
-
'fallback.switchedReset': '
|
|
608
|
-
'fallback.
|
|
726
|
+
'fallback.switchedReset': ' 上限将于 {time} 重置。切换:/limits',
|
|
727
|
+
'fallback.switchedBack': ' 切换:/limits',
|
|
728
|
+
'fallback.switchedDeferred': '🔁 账号 {from} 已达用量上限 — 此话题将在当前回答结束后切换到 {to}。',
|
|
609
729
|
'fallback.switchFailed': '⚠️ 切换到 {to} 失败:{error}。重置等待保持生效。',
|
|
610
|
-
'
|
|
730
|
+
'handover.note': '对话上下文将以压缩形式移交。',
|
|
731
|
+
'handover.continueButton': '✅ 继续',
|
|
732
|
+
'handover.cancelButton': '✖️ 取消',
|
|
733
|
+
'backendSwitch.question': '🔁 将此话题从 {from} 切换到 {to}?',
|
|
734
|
+
'backendSwitch.switching': '🔁 正在将话题切换到 {to}…',
|
|
735
|
+
'backendSwitch.switched': '🔁 话题已切换到 {to}。',
|
|
736
|
+
'backendSwitch.cancelled': '✖️ 已取消 — 话题仍在 {from}。',
|
|
737
|
+
'backendSwitch.stale': '此问题已过期 — 未切换任何内容。',
|
|
738
|
+
'backendSwitch.failed': '⚠️ 切换到 {to} 失败:{error}',
|
|
739
|
+
'limits.addConfirm': '➕ 将 {label} 加入备用列表?',
|
|
740
|
+
'limits.enableConfirm': '➕ 将 {label} 纳入自动切换?',
|
|
611
741
|
'limits.topicRuns': '运行在:{current}',
|
|
612
742
|
'limits.settingsGeneral': '所有话题的默认值。',
|
|
613
743
|
'limits.sourceGeneral': '同 General',
|
|
@@ -627,10 +757,23 @@ exports.zhDict = {
|
|
|
627
757
|
'limits.setSame': '✅ {what}:此话题跟随 General({state})。',
|
|
628
758
|
'limits.whatSwitch': '自动切换到备用模型',
|
|
629
759
|
'limits.whatWait': '等待重置后继续',
|
|
630
|
-
'limits.usage': '用法:/limits —
|
|
760
|
+
'limits.usage': '用法:/limits — 切换面板(点按账号或提供方即可切换此话题)。备用列表及其设置在 /limits_autoswitch。',
|
|
761
|
+
'limits.autoswitchUsage': '用法:/limits_autoswitch — 主界面;/limits_autoswitch rebuild;/limits_autoswitch clear;/limits_autoswitch switch on|off|same;/limits_autoswitch wait on|off|same(在话题中,«same» = 跟随 General)。',
|
|
762
|
+
'limits.pickModel': '{label} — 为此话题选择模型:',
|
|
763
|
+
'limits.switched': '✅ 此话题现在运行于 {label}。',
|
|
764
|
+
'limits.openCodeInTopicOnly': 'OpenCode 模型需要在话题内选择。',
|
|
765
|
+
'limits.boardGeneral': '所有话题的默认值:',
|
|
766
|
+
'limits.usageHeading': '用量(已用 %)',
|
|
767
|
+
'limits.boardCaption': '选择当前使用的模型:',
|
|
768
|
+
'limits.boardCaptionGeneral': '选择默认的 Claude 账号:',
|
|
769
|
+
'limits.boardSettings': '🔁 自动切换:{switch}{switchSource} · ⏳ 等待重置:{wait}{waitSource} — /limits_autoswitch',
|
|
770
|
+
'limits.autoswitchTitle': '🔁 达到用量上限时自动切换',
|
|
631
771
|
'accounts.openCodeSection': '🔌 OpenCode provider(已连接):\n{list}',
|
|
632
772
|
'accounts.openCodeNone': '🔌 OpenCode provider:尚未连接任何一个。点「➕ OpenCode provider」来连接。',
|
|
633
|
-
'accounts.
|
|
773
|
+
'accounts.providerApiKey': 'API 密钥',
|
|
774
|
+
'accounts.providerSubscription': 'ChatGPT 订阅',
|
|
775
|
+
'accounts.buttonsHintGeneral': '点按账号可将其设为所有话题的默认账号。🔑 重新登录账号或提供商,🗑 移除账号,🔌 断开提供商。',
|
|
776
|
+
'accounts.buttonsHint': '点按账号或提供商可把此话题切换过去(提供商之后会让你选模型)。🔑 重新登录,🗑 移除账号,🔌 断开提供商。',
|
|
634
777
|
'accounts.addClaudeButton': '➕ Claude 账号',
|
|
635
778
|
'accounts.addProviderButton': '➕ OpenCode provider',
|
|
636
779
|
'accounts.askProvider': '➕ 连接哪个 OpenCode provider?请在下一条消息中发送它的 id(例如 openai 或 openrouter)。',
|
package/dist/i18n/zh.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zh.js","sourceRoot":"","sources":["../../src/i18n/zh.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"zh.js","sourceRoot":"","sources":["../../src/i18n/zh.ts"],"names":[],"mappings":"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"}
|
package/dist/installManager.d.ts
CHANGED
|
@@ -5,14 +5,29 @@
|
|
|
5
5
|
export declare const defaultOpenCodeUrl = "http://localhost:4096";
|
|
6
6
|
/** The port an OpenCode URL names; a URL without one means the default port (as `opencode serve` binds it). */
|
|
7
7
|
export declare function getOpenCodePort(serverUrl: URL): string;
|
|
8
|
+
/** What a PATH lookup reads of its host: the process's own by default; a test hands it another platform's. */
|
|
9
|
+
export interface PathLookupEnvironment {
|
|
10
|
+
platform: NodeJS.Platform;
|
|
11
|
+
pathValue: string;
|
|
12
|
+
/** Windows' `PATHEXT` (`.COM;.EXE;.BAT;.CMD`, …); unread elsewhere. */
|
|
13
|
+
pathExtValue: string | undefined;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @description The first file on PATH that runs as `toolName`, or `null` — what `which` (POSIX) and `where` (Windows)
|
|
17
|
+
* find, without spawning either: Windows has no `which`, so every tool read as missing there. POSIX: the bare name, if
|
|
18
|
+
* executable. Windows: the name with each `PATHEXT` extension (npm installs `opencode.cmd`), as `where` does.
|
|
19
|
+
*/
|
|
20
|
+
export declare function findToolOnPath(toolName: string, environment?: PathLookupEnvironment): string | null;
|
|
8
21
|
/**
|
|
9
|
-
* @description Check if a CLI tool is installed
|
|
10
|
-
*
|
|
22
|
+
* @description Check if a CLI tool is installed: a custom binary (TOOL_BIN env var), the tool on PATH, or the
|
|
23
|
+
* copy {@link installTool} left in `~/.npm-global/bin`. Checking PATH alone read that copy as missing, so every
|
|
24
|
+
* start re-ran `npm install -g`.
|
|
11
25
|
*/
|
|
12
26
|
export declare function checkIsInstalled(toolName: string): boolean;
|
|
13
27
|
/**
|
|
14
|
-
* @description Get the command/path to run a tool
|
|
15
|
-
*
|
|
28
|
+
* @description Get the command/path to run a tool: the custom binary (TOOL_BIN env var), else the bare name when
|
|
29
|
+
* it is on PATH, else the `~/.npm-global/bin` copy by its full path — so a spawn that does not put that directory on
|
|
30
|
+
* PATH (`opencode models`) runs the same binary {@link checkIsInstalled} found.
|
|
16
31
|
*/
|
|
17
32
|
export declare function getToolCommand(toolName: string): string;
|
|
18
33
|
/**
|
|
@@ -60,6 +75,7 @@ export declare function getOpenCodeChildEnv(baseEnv?: NodeJS.ProcessEnv): NodeJS
|
|
|
60
75
|
* snapshot of every descendant on reload, including ordinary detached children.
|
|
61
76
|
*/
|
|
62
77
|
export declare function startExternallyParentedProcess(command: string, args: string[], env: NodeJS.ProcessEnv, options?: ExternalProcessHostOptions): Promise<ExternalProcessIdentity>;
|
|
78
|
+
export declare function getProcessIdentity(pid: number): ExternalProcessIdentity | null;
|
|
63
79
|
export declare function getDefaultOpenCodeOwnershipFilePath(baseDirectory?: string): string;
|
|
64
80
|
export declare function checkIsProcessIdentityCurrent(processIdentity: ExternalProcessIdentity): boolean;
|
|
65
81
|
export declare function signalExternallyHostedProcess(processIdentity: ExternalProcessIdentity, signal: NodeJS.Signals): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installManager.d.ts","sourceRoot":"","sources":["../src/installManager.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAG1D,+GAA+G;AAC/G,wBAAgB,eAAe,CAAC,SAAS,EAAE,GAAG,GAAG,MAAM,CAEtD;
|
|
1
|
+
{"version":3,"file":"installManager.d.ts","sourceRoot":"","sources":["../src/installManager.ts"],"names":[],"mappings":"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"}
|
package/dist/installManager.js
CHANGED
|
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.openCodeOwnershipFileEnvName = exports.openCodeExternalHostEnvValue = exports.openCodeExternalHostEnvName = exports.defaultOpenCodeUrl = void 0;
|
|
37
37
|
exports.getOpenCodePort = getOpenCodePort;
|
|
38
|
+
exports.findToolOnPath = findToolOnPath;
|
|
38
39
|
exports.checkIsInstalled = checkIsInstalled;
|
|
39
40
|
exports.getToolCommand = getToolCommand;
|
|
40
41
|
exports.installTool = installTool;
|
|
@@ -45,6 +46,7 @@ exports.clearOpenCodeExternalHostEnv = clearOpenCodeExternalHostEnv;
|
|
|
45
46
|
exports.setOpenCodeOwnershipFileEnv = setOpenCodeOwnershipFileEnv;
|
|
46
47
|
exports.getOpenCodeChildEnv = getOpenCodeChildEnv;
|
|
47
48
|
exports.startExternallyParentedProcess = startExternallyParentedProcess;
|
|
49
|
+
exports.getProcessIdentity = getProcessIdentity;
|
|
48
50
|
exports.getDefaultOpenCodeOwnershipFilePath = getDefaultOpenCodeOwnershipFilePath;
|
|
49
51
|
exports.checkIsProcessIdentityCurrent = checkIsProcessIdentityCurrent;
|
|
50
52
|
exports.signalExternallyHostedProcess = signalExternallyHostedProcess;
|
|
@@ -91,16 +93,26 @@ function getCustomBinaryPath(toolName) {
|
|
|
91
93
|
return null;
|
|
92
94
|
}
|
|
93
95
|
/**
|
|
94
|
-
* @description
|
|
95
|
-
*
|
|
96
|
+
* @description Where {@link installTool} puts a tool's binary (`~/.npm-global/bin/<tool>`), when it is there.
|
|
97
|
+
* The spawns look there too — the OpenCode server and version probe put that directory first on PATH, the
|
|
98
|
+
* Claude binary falls back to it — so a binary that lives only there is installed, not missing.
|
|
96
99
|
*/
|
|
97
|
-
function
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
function getNpmGlobalBinaryPath(toolName) {
|
|
101
|
+
const binaryPath = path.join(npmPrefix, 'bin', toolName);
|
|
102
|
+
return fs.existsSync(binaryPath) ? binaryPath : null;
|
|
103
|
+
}
|
|
104
|
+
/** The extensions a Windows shell tries when `PATHEXT` is unset. */
|
|
105
|
+
const defaultWindowsPathExt = '.COM;.EXE;.BAT;.CMD';
|
|
106
|
+
function getProcessPathLookupEnvironment() {
|
|
107
|
+
return { platform: process.platform, pathValue: process.env.PATH ?? '', pathExtValue: process.env.PATHEXT };
|
|
108
|
+
}
|
|
109
|
+
/** @description Whether `candidatePath` is a file the platform would run: on POSIX also executable. */
|
|
110
|
+
function checkIsRunnableFile(candidatePath, platform) {
|
|
102
111
|
try {
|
|
103
|
-
(
|
|
112
|
+
if (!fs.statSync(candidatePath).isFile())
|
|
113
|
+
return false;
|
|
114
|
+
if (platform !== 'win32')
|
|
115
|
+
fs.accessSync(candidatePath, fs.constants.X_OK);
|
|
104
116
|
return true;
|
|
105
117
|
}
|
|
106
118
|
catch {
|
|
@@ -108,15 +120,52 @@ function checkIsInstalled(toolName) {
|
|
|
108
120
|
}
|
|
109
121
|
}
|
|
110
122
|
/**
|
|
111
|
-
* @description
|
|
112
|
-
*
|
|
123
|
+
* @description The first file on PATH that runs as `toolName`, or `null` — what `which` (POSIX) and `where` (Windows)
|
|
124
|
+
* find, without spawning either: Windows has no `which`, so every tool read as missing there. POSIX: the bare name, if
|
|
125
|
+
* executable. Windows: the name with each `PATHEXT` extension (npm installs `opencode.cmd`), as `where` does.
|
|
126
|
+
*/
|
|
127
|
+
function findToolOnPath(toolName, environment = getProcessPathLookupEnvironment()) {
|
|
128
|
+
const isWindows = environment.platform === 'win32';
|
|
129
|
+
const directories = environment.pathValue.split(isWindows ? ';' : ':').filter((directory) => directory !== '');
|
|
130
|
+
const extensions = isWindows
|
|
131
|
+
? (environment.pathExtValue || defaultWindowsPathExt).split(';').filter((extension) => extension !== '')
|
|
132
|
+
// Windows matches the extension case-insensitively; the lower-case spelling is how npm writes its shims.
|
|
133
|
+
.flatMap((extension) => [...new Set([extension.toLowerCase(), extension])])
|
|
134
|
+
: [''];
|
|
135
|
+
for (const directory of directories) {
|
|
136
|
+
for (const extension of extensions) {
|
|
137
|
+
const candidatePath = path.join(directory, `${toolName}${extension}`);
|
|
138
|
+
if (checkIsRunnableFile(candidatePath, environment.platform))
|
|
139
|
+
return candidatePath;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
/** @description Whether the tool is on the process PATH ({@link findToolOnPath}). */
|
|
145
|
+
function checkIsOnPath(toolName) {
|
|
146
|
+
return findToolOnPath(toolName) !== null;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* @description Check if a CLI tool is installed: a custom binary (TOOL_BIN env var), the tool on PATH, or the
|
|
150
|
+
* copy {@link installTool} left in `~/.npm-global/bin`. Checking PATH alone read that copy as missing, so every
|
|
151
|
+
* start re-ran `npm install -g`.
|
|
152
|
+
*/
|
|
153
|
+
function checkIsInstalled(toolName) {
|
|
154
|
+
return getCustomBinaryPath(toolName) !== null || checkIsOnPath(toolName) || getNpmGlobalBinaryPath(toolName) !== null;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* @description Get the command/path to run a tool: the custom binary (TOOL_BIN env var), else the bare name when
|
|
158
|
+
* it is on PATH, else the `~/.npm-global/bin` copy by its full path — so a spawn that does not put that directory on
|
|
159
|
+
* PATH (`opencode models`) runs the same binary {@link checkIsInstalled} found.
|
|
113
160
|
*/
|
|
114
161
|
function getToolCommand(toolName) {
|
|
115
162
|
const customPath = getCustomBinaryPath(toolName);
|
|
116
163
|
if (customPath) {
|
|
117
164
|
return customPath;
|
|
118
165
|
}
|
|
119
|
-
|
|
166
|
+
if (checkIsOnPath(toolName))
|
|
167
|
+
return toolName;
|
|
168
|
+
return getNpmGlobalBinaryPath(toolName) ?? toolName;
|
|
120
169
|
}
|
|
121
170
|
/**
|
|
122
171
|
* @description Install a CLI tool via npm global install.
|
|
@@ -346,7 +395,10 @@ function startExternallyParentedProcess(command, args, env, options = {}) {
|
|
|
346
395
|
settleWithError(new Error(`External process host failed: ${hostError}`));
|
|
347
396
|
return;
|
|
348
397
|
}
|
|
349
|
-
if
|
|
398
|
+
// A child the host identified and released has STARTED, even if it has already exited again (a sidecar start
|
|
399
|
+
// that found another start holding the record leaves at once): whether it still runs is the caller's question —
|
|
400
|
+
// each one checks it. Under load the host's exit could come after the child's, and the start read as failed.
|
|
401
|
+
if (code !== 0 || !hostedProcess) {
|
|
350
402
|
settleWithError(new Error(`External process host exited before starting its child ` +
|
|
351
403
|
`(code=${code ?? 'null'}, signal=${signal ?? 'null'})`));
|
|
352
404
|
return;
|
|
@@ -458,6 +510,16 @@ function clearPersistedOpenCodeProcessOwnership(processOwnership) {
|
|
|
458
510
|
console.warn(`[OpenCode] Failed to clear process ownership file ${ownershipFilePath}:`, error instanceof Error ? error.message : error);
|
|
459
511
|
}
|
|
460
512
|
}
|
|
513
|
+
/** @description `Threads:` of `/proc/<pid>/status` (Linux); `0` when it cannot be read — the process is gone. */
|
|
514
|
+
function readProcessThreadCount(pid) {
|
|
515
|
+
try {
|
|
516
|
+
const threadsLine = fs.readFileSync(`/proc/${pid}/status`, 'utf8').split('\n').find((line) => line.startsWith('Threads:'));
|
|
517
|
+
return Number.parseInt(threadsLine?.split(/\s+/)[1] ?? '0', 10) || 0;
|
|
518
|
+
}
|
|
519
|
+
catch {
|
|
520
|
+
return 0;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
461
523
|
function getProcessStartToken(pid) {
|
|
462
524
|
try {
|
|
463
525
|
if (process.platform === 'linux') {
|
|
@@ -467,7 +529,10 @@ function getProcessStartToken(pid) {
|
|
|
467
529
|
return null;
|
|
468
530
|
// Fields after the command start at #3 (state); process start time is #22.
|
|
469
531
|
const processFields = stat.slice(commandEndIndex + 1).trim().split(/\s+/);
|
|
470
|
-
|
|
532
|
+
// A zombie is gone only once its whole thread group is: the leader of a multi-threaded process (Node's libuv
|
|
533
|
+
// pool) reads `Z` while other threads still exit and still hold its sockets — a listening port then accepts
|
|
534
|
+
// connections and resets them. Measured under load: 35 of 40 Node exits passed through that window.
|
|
535
|
+
if (processFields[0] === 'Z' && readProcessThreadCount(pid) <= 1)
|
|
471
536
|
return null;
|
|
472
537
|
return processFields[19] ?? null;
|
|
473
538
|
}
|
|
@@ -654,8 +719,11 @@ function getPidListeningOnEndpoint(hostname, port) {
|
|
|
654
719
|
? ['127.0.0.1', '::1']
|
|
655
720
|
: [normalizedHostname];
|
|
656
721
|
for (const listenerAddress of listenerAddresses) {
|
|
722
|
+
// lsof wants IPv6 bracketed (`-iTCP@[::1]:4096`); unbracketed it rejects the
|
|
723
|
+
// address and prints its usage into the bot's log.
|
|
724
|
+
const lsofAddress = listenerAddress.includes(':') ? `[${listenerAddress}]` : listenerAddress;
|
|
657
725
|
try {
|
|
658
|
-
const output = (0, child_process_1.execFileSync)('lsof', ['-nP', `-iTCP@${
|
|
726
|
+
const output = (0, child_process_1.execFileSync)('lsof', ['-nP', `-iTCP@${lsofAddress}:${port}`, '-sTCP:LISTEN', '-t'], { encoding: 'utf8', timeout: 3000, stdio: ['ignore', 'pipe', 'ignore'] }).trim();
|
|
659
727
|
const pid = Number.parseInt(output.split('\n')[0], 10);
|
|
660
728
|
if (Number.isFinite(pid))
|
|
661
729
|
return pid;
|