@jingyi0605/codingns4dsh 0.2.1-beta.10 → 0.2.1-beta.12
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.en.md +7 -5
- package/README.md +12 -6
- package/data/build/dist/bootstrap/dsh-connection-adapter.d.ts +1 -1
- package/data/build/dist/bootstrap/index.d.ts +1 -1
- package/data/build/dist/client/bundle.js +9713 -7350
- package/data/build/dist/client/bundle.js.map +1 -1
- package/data/build/dist/client/cli-slots.d.ts +13 -3
- package/data/build/dist/client/cli-slots.d.ts.map +1 -1
- package/data/build/dist/client/cli-slots.js +93 -18
- package/data/build/dist/client/cli-slots.js.map +1 -1
- package/data/build/dist/client/client.assistant-configuration-view.js +4 -3
- package/data/build/dist/client/client.assistant-configuration-view.js.map +1 -1
- package/data/build/dist/client/client.moss-voice-output.js +415 -0
- package/data/build/dist/client/client.moss-voice-output.js.map +1 -0
- package/data/build/dist/client/client.native-workspace-store.js +4 -4
- package/data/build/dist/client/client.native-workspace-store.js.map +1 -1
- package/data/build/dist/client/client.primitives-adapter.js.map +1 -1
- package/data/build/dist/client/client.react-dom.js +0 -404
- package/data/build/dist/client/client.react-dom.js.map +1 -1
- package/data/build/dist/client/client.session-translation.js +105 -2
- package/data/build/dist/client/client.session-translation.js.map +1 -1
- package/data/build/dist/client/client.transport.js +103 -11
- package/data/build/dist/client/client.transport.js.map +1 -1
- package/data/build/dist/client/conversation-translation-settings.d.ts +10 -0
- package/data/build/dist/client/conversation-translation-settings.d.ts.map +1 -0
- package/data/build/dist/client/conversation-translation-settings.js +52 -0
- package/data/build/dist/client/conversation-translation-settings.js.map +1 -0
- package/data/build/dist/client/desktop-assistant.js +569 -450
- package/data/build/dist/client/features/cli-adapters.d.ts.map +1 -1
- package/data/build/dist/client/features/cli-adapters.js +3 -1
- package/data/build/dist/client/features/cli-adapters.js.map +1 -1
- package/data/build/dist/client/features/session-translation.d.ts.map +1 -1
- package/data/build/dist/client/features/session-translation.js +49 -48
- package/data/build/dist/client/features/session-translation.js.map +1 -1
- package/data/build/dist/client/locales/panels.d.ts.map +1 -1
- package/data/build/dist/client/locales/panels.js +103 -11
- package/data/build/dist/client/locales/panels.js.map +1 -1
- package/data/build/dist/client/native-model-translation-menu.d.ts +6 -0
- package/data/build/dist/client/native-model-translation-menu.d.ts.map +1 -0
- package/data/build/dist/client/native-model-translation-menu.js +57 -0
- package/data/build/dist/client/native-model-translation-menu.js.map +1 -0
- package/data/build/dist/client/native-translation-default.d.ts +6 -0
- package/data/build/dist/client/native-translation-default.d.ts.map +1 -0
- package/data/build/dist/client/native-translation-default.js +30 -0
- package/data/build/dist/client/native-translation-default.js.map +1 -0
- package/data/build/dist/client/session-translation-chat.d.ts +23 -2
- package/data/build/dist/client/session-translation-chat.d.ts.map +1 -1
- package/data/build/dist/client/session-translation-chat.js +238 -72
- package/data/build/dist/client/session-translation-chat.js.map +1 -1
- package/data/build/dist/client/session-translation-interactions.d.ts +31 -0
- package/data/build/dist/client/session-translation-interactions.d.ts.map +1 -0
- package/data/build/dist/client/session-translation-interactions.js +158 -0
- package/data/build/dist/client/session-translation-interactions.js.map +1 -0
- package/data/build/dist/client/session-translation-model-pool.d.ts +16 -0
- package/data/build/dist/client/session-translation-model-pool.d.ts.map +1 -0
- package/data/build/dist/client/session-translation-model-pool.js +246 -0
- package/data/build/dist/client/session-translation-model-pool.js.map +1 -0
- package/data/build/dist/client/session-translation-pending-dom.d.ts +8 -0
- package/data/build/dist/client/session-translation-pending-dom.d.ts.map +1 -0
- package/data/build/dist/client/session-translation-pending-dom.js +58 -0
- package/data/build/dist/client/session-translation-pending-dom.js.map +1 -0
- package/data/build/dist/client/session-translation-retry.d.ts +16 -0
- package/data/build/dist/client/session-translation-retry.d.ts.map +1 -0
- package/data/build/dist/client/session-translation-retry.js +66 -0
- package/data/build/dist/client/session-translation-retry.js.map +1 -0
- package/data/build/dist/client/session-translation-rules.d.ts +13 -0
- package/data/build/dist/client/session-translation-rules.d.ts.map +1 -0
- package/data/build/dist/client/session-translation-rules.js +58 -0
- package/data/build/dist/client/session-translation-rules.js.map +1 -0
- package/data/build/dist/client/style.css +276 -276
- package/data/build/dist/dsh-capabilities/client/interaction-presentation-adapter.d.ts +30 -0
- package/data/build/dist/dsh-capabilities/client/interaction-presentation-adapter.d.ts.map +1 -0
- package/data/build/dist/dsh-capabilities/client/interaction-presentation-adapter.js +93 -0
- package/data/build/dist/dsh-capabilities/client/interaction-presentation-adapter.js.map +1 -0
- package/data/build/dist/dsh-capabilities/client/interaction-text-dom.d.ts +12 -0
- package/data/build/dist/dsh-capabilities/client/interaction-text-dom.d.ts.map +1 -0
- package/data/build/dist/dsh-capabilities/client/interaction-text-dom.js +181 -0
- package/data/build/dist/dsh-capabilities/client/interaction-text-dom.js.map +1 -0
- package/data/build/dist/dsh-capabilities/client/message-presentation-adapter.d.ts +19 -0
- package/data/build/dist/dsh-capabilities/client/message-presentation-adapter.d.ts.map +1 -0
- package/data/build/dist/dsh-capabilities/client/message-presentation-adapter.js +39 -0
- package/data/build/dist/dsh-capabilities/client/message-presentation-adapter.js.map +1 -0
- package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts +1 -0
- package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts.map +1 -1
- package/data/build/dist/dsh-capabilities/client/primitives-adapter.js +1 -0
- package/data/build/dist/dsh-capabilities/client/primitives-adapter.js.map +1 -1
- package/data/build/dist/dsh-capabilities/client/question-history-adapter.d.ts +20 -0
- package/data/build/dist/dsh-capabilities/client/question-history-adapter.d.ts.map +1 -0
- package/data/build/dist/dsh-capabilities/client/question-history-adapter.js +65 -0
- package/data/build/dist/dsh-capabilities/client/question-history-adapter.js.map +1 -0
- package/data/build/dist/dsh-capabilities/client/slot-presentation-mirror.d.ts +32 -0
- package/data/build/dist/dsh-capabilities/client/slot-presentation-mirror.d.ts.map +1 -0
- package/data/build/dist/dsh-capabilities/client/slot-presentation-mirror.js +90 -0
- package/data/build/dist/dsh-capabilities/client/slot-presentation-mirror.js.map +1 -0
- package/data/build/dist/dsh-capabilities/host/connection-peer-adapter.d.ts +10 -0
- package/data/build/dist/dsh-capabilities/host/connection-peer-adapter.d.ts.map +1 -0
- package/data/build/dist/dsh-capabilities/host/connection-peer-adapter.js +34 -0
- package/data/build/dist/dsh-capabilities/host/connection-peer-adapter.js.map +1 -0
- package/data/build/dist/dsh-capabilities/host/native-dispatch-adapter.d.ts +21 -0
- package/data/build/dist/dsh-capabilities/host/native-dispatch-adapter.d.ts.map +1 -0
- package/data/build/dist/dsh-capabilities/host/native-dispatch-adapter.js +11 -0
- package/data/build/dist/dsh-capabilities/host/native-dispatch-adapter.js.map +1 -0
- package/data/build/dist/dsh-capabilities/host/session-activation-adapter.d.ts +17 -0
- package/data/build/dist/dsh-capabilities/host/session-activation-adapter.d.ts.map +1 -0
- package/data/build/dist/dsh-capabilities/host/session-activation-adapter.js +37 -0
- package/data/build/dist/dsh-capabilities/host/session-activation-adapter.js.map +1 -0
- package/data/build/dist/dsh-capabilities/host/session-model-selection-adapter.d.ts +17 -0
- package/data/build/dist/dsh-capabilities/host/session-model-selection-adapter.d.ts.map +1 -0
- package/data/build/dist/dsh-capabilities/host/session-model-selection-adapter.js +45 -0
- package/data/build/dist/dsh-capabilities/host/session-model-selection-adapter.js.map +1 -0
- package/data/build/dist/dsh-capabilities/host/session-prompt-adapter.d.ts +28 -0
- package/data/build/dist/dsh-capabilities/host/session-prompt-adapter.d.ts.map +1 -0
- package/data/build/dist/dsh-capabilities/host/session-prompt-adapter.js +31 -0
- package/data/build/dist/dsh-capabilities/host/session-prompt-adapter.js.map +1 -0
- package/data/build/dist/dsh-capabilities/matrix.d.ts.map +1 -1
- package/data/build/dist/dsh-capabilities/matrix.js +12 -3
- package/data/build/dist/dsh-capabilities/matrix.js.map +1 -1
- package/data/build/dist/dsh-capabilities/routes.d.ts.map +1 -1
- package/data/build/dist/dsh-capabilities/routes.js +26 -3
- package/data/build/dist/dsh-capabilities/routes.js.map +1 -1
- package/data/build/dist/dsh-capabilities/types.d.ts +1 -1
- package/data/build/dist/dsh-capabilities/types.d.ts.map +1 -1
- package/data/build/dist/dsh-capabilities/types.js.map +1 -1
- package/data/build/dist/host/cli-adapters/antigravity-driver.js +1 -1
- package/data/build/dist/host/cli-adapters/antigravity-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/attachment-utils.d.ts +4 -3
- package/data/build/dist/host/cli-adapters/attachment-utils.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/attachment-utils.js +9 -8
- package/data/build/dist/host/cli-adapters/attachment-utils.js.map +1 -1
- package/data/build/dist/host/cli-adapters/claude-driver.js +1 -1
- package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-driver.js +1 -1
- package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/driver.d.ts +2 -0
- package/data/build/dist/host/cli-adapters/driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts +2 -0
- package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-message-projector.js +28 -11
- package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
- package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/feature.js +369 -70
- package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
- package/data/build/dist/host/cli-adapters/gemini-driver.js +1 -1
- package/data/build/dist/host/cli-adapters/gemini-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/grok-driver.d.ts +1 -0
- package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/grok-driver.js +128 -40
- package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/kimi-driver.js +2 -2
- package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/mcode-driver.js +1 -1
- package/data/build/dist/host/cli-adapters/mcode-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js +2 -2
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js.map +1 -1
- package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/native-team-subagent.js +2 -1
- package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -1
- package/data/build/dist/host/cli-adapters/pi-driver.js +1 -1
- package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/registry.js +25 -16
- package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
- package/data/build/dist/host/cli-adapters/zcode-driver.js +1 -1
- package/data/build/dist/host/cli-adapters/zcode-driver.js.map +1 -1
- package/data/build/dist/host/features/global-voice-rpc.d.ts.map +1 -1
- package/data/build/dist/host/features/global-voice-rpc.js +2 -3
- package/data/build/dist/host/features/global-voice-rpc.js.map +1 -1
- package/data/build/dist/host/features/interaction-translation.d.ts +9 -0
- package/data/build/dist/host/features/interaction-translation.d.ts.map +1 -0
- package/data/build/dist/host/features/interaction-translation.js +168 -0
- package/data/build/dist/host/features/interaction-translation.js.map +1 -0
- package/data/build/dist/host/features/peer-host.js +6 -6
- package/data/build/dist/host/features/peer-host.js.map +1 -1
- package/data/build/dist/host/features/session-prompt-translation.d.ts +10 -0
- package/data/build/dist/host/features/session-prompt-translation.d.ts.map +1 -0
- package/data/build/dist/host/features/session-prompt-translation.js +197 -0
- package/data/build/dist/host/features/session-prompt-translation.js.map +1 -0
- package/data/build/dist/host/features/session-translation-protection.d.ts +16 -0
- package/data/build/dist/host/features/session-translation-protection.d.ts.map +1 -0
- package/data/build/dist/host/features/session-translation-protection.js +183 -0
- package/data/build/dist/host/features/session-translation-protection.js.map +1 -0
- package/data/build/dist/host/features/session-translation-recovery.d.ts +20 -0
- package/data/build/dist/host/features/session-translation-recovery.d.ts.map +1 -0
- package/data/build/dist/host/features/session-translation-recovery.js +122 -0
- package/data/build/dist/host/features/session-translation-recovery.js.map +1 -0
- package/data/build/dist/host/features/session-translation-runtime.d.ts +16 -0
- package/data/build/dist/host/features/session-translation-runtime.d.ts.map +1 -0
- package/data/build/dist/host/features/session-translation-runtime.js +85 -0
- package/data/build/dist/host/features/session-translation-runtime.js.map +1 -0
- package/data/build/dist/host/features/session-translation-service.d.ts +14 -4
- package/data/build/dist/host/features/session-translation-service.d.ts.map +1 -1
- package/data/build/dist/host/features/session-translation-service.js +217 -211
- package/data/build/dist/host/features/session-translation-service.js.map +1 -1
- package/data/build/dist/host/features/session-translation.d.ts.map +1 -1
- package/data/build/dist/host/features/session-translation.js +5 -2
- package/data/build/dist/host/features/session-translation.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts +2 -2
- package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js +10 -9
- package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-streams.d.ts +3 -3
- package/data/build/dist/host/modules/peer-host/peer-host-native-streams.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-streams.js +26 -14
- package/data/build/dist/host/modules/peer-host/peer-host-native-streams.js.map +1 -1
- package/data/build/dist/host/native-session-bridge.d.ts +2 -1
- package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
- package/data/build/dist/host/native-session-bridge.js +7 -15
- package/data/build/dist/host/native-session-bridge.js.map +1 -1
- package/data/build/dist/host/rpc.d.ts.map +1 -1
- package/data/build/dist/host/rpc.js +14 -8
- package/data/build/dist/host/rpc.js.map +1 -1
- package/data/build/dist/host/settings.d.ts.map +1 -1
- package/data/build/dist/host/settings.js +10 -2
- package/data/build/dist/host/settings.js.map +1 -1
- package/data/build/dist/shared/attachment-prompts.d.ts +11 -0
- package/data/build/dist/shared/attachment-prompts.d.ts.map +1 -0
- package/data/build/dist/shared/attachment-prompts.js +17 -0
- package/data/build/dist/shared/attachment-prompts.js.map +1 -0
- package/data/build/dist/shared/contracts/cli-adapter.d.ts +8 -1
- package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/errors.d.ts +2 -2
- package/data/build/dist/shared/contracts/interaction-presentation.d.ts +32 -0
- package/data/build/dist/shared/contracts/interaction-presentation.d.ts.map +1 -0
- package/data/build/dist/shared/contracts/interaction-presentation.js +2 -0
- package/data/build/dist/shared/contracts/interaction-presentation.js.map +1 -0
- package/data/build/dist/shared/contracts/interaction-translation.d.ts +53 -0
- package/data/build/dist/shared/contracts/interaction-translation.d.ts.map +1 -0
- package/data/build/dist/shared/contracts/interaction-translation.js +44 -0
- package/data/build/dist/shared/contracts/interaction-translation.js.map +1 -0
- package/data/build/dist/shared/contracts/session-translation.d.ts +75 -7
- package/data/build/dist/shared/contracts/session-translation.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/session-translation.js +132 -2
- package/data/build/dist/shared/contracts/session-translation.js.map +1 -1
- package/data/build/dist/shared/contracts/version.d.ts +4 -4
- package/data/build/dist/shared/contracts/version.js +3 -3
- package/data/build/dist/shared/index.d.ts +1 -1
- package/data/build/dist/shared/index.d.ts.map +1 -1
- package/data/build/dist/shared/index.js +1 -1
- package/data/build/dist/shared/index.js.map +1 -1
- package/data/build/dist/shared/translation-indicator.d.ts +26 -0
- package/data/build/dist/shared/translation-indicator.d.ts.map +1 -0
- package/data/build/dist/shared/translation-indicator.js +29 -0
- package/data/build/dist/shared/translation-indicator.js.map +1 -0
- package/package.json +35 -34
- package/profile/README.md +2 -2
- package/profile/package.json +3 -3
- package/profile/version.json +3 -3
- package/version.json +3 -3
|
@@ -25,15 +25,100 @@ window.__ModuleLoader__.load({
|
|
|
25
25
|
"antigravity",
|
|
26
26
|
"doubao"
|
|
27
27
|
];
|
|
28
|
+
const SESSION_TRANSLATION_LANGUAGES = [
|
|
29
|
+
"en",
|
|
30
|
+
"fr",
|
|
31
|
+
"de",
|
|
32
|
+
"ja",
|
|
33
|
+
"zh"
|
|
34
|
+
];
|
|
28
35
|
const DEFAULT_SESSION_TRANSLATION_SETTINGS = {
|
|
36
|
+
inputEnabled: true,
|
|
37
|
+
reasoningEnabled: true,
|
|
38
|
+
assistantEnabled: true,
|
|
29
39
|
inputLanguage: "en",
|
|
30
40
|
outputLanguage: "zh",
|
|
31
|
-
bilingual: false
|
|
41
|
+
bilingual: false,
|
|
42
|
+
nativeEnabled: false
|
|
32
43
|
};
|
|
33
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* 外部 Agent 适配器判定。
|
|
46
|
+
*
|
|
47
|
+
* 只表示「会话由插件的外部 CLI 驱动接管」,因此 DSH 原生 Agent 不在其中:该判定
|
|
48
|
+
* 还被用来把外部 Agent 的虚拟 Provider 排除在翻译模型目录之外,混入 `dsh` 会污染
|
|
49
|
+
* 这一语义。会话是否可翻译统一使用 {@link supportsSessionTranslation}。
|
|
50
|
+
*/
|
|
34
51
|
function isSessionTranslationAdapter(adapterId) {
|
|
35
52
|
return SESSION_TRANSLATION_ADAPTER_IDS.includes(adapterId);
|
|
36
53
|
}
|
|
54
|
+
/** 外部 Agent 与 DSH 原生 Agent 都支持会话翻译。 */
|
|
55
|
+
function supportsSessionTranslation(adapterId) {
|
|
56
|
+
return adapterId === "dsh" || isSessionTranslationAdapter(adapterId);
|
|
57
|
+
}
|
|
58
|
+
/** 判断任意字符串是否为受支持的翻译语言。 */
|
|
59
|
+
function isSessionTranslationLanguage(value) {
|
|
60
|
+
return typeof value === "string" && SESSION_TRANSLATION_LANGUAGES.includes(value);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 归一化翻译设置:旧设置快照可能缺少 `nativeEnabled`,非法语言回落到默认值。
|
|
64
|
+
*
|
|
65
|
+
* 与 `session-translation-service.ts` 的内部归一化保持同一语义,供客户端设置页在
|
|
66
|
+
* 写入前补齐字段,避免旧快照把新字段写丢。
|
|
67
|
+
*/
|
|
68
|
+
function normalizeSessionTranslationSettings(value) {
|
|
69
|
+
const fallback = DEFAULT_SESSION_TRANSLATION_SETTINGS;
|
|
70
|
+
if (value === void 0) return fallback;
|
|
71
|
+
const translationModel = normalizeTranslationModel(value.translationModel);
|
|
72
|
+
const translationModels = Array.isArray(value.translationModels) ? normalizeTranslationModels(value.translationModels) : void 0;
|
|
73
|
+
const translationRules = Array.isArray(value.translationRules) ? value.translationRules.filter((rule) => typeof rule === "string").map((rule) => rule.trim()).filter((rule) => rule !== "") : void 0;
|
|
74
|
+
return {
|
|
75
|
+
inputEnabled: value.inputEnabled !== false,
|
|
76
|
+
reasoningEnabled: value.reasoningEnabled !== false,
|
|
77
|
+
assistantEnabled: value.assistantEnabled !== false,
|
|
78
|
+
inputLanguage: isSessionTranslationLanguage(value.inputLanguage) ? value.inputLanguage : fallback.inputLanguage,
|
|
79
|
+
outputLanguage: isSessionTranslationLanguage(value.outputLanguage) ? value.outputLanguage : fallback.outputLanguage,
|
|
80
|
+
bilingual: value.bilingual === true,
|
|
81
|
+
nativeEnabled: value.nativeEnabled === true,
|
|
82
|
+
...translationModel === void 0 ? {} : { translationModel },
|
|
83
|
+
...translationModels === void 0 ? {} : { translationModels },
|
|
84
|
+
...translationRules === void 0 ? {} : { translationRules }
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function normalizeTranslationModels(values) {
|
|
88
|
+
const models = [];
|
|
89
|
+
const seen = /* @__PURE__ */ new Set();
|
|
90
|
+
for (const value of values) {
|
|
91
|
+
const model = normalizeTranslationModel(value);
|
|
92
|
+
if (model === void 0) continue;
|
|
93
|
+
const key = JSON.stringify([model.provider, model.model]);
|
|
94
|
+
if (seen.has(key)) continue;
|
|
95
|
+
seen.add(key);
|
|
96
|
+
models.push(model);
|
|
97
|
+
}
|
|
98
|
+
return models;
|
|
99
|
+
}
|
|
100
|
+
function normalizeTranslationModel(value) {
|
|
101
|
+
if (value === void 0 || value === null || typeof value.provider !== "string" || typeof value.model !== "string") return void 0;
|
|
102
|
+
const provider = value.provider.trim();
|
|
103
|
+
const model = value.model.trim();
|
|
104
|
+
return provider === "" || model === "" ? void 0 : {
|
|
105
|
+
provider,
|
|
106
|
+
model
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/** Preserve available metrics while accepting records saved before metrics existed. */
|
|
110
|
+
function readSessionTranslationMetrics(value) {
|
|
111
|
+
const record = asRecord(value);
|
|
112
|
+
const durationMs = record?.durationMs;
|
|
113
|
+
const totalTokens = record?.totalTokens;
|
|
114
|
+
return {
|
|
115
|
+
...typeof durationMs === "number" && Number.isFinite(durationMs) && durationMs >= 0 ? { durationMs } : {},
|
|
116
|
+
...typeof totalTokens === "number" && Number.isSafeInteger(totalTokens) && totalTokens >= 0 ? { totalTokens } : {}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function asRecord(value) {
|
|
120
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
|
|
121
|
+
}
|
|
37
122
|
//#endregion
|
|
38
123
|
Object.defineProperty(exports, "DEFAULT_SESSION_TRANSLATION_SETTINGS", {
|
|
39
124
|
enumerable: true,
|
|
@@ -47,6 +132,24 @@ window.__ModuleLoader__.load({
|
|
|
47
132
|
return isSessionTranslationAdapter;
|
|
48
133
|
}
|
|
49
134
|
});
|
|
135
|
+
Object.defineProperty(exports, "normalizeSessionTranslationSettings", {
|
|
136
|
+
enumerable: true,
|
|
137
|
+
get: function() {
|
|
138
|
+
return normalizeSessionTranslationSettings;
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
Object.defineProperty(exports, "readSessionTranslationMetrics", {
|
|
142
|
+
enumerable: true,
|
|
143
|
+
get: function() {
|
|
144
|
+
return readSessionTranslationMetrics;
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
Object.defineProperty(exports, "supportsSessionTranslation", {
|
|
148
|
+
enumerable: true,
|
|
149
|
+
get: function() {
|
|
150
|
+
return supportsSessionTranslation;
|
|
151
|
+
}
|
|
152
|
+
});
|
|
50
153
|
return module.exports;
|
|
51
154
|
}
|
|
52
155
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.session-translation.js","names":[],"sources":["../../../../src/shared/contracts/session-translation.ts"],"sourcesContent":["/** 会话翻译中间件支持的语言。 */\nexport type SessionTranslationLanguage = 'en' | 'fr' | 'de' | 'ja' | 'zh'\n\n/** 输出内容类别;工具调用、命令和路径不属于可翻译内容。 */\nexport type SessionTranslationOutputKind = 'reasoning' | 'assistant'\n\n/** 翻译请求使用的 DSH 原生模型;不保存密钥,只保存 provider/model 标识。 */\nexport interface SessionTranslationModel {\n readonly provider: string\n readonly model: string\n}\n\n/** 会话翻译中间件的持久化设置。 */\nexport interface SessionTranslationSettings {\n /** 用户输入送入外部 Agent 的目的语言。 */\n readonly inputLanguage: Exclude<SessionTranslationLanguage, 'zh'>\n /** 输出翻译语言;默认中文。 */\n readonly outputLanguage: SessionTranslationLanguage\n /** 是否在 UI 和历史回看中同时保留原文与译文。 */\n readonly bilingual: boolean\n /** 翻译模型;缺省时跟随 DSH 当前默认模型。 */\n readonly translationModel?: SessionTranslationModel\n}\n\nexport const SESSION_TRANSLATION_ADAPTER_IDS = [\n 'command-code', 'claude-code', 'kimi', 'gemini', 'pi', 'codex', 'opencode', 'grok',\n 'mcode', 'zcode', 'codebuddy', 'workbuddy', 'cursor-cli', 'kiro-cli', 'qoder', 'qoder-cn',\n 'antigravity', 'doubao',\n] as const\n\nexport const DEFAULT_SESSION_TRANSLATION_SETTINGS: SessionTranslationSettings = {\n inputLanguage: 'en',\n outputLanguage: 'zh',\n bilingual: false,\n}\n\n/** 所有内置外部 Agent 均可在会话模型选择器中开启翻译;DSH 原生 Agent 不在其中。 */\nexport function isSessionTranslationAdapter(adapterId: string): boolean {\n return (SESSION_TRANSLATION_ADAPTER_IDS as readonly string[]).includes(adapterId)\n}\n\nexport interface SessionTranslationRecord {\n readonly original: string\n readonly translated: string\n readonly sourceLanguage?: SessionTranslationLanguage\n readonly targetLanguage: SessionTranslationLanguage\n /** 回复文本所在的 DSH 内容块类型,供界面将原文入口放回对应内容块。 */\n readonly outputKind?: SessionTranslationOutputKind\n readonly bilingual: boolean\n /** 源语言与目标语言一致,因此未调用翻译模型。 */\n readonly alreadyTargetLanguage?: boolean\n /** 实际执行本次翻译的 DSH 原生模型;旧历史可能没有该字段。 */\n readonly model?: SessionTranslationModel\n /** 本次尝试失败并回退原文;前端显示警告状态。 */\n readonly failed?: boolean\n}\n\n/** 用户输入的原文、实际送出的译文和翻译模型,作为 DSH 历史元数据保存。 */\nexport interface SessionTranslationInputRecord {\n readonly original: string\n /** 包含附件提示等不翻译内容的最终 Provider prompt。 */\n readonly translated: string\n readonly sourceLanguage?: SessionTranslationLanguage\n readonly targetLanguage: Exclude<SessionTranslationLanguage, 'zh'>\n /** 源语言与目标语言一致,因此未调用翻译模型。 */\n readonly alreadyTargetLanguage?: boolean\n /** 实际执行本次翻译的 DSH 原生模型;旧历史可能没有该字段。 */\n readonly model?: SessionTranslationModel\n /** 翻译失败并回退原文;前端显示警告状态。 */\n readonly failed?: boolean\n}\n\n/** 外部 Agent 的历史上下文使用实际发送的译文;DSH 用户消息正文保留用户原文。 */\nexport function formatSessionTranslationInput(record: SessionTranslationInputRecord): string {\n return record.translated\n}\n\n/** DSH 的回复正文只保留译文;详情入口从元数据读取原文和模型。 */\nexport function formatSessionTranslationOutput(record: SessionTranslationRecord): string {\n return record.translated\n}\n"],"mappings":";;;;;;;EAwBA,MAAa,kCAAkC;GAC7C;GAAgB;GAAe;GAAQ;GAAU;GAAM;GAAS;GAAY;GAC5E;GAAS;GAAS;GAAa;GAAa;GAAc;GAAY;GAAS;GAC/E;GAAe;EACjB;EAEA,MAAa,uCAAmE;GAC9E,eAAe;GACf,gBAAgB;GAChB,WAAW;EACb;;EAGA,SAAgB,4BAA4B,WAA4B;GACtE,OAAQ,gCAAsD,SAAS,SAAS;EAClF"}
|
|
1
|
+
{"version":3,"file":"client.session-translation.js","names":[],"sources":["../../../../src/shared/contracts/session-translation.ts"],"sourcesContent":["/** 会话翻译中间件支持的语言。 */\nexport type SessionTranslationLanguage = 'en' | 'fr' | 'de' | 'ja' | 'zh'\n\n/** 输出内容类别;工具调用、命令和路径不属于可翻译内容。 */\nexport type SessionTranslationOutputKind = 'reasoning' | 'assistant'\n\n/** 翻译请求使用的 DSH 原生模型;不保存密钥,只保存 provider/model 标识。 */\nexport interface SessionTranslationModel {\n readonly provider: string\n readonly model: string\n}\n\n/** 会话翻译中间件的持久化设置。 */\nexport interface SessionTranslationSettings {\n /** Message categories are enabled unless explicitly disabled in older or current settings. */\n readonly inputEnabled?: boolean\n readonly reasoningEnabled?: boolean\n readonly assistantEnabled?: boolean\n /** 用户输入送入 Agent 的目的语言。 */\n readonly inputLanguage: SessionTranslationLanguage\n /** 输出翻译语言;默认中文。 */\n readonly outputLanguage: SessionTranslationLanguage\n /** 是否在 UI 和历史回看中同时保留原文与译文。 */\n readonly bilingual: boolean\n /** 翻译模型;缺省时跟随 DSH 当前默认模型。 */\n readonly translationModel?: SessionTranslationModel\n /** Models in priority order. An empty pool follows the DSH default; absent pools use the legacy selection. */\n readonly translationModels?: readonly SessionTranslationModel[]\n /** Custom prompt instructions that take precedence over the default translation prompts. */\n readonly translationRules?: readonly string[]\n /**\n * DSH 原生会话是否参与翻译;缺省关闭。\n *\n * 原生会话的回复由 DSH 自己写入 `assistant/message`,开启输出翻译后正文会变成\n * 译文、原文只留在块元数据里,因此不能默认改变既有行为。\n */\n readonly nativeEnabled?: boolean\n}\n\nexport const SESSION_TRANSLATION_ADAPTER_IDS = [\n 'command-code', 'claude-code', 'kimi', 'gemini', 'pi', 'codex', 'opencode', 'grok',\n 'mcode', 'zcode', 'codebuddy', 'workbuddy', 'cursor-cli', 'kiro-cli', 'qoder', 'qoder-cn',\n 'antigravity', 'doubao',\n] as const\n\n/** DSH 内置 Agent 的适配器标识;它没有外部驱动,但同样支持会话翻译。 */\nexport const DSH_NATIVE_SESSION_ADAPTER_ID = 'dsh' as const\n\nexport const SESSION_TRANSLATION_LANGUAGES = ['en', 'fr', 'de', 'ja', 'zh'] as const\n\nexport const DEFAULT_SESSION_TRANSLATION_SETTINGS: SessionTranslationSettings = {\n inputEnabled: true,\n reasoningEnabled: true,\n assistantEnabled: true,\n inputLanguage: 'en',\n outputLanguage: 'zh',\n bilingual: false,\n nativeEnabled: false,\n}\n\n/**\n * 外部 Agent 适配器判定。\n *\n * 只表示「会话由插件的外部 CLI 驱动接管」,因此 DSH 原生 Agent 不在其中:该判定\n * 还被用来把外部 Agent 的虚拟 Provider 排除在翻译模型目录之外,混入 `dsh` 会污染\n * 这一语义。会话是否可翻译统一使用 {@link supportsSessionTranslation}。\n */\nexport function isSessionTranslationAdapter(adapterId: string): boolean {\n return (SESSION_TRANSLATION_ADAPTER_IDS as readonly string[]).includes(adapterId)\n}\n\n/** 外部 Agent 与 DSH 原生 Agent 都支持会话翻译。 */\nexport function supportsSessionTranslation(adapterId: string): boolean {\n return adapterId === DSH_NATIVE_SESSION_ADAPTER_ID || isSessionTranslationAdapter(adapterId)\n}\n\n/** 判断任意字符串是否为受支持的翻译语言。 */\nexport function isSessionTranslationLanguage(value: unknown): value is SessionTranslationLanguage {\n return typeof value === 'string' && (SESSION_TRANSLATION_LANGUAGES as readonly string[]).includes(value)\n}\n\n/**\n * 归一化翻译设置:旧设置快照可能缺少 `nativeEnabled`,非法语言回落到默认值。\n *\n * 与 `session-translation-service.ts` 的内部归一化保持同一语义,供客户端设置页在\n * 写入前补齐字段,避免旧快照把新字段写丢。\n */\nexport function normalizeSessionTranslationSettings(value: SessionTranslationSettings | undefined): SessionTranslationSettings {\n const fallback = DEFAULT_SESSION_TRANSLATION_SETTINGS\n if (value === undefined) return fallback\n const translationModel = normalizeTranslationModel(value.translationModel)\n const translationModels = Array.isArray(value.translationModels) ? normalizeTranslationModels(value.translationModels) : undefined\n const translationRules = Array.isArray(value.translationRules)\n ? value.translationRules.filter((rule): rule is string => typeof rule === 'string').map((rule) => rule.trim()).filter((rule) => rule !== '')\n : undefined\n return {\n inputEnabled: value.inputEnabled !== false,\n reasoningEnabled: value.reasoningEnabled !== false,\n assistantEnabled: value.assistantEnabled !== false,\n inputLanguage: isSessionTranslationLanguage(value.inputLanguage) ? value.inputLanguage : fallback.inputLanguage,\n outputLanguage: isSessionTranslationLanguage(value.outputLanguage) ? value.outputLanguage : fallback.outputLanguage,\n bilingual: value.bilingual === true,\n nativeEnabled: value.nativeEnabled === true,\n ...(translationModel === undefined ? {} : { translationModel }),\n ...(translationModels === undefined ? {} : { translationModels }),\n ...(translationRules === undefined ? {} : { translationRules }),\n }\n}\n\nfunction normalizeTranslationModels(values: readonly SessionTranslationModel[]): readonly SessionTranslationModel[] {\n const models: SessionTranslationModel[] = []\n const seen = new Set<string>()\n for (const value of values) {\n const model = normalizeTranslationModel(value)\n if (model === undefined) continue\n const key = JSON.stringify([model.provider, model.model])\n if (seen.has(key)) continue\n seen.add(key)\n models.push(model)\n }\n return models\n}\n\nfunction normalizeTranslationModel(value: SessionTranslationModel | undefined): SessionTranslationModel | undefined {\n if (value === undefined || value === null || typeof value.provider !== 'string' || typeof value.model !== 'string') return undefined\n const provider = value.provider.trim()\n const model = value.model.trim()\n return provider === '' || model === '' ? undefined : { provider, model }\n}\n\nexport interface SessionTranslationFailure {\n readonly code: 'timeout' | 'cancelled' | 'rate-limit' | 'network' | 'unavailable' | 'invalid-response' | 'configuration' | 'provider'\n readonly retryable: boolean\n}\n\nexport interface SessionTranslationMetrics {\n /** Elapsed translation time, including model selection and fallback attempts. */\n readonly durationMs?: number\n /** Reported token consumption across model attempts, including cached input. */\n readonly totalTokens?: number\n}\n\n/** Preserve available metrics while accepting records saved before metrics existed. */\nexport function readSessionTranslationMetrics(value: unknown): SessionTranslationMetrics {\n const record = asRecord(value)\n const durationMs = record?.durationMs\n const totalTokens = record?.totalTokens\n return {\n ...(typeof durationMs === 'number' && Number.isFinite(durationMs) && durationMs >= 0 ? { durationMs } : {}),\n ...(typeof totalTokens === 'number' && Number.isSafeInteger(totalTokens) && totalTokens >= 0 ? { totalTokens } : {}),\n }\n}\n\nexport interface SessionTranslationRecord extends SessionTranslationMetrics {\n readonly original: string\n readonly translated: string\n readonly sourceLanguage?: SessionTranslationLanguage\n readonly targetLanguage: SessionTranslationLanguage\n /** 回复文本所在的 DSH 内容块类型,供界面将原文入口放回对应内容块。 */\n readonly outputKind?: SessionTranslationOutputKind\n readonly bilingual: boolean\n /** 源语言与目标语言一致,因此未调用翻译模型。 */\n readonly alreadyTargetLanguage?: boolean\n /** 实际执行本次翻译的 DSH 原生模型;旧历史可能没有该字段。 */\n readonly model?: SessionTranslationModel\n /** 本次尝试失败并回退原文;前端显示警告状态。 */\n readonly failed?: boolean\n /** Structured failure details; absent in older translation records. */\n readonly failure?: SessionTranslationFailure\n}\n\nexport type SessionTranslationRecoveryChoice = 'retry' | 'send' | 'cancel'\n\n/** A failed submission remains on the host until the user makes a choice. */\nexport interface SessionTranslationPendingInput {\n readonly id: string\n readonly sessionId: string\n readonly record: SessionTranslationRecord\n}\n\n/** 用户输入的原文、实际送出的译文和翻译模型,作为 DSH 历史元数据保存。 */\nexport interface SessionTranslationInputRecord extends SessionTranslationMetrics {\n readonly original: string\n /** 包含附件提示等不翻译内容的最终 Provider prompt。 */\n readonly translated: string\n readonly sourceLanguage?: SessionTranslationLanguage\n readonly targetLanguage: SessionTranslationLanguage\n /** 源语言与目标语言一致,因此未调用翻译模型。 */\n readonly alreadyTargetLanguage?: boolean\n /** 实际执行本次翻译的 DSH 原生模型;旧历史可能没有该字段。 */\n readonly model?: SessionTranslationModel\n /** 翻译失败并回退原文;前端显示警告状态。 */\n readonly failed?: boolean\n}\n\n/**\n * 从 DSH 原生用户消息的 source 元数据读取输入翻译记录。\n *\n * 该字段由 `agent/pre-step` 写入并随 `user/message` 持久化;未知或不完整的历史\n * 结构一律返回 undefined,调用方按「没有翻译」处理。\n */\nexport function readNativeTranslationRecord(source: unknown): SessionTranslationInputRecord | undefined {\n const record = asRecord(source)\n const candidate = asRecord(record?.codingnsTranslationInput)\n if (candidate === null) return undefined\n if (typeof candidate.original !== 'string' || typeof candidate.translated !== 'string') return undefined\n if (candidate.original.trim() === '' || candidate.translated.trim() === '') return undefined\n const targetLanguage = isSessionTranslationLanguage(candidate.targetLanguage) ? candidate.targetLanguage : undefined\n if (targetLanguage === undefined) return undefined\n const model = normalizeTranslationModel(asRecord(candidate.model) as SessionTranslationModel | undefined)\n const sourceLanguage = isSessionTranslationLanguage(candidate.sourceLanguage) ? candidate.sourceLanguage : undefined\n return {\n original: candidate.original,\n translated: candidate.translated,\n targetLanguage,\n ...(sourceLanguage === undefined ? {} : { sourceLanguage }),\n ...(candidate.alreadyTargetLanguage === true ? { alreadyTargetLanguage: true } : {}),\n ...(candidate.failed === true ? { failed: true } : {}),\n ...(model === undefined ? {} : { model }),\n ...readSessionTranslationMetrics(candidate),\n }\n}\n\n/** 输入记录转换为详情弹层使用的通用记录;`outputKind` 缺省表示输入方向。 */\nexport function toSessionTranslationRecord(\n record: SessionTranslationInputRecord,\n options: { readonly outputKind?: SessionTranslationOutputKind; readonly bilingual?: boolean } = {},\n): SessionTranslationRecord {\n return {\n original: record.original,\n translated: record.translated,\n targetLanguage: record.targetLanguage,\n bilingual: options.bilingual === true,\n ...(options.outputKind === undefined ? {} : { outputKind: options.outputKind }),\n ...(record.sourceLanguage === undefined ? {} : { sourceLanguage: record.sourceLanguage }),\n ...(record.alreadyTargetLanguage === true ? { alreadyTargetLanguage: true } : {}),\n ...(record.failed === true ? { failed: true } : {}),\n ...(record.model === undefined ? {} : { model: record.model }),\n ...readSessionTranslationMetrics(record),\n }\n}\n\nfunction asRecord(value: unknown): Record<string, any> | null {\n return typeof value === 'object' && value !== null && !Array.isArray(value) ? value as Record<string, any> : null\n}\n\n/** 外部 Agent 的历史上下文使用实际发送的译文;DSH 用户消息正文保留用户原文。 */\nexport function formatSessionTranslationInput(record: SessionTranslationInputRecord): string {\n return record.translated\n}\n\n/** Return the output translation; native DSH history keeps the original and the client reads this record. */\nexport function formatSessionTranslationOutput(record: SessionTranslationRecord): string {\n return record.translated\n}\n"],"mappings":"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"}
|
|
@@ -1192,32 +1192,78 @@ window.__ModuleLoader__.load({
|
|
|
1192
1192
|
"cli.adapterDisabled": "{name} disabled",
|
|
1193
1193
|
"cli.translationConversation": "Translate conversation",
|
|
1194
1194
|
"cli.translationConversationToggle": "Toggle conversation translation",
|
|
1195
|
+
"cli.translationSettings": "Conversation translation settings",
|
|
1196
|
+
"cli.translationSettingsClose": "Close",
|
|
1197
|
+
"cli.translationSettingsDescription": "Choose which messages to translate in conversations with translation enabled.",
|
|
1198
|
+
"cli.translationUserMessages": "Translate user messages",
|
|
1199
|
+
"cli.translationThinkingMessages": "Translate AI thinking messages",
|
|
1200
|
+
"cli.translationAssistantMessages": "Translate AI final messages",
|
|
1195
1201
|
"lan.fieldListenPort": "listen port",
|
|
1196
1202
|
"lan.fieldDshPort": "DSH local port",
|
|
1197
1203
|
"lan.fieldMustBeNumber": "{field} must be a number",
|
|
1198
1204
|
"lan.fieldMustBeInteger": "{field} must be an integer from {minimum} to 65535",
|
|
1199
1205
|
"workspace.sessionSettingsSaved": "Workspace session settings saved",
|
|
1200
1206
|
"feature.sessionTranslation.label": "Session translation",
|
|
1201
|
-
"feature.sessionTranslation.description": "Translate selected external Agent requests and replies while keeping tools, commands, paths, and original history unchanged.",
|
|
1207
|
+
"feature.sessionTranslation.description": "Translate selected external Agent requests and replies while keeping tools, commands, paths, and original history unchanged. Control DSH native session translation using the switch in the conversation model selector.",
|
|
1202
1208
|
"translation.inputTitle": "Translate requests before sending",
|
|
1203
1209
|
"translation.inputLanguage": "Request language",
|
|
1204
|
-
"translation.outputTitle": "Translate
|
|
1210
|
+
"translation.outputTitle": "Translate the AI’s reasoning and final messages into the language specified below",
|
|
1205
1211
|
"translation.outputLanguage": "Reply language",
|
|
1206
|
-
"translation.modelTitle": "Translation model",
|
|
1212
|
+
"translation.modelTitle": "Translation model pool",
|
|
1213
|
+
"translation.rulesTitle": "Translation rules",
|
|
1214
|
+
"translation.rulesHelp": "Rules apply to input, reasoning, and replies, including text already in the target language. They take priority over the default translation prompts.",
|
|
1215
|
+
"translation.rulesEmpty": "No custom rules. The default translation prompts apply.",
|
|
1216
|
+
"translation.ruleAdd": "Add rule",
|
|
1217
|
+
"translation.ruleEdit": "Edit rule {number}",
|
|
1218
|
+
"translation.ruleRemove": "Remove rule {number}",
|
|
1219
|
+
"translation.ruleText": "Rule instructions",
|
|
1220
|
+
"translation.rulePlaceholder": "For example: Keep product names in their original language.",
|
|
1221
|
+
"translation.ruleSave": "Save rule",
|
|
1222
|
+
"translation.ruleSaving": "Saving…",
|
|
1223
|
+
"translation.ruleCancel": "Cancel",
|
|
1207
1224
|
"translation.modelFollowDefault": "Use the default DSH model",
|
|
1225
|
+
"translation.modelResetTitle": "Use the default DSH model?",
|
|
1226
|
+
"translation.modelResetHelp": "This will clear all {count} models and their priority order from the pool, then follow the default DSH model. Continue?",
|
|
1227
|
+
"translation.modelResetConfirm": "Clear pool and use default",
|
|
1208
1228
|
"translation.modelUnavailable": "Saved model is unavailable",
|
|
1209
1229
|
"translation.modelLoading": "Loading available DSH models…",
|
|
1210
1230
|
"translation.modelEmpty": "No DSH text models are available.",
|
|
1211
|
-
"translation.modelHelp": "
|
|
1231
|
+
"translation.modelHelp": "Drag to set priority; the first model is tried first. If all models fail, the original text is kept.",
|
|
1232
|
+
"translation.modelDefaultActive": "No models selected; using the default DSH model.",
|
|
1233
|
+
"translation.modelPriority": "Priority {priority}",
|
|
1234
|
+
"translation.modelPoolCount": "{count} models · ordered by priority",
|
|
1235
|
+
"translation.modelPoolEmpty": "Add models to set up automatic fallback.",
|
|
1236
|
+
"translation.modelAdd": "Add models",
|
|
1237
|
+
"translation.modelRemove": "Remove {model}",
|
|
1238
|
+
"translation.modelDrag": "Reorder {model}",
|
|
1239
|
+
"translation.modelDragHelp": "Drag to reorder, or use the Up and Down arrow keys.",
|
|
1240
|
+
"translation.modelReordered": "{model} moved to priority {priority}",
|
|
1241
|
+
"translation.modelPickerTitle": "Add translation models",
|
|
1242
|
+
"translation.modelPickerHelp": "Select models to add to the end of the pool. Drag them to adjust priority after adding.",
|
|
1243
|
+
"translation.modelSearch": "Search models or providers",
|
|
1244
|
+
"translation.modelPickerCount": "{count} selected",
|
|
1245
|
+
"translation.modelAddSelected": "Add selected ({count})",
|
|
1246
|
+
"translation.modelCancel": "Cancel",
|
|
1247
|
+
"translation.modelNoMatches": "No matching models.",
|
|
1248
|
+
"translation.modelAllAdded": "All available models are already in the pool.",
|
|
1212
1249
|
"translation.detailsTitle": "Translation details",
|
|
1213
1250
|
"translation.viewDetails": "View translation details",
|
|
1214
1251
|
"translation.statusTranslated": "Translated",
|
|
1252
|
+
"translation.statusTranslating": "Translating…",
|
|
1253
|
+
"translation.progressHelp": "Preparing and translating your message. The translation result will be available when this finishes.",
|
|
1215
1254
|
"translation.statusFailed": "Translation failed; original kept",
|
|
1255
|
+
"translation.retry": "Retry translation",
|
|
1256
|
+
"translation.sendDirectly": "Send directly",
|
|
1257
|
+
"translation.cancelSending": "Cancel sending",
|
|
1258
|
+
"translation.inputFailedTitle": "Message translation failed",
|
|
1259
|
+
"translation.inputFailedHelp": "Your message has not been sent. Choose how to continue.",
|
|
1260
|
+
"translation.decisionFailed": "Could not apply your choice. Please try again.",
|
|
1216
1261
|
"translation.statusNotNeeded": "Already in the target language; translation skipped",
|
|
1217
1262
|
"translation.detectedLanguage": "Detected language",
|
|
1218
1263
|
"translation.modelNotUsed": "Not used; translation was unnecessary",
|
|
1219
1264
|
"translation.originalText": "Original text",
|
|
1220
|
-
"translation.translatedText": "
|
|
1265
|
+
"translation.translatedText": "Translation",
|
|
1266
|
+
"translation.actualSentText": "Actual sent text:",
|
|
1221
1267
|
"translation.modelUsed": "Model used",
|
|
1222
1268
|
"translation.modelUnknown": "Model information unavailable",
|
|
1223
1269
|
"translation.modelOfficial": "DeepSeek official",
|
|
@@ -1247,33 +1293,79 @@ window.__ModuleLoader__.load({
|
|
|
1247
1293
|
"cli.adapterDisabled": "已停用 {name}",
|
|
1248
1294
|
"cli.translationConversation": "翻译对话",
|
|
1249
1295
|
"cli.translationConversationToggle": "切换对话翻译",
|
|
1296
|
+
"cli.translationSettings": "对话翻译设置",
|
|
1297
|
+
"cli.translationSettingsClose": "关闭",
|
|
1298
|
+
"cli.translationSettingsDescription": "选择已开启对话翻译的会话中需要翻译的消息类型。",
|
|
1299
|
+
"cli.translationUserMessages": "翻译用户消息",
|
|
1300
|
+
"cli.translationThinkingMessages": "翻译 AI 思考消息",
|
|
1301
|
+
"cli.translationAssistantMessages": "翻译 AI 正式消息",
|
|
1250
1302
|
"lan.fieldListenPort": "监听端口",
|
|
1251
1303
|
"lan.fieldDshPort": "DSH 本地端口",
|
|
1252
1304
|
"lan.fieldMustBeNumber": "{field} 必须是数字",
|
|
1253
1305
|
"lan.fieldMustBeInteger": "{field} 必须是 {minimum} 到 65535 的整数",
|
|
1254
1306
|
"workspace.sessionSettingsSaved": "工作区会话设置已保存",
|
|
1255
1307
|
"feature.sessionTranslation.label": "会话翻译",
|
|
1256
|
-
"feature.sessionTranslation.description": "为选定的外部 Agent
|
|
1308
|
+
"feature.sessionTranslation.description": "为选定的外部 Agent 翻译请求和回复,同时保留工具、命令、路径与原始历史;DSH 原生会话翻译由对话框模型选择器中的会话翻译开关控制。",
|
|
1257
1309
|
"translation.inputTitle": "发送前翻译请求",
|
|
1258
1310
|
"translation.inputLanguage": "请求目标语言",
|
|
1259
|
-
"translation.outputTitle": "
|
|
1311
|
+
"translation.outputTitle": "AI的思考内容和正式消息翻译为以下指定语言",
|
|
1260
1312
|
"translation.outputLanguage": "回复语言",
|
|
1261
|
-
"translation.modelTitle": "
|
|
1313
|
+
"translation.modelTitle": "翻译模型池",
|
|
1314
|
+
"translation.rulesTitle": "翻译规则",
|
|
1315
|
+
"translation.rulesHelp": "规则适用于输入、思考和回复,包括已经是目标语言的文本。规则的优先级高于默认翻译提示词。",
|
|
1316
|
+
"translation.rulesEmpty": "尚未添加自定义规则,使用默认翻译提示词。",
|
|
1317
|
+
"translation.ruleAdd": "添加规则",
|
|
1318
|
+
"translation.ruleEdit": "编辑规则 {number}",
|
|
1319
|
+
"translation.ruleRemove": "移除规则 {number}",
|
|
1320
|
+
"translation.ruleText": "规则内容",
|
|
1321
|
+
"translation.rulePlaceholder": "例如:产品名称保留原文,不进行翻译。",
|
|
1322
|
+
"translation.ruleSave": "保存规则",
|
|
1323
|
+
"translation.ruleSaving": "正在保存…",
|
|
1324
|
+
"translation.ruleCancel": "取消",
|
|
1262
1325
|
"translation.modelFollowDefault": "跟随 DSH 默认模型",
|
|
1326
|
+
"translation.modelResetTitle": "确认跟随 DSH 默认模型?",
|
|
1327
|
+
"translation.modelResetHelp": "这将清空模型池中的全部 {count} 个模型及其优先级顺序,并改为跟随 DSH 默认模型。是否继续?",
|
|
1328
|
+
"translation.modelResetConfirm": "清空并跟随默认模型",
|
|
1263
1329
|
"translation.modelUnavailable": "已保存的模型当前不可用",
|
|
1264
1330
|
"translation.modelLoading": "正在加载可用的 DSH 模型…",
|
|
1265
1331
|
"translation.modelEmpty": "当前没有可用的 DSH 文本模型。",
|
|
1266
|
-
"translation.modelHelp": "
|
|
1332
|
+
"translation.modelHelp": "拖拽调整优先级,优先使用列表首个模型;全部失败时保留原文。",
|
|
1333
|
+
"translation.modelDefaultActive": "未选择模型,当前跟随 DSH 默认模型。",
|
|
1334
|
+
"translation.modelPriority": "优先级 {priority}",
|
|
1335
|
+
"translation.modelPoolCount": "{count} 个模型 · 按优先级排列",
|
|
1336
|
+
"translation.modelPoolEmpty": "添加模型,配置自动回退顺序。",
|
|
1337
|
+
"translation.modelAdd": "添加模型",
|
|
1338
|
+
"translation.modelRemove": "移除 {model}",
|
|
1339
|
+
"translation.modelDrag": "调整 {model} 的顺序",
|
|
1340
|
+
"translation.modelDragHelp": "拖拽调整顺序,也可使用上下方向键。",
|
|
1341
|
+
"translation.modelReordered": "{model} 已移至优先级 {priority}",
|
|
1342
|
+
"translation.modelPickerTitle": "添加翻译模型",
|
|
1343
|
+
"translation.modelPickerHelp": "选择模型后添加到模型池末尾,添加后可拖拽调整优先级。",
|
|
1344
|
+
"translation.modelSearch": "搜索模型或供应商",
|
|
1345
|
+
"translation.modelPickerCount": "已选择 {count} 个",
|
|
1346
|
+
"translation.modelAddSelected": "添加所选({count})",
|
|
1347
|
+
"translation.modelCancel": "取消",
|
|
1348
|
+
"translation.modelNoMatches": "没有匹配的模型。",
|
|
1349
|
+
"translation.modelAllAdded": "所有可用模型均已添加到模型池。",
|
|
1267
1350
|
"translation.detailsTitle": "翻译详情",
|
|
1268
1351
|
"translation.viewDetails": "查看翻译详情",
|
|
1269
1352
|
"translation.statusTranslated": "已翻译",
|
|
1353
|
+
"translation.statusTranslating": "正在翻译…",
|
|
1354
|
+
"translation.progressHelp": "正在准备并翻译消息,完成后可查看翻译结果。",
|
|
1270
1355
|
"translation.statusFailed": "翻译失败,已保留原文",
|
|
1356
|
+
"translation.retry": "重试翻译",
|
|
1357
|
+
"translation.sendDirectly": "直接发送",
|
|
1358
|
+
"translation.cancelSending": "取消发送",
|
|
1359
|
+
"translation.inputFailedTitle": "消息翻译失败",
|
|
1360
|
+
"translation.inputFailedHelp": "消息尚未发送,请选择如何继续。",
|
|
1361
|
+
"translation.decisionFailed": "未能应用你的选择,请重试。",
|
|
1271
1362
|
"translation.statusNotNeeded": "原文已是目标语言,无需翻译",
|
|
1272
1363
|
"translation.detectedLanguage": "检测到的语言",
|
|
1273
1364
|
"translation.modelNotUsed": "未调用,原文无需翻译",
|
|
1274
1365
|
"translation.originalText": "原文",
|
|
1275
|
-
"translation.translatedText": "译文
|
|
1276
|
-
"translation.
|
|
1366
|
+
"translation.translatedText": "译文",
|
|
1367
|
+
"translation.actualSentText": "实际发送文本:",
|
|
1368
|
+
"translation.modelUsed": "翻译模型",
|
|
1277
1369
|
"translation.modelUnknown": "暂无模型信息",
|
|
1278
1370
|
"translation.modelOfficial": "DeepSeek 官方",
|
|
1279
1371
|
"translation.modelThirdParty": "第三方",
|