@kikkimo/claude-launcher 3.0.0 → 3.1.0
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/CHANGELOG.md +28 -0
- package/README.md +7 -4
- package/claude-launcher +634 -38
- package/docs/README-zh.md +7 -4
- package/lib/api-manager.js +501 -67
- package/lib/i18n/locales/de.js +144 -6
- package/lib/i18n/locales/en.js +150 -6
- package/lib/i18n/locales/es.js +144 -6
- package/lib/i18n/locales/fr.js +144 -6
- package/lib/i18n/locales/it.js +144 -6
- package/lib/i18n/locales/ja.js +144 -6
- package/lib/i18n/locales/ko.js +144 -6
- package/lib/i18n/locales/pt.js +144 -6
- package/lib/i18n/locales/ru.js +144 -6
- package/lib/i18n/locales/zh-TW.js +144 -6
- package/lib/i18n/locales/zh.js +150 -6
- package/lib/launcher.js +46 -17
- package/lib/presets/providers.js +143 -39
- package/lib/ui/api-editor.js +668 -210
- package/lib/ui/i18n-labels.js +16 -0
- package/lib/ui/menu.js +19 -13
- package/lib/ui/screen.js +125 -125
- package/lib/utils/version-checker.js +6 -5
- package/lib/validators.js +102 -1
- package/package.json +2 -2
|
@@ -38,6 +38,7 @@ module.exports = {
|
|
|
38
38
|
model_upgrade_notification: "模型升級提示",
|
|
39
39
|
telemetry: "Anthropic 遙測資料",
|
|
40
40
|
api_launch_mode: "第三方API啟動模式",
|
|
41
|
+
no_flicker: "停用螢幕閃爍",
|
|
41
42
|
back: "返回主選單"
|
|
42
43
|
},
|
|
43
44
|
api_select: {
|
|
@@ -122,7 +123,8 @@ module.exports = {
|
|
|
122
123
|
failed_add: "新增API失敗:{0}",
|
|
123
124
|
failed_remove: "刪除API失敗:{0}",
|
|
124
125
|
failed_switch: "切換API失敗:{0}",
|
|
125
|
-
invalid_index: "無效的API索引"
|
|
126
|
+
invalid_index: "無效的API索引",
|
|
127
|
+
not_found: "未找到API:{0}",
|
|
126
128
|
},
|
|
127
129
|
password: {
|
|
128
130
|
empty: "密碼不能為空",
|
|
@@ -194,7 +196,16 @@ module.exports = {
|
|
|
194
196
|
exporting: "匯出設定中...",
|
|
195
197
|
importing: "匯入設定中...",
|
|
196
198
|
switching_language: "切換語言中...",
|
|
197
|
-
initializing: "初始化中..."
|
|
199
|
+
initializing: "初始化中...",
|
|
200
|
+
overridden: "已覆寫",
|
|
201
|
+
not_set: "(未設定)",
|
|
202
|
+
default: "預設",
|
|
203
|
+
enabled: "啟用",
|
|
204
|
+
disabled: "停用",
|
|
205
|
+
current_value: "目前生效",
|
|
206
|
+
recommended_value: "建議設定",
|
|
207
|
+
|
|
208
|
+
auto: "(未設定)",
|
|
198
209
|
},
|
|
199
210
|
|
|
200
211
|
// API詳情和標籤
|
|
@@ -235,7 +246,24 @@ module.exports = {
|
|
|
235
246
|
duplicate: 'This change would create a duplicate configuration',
|
|
236
247
|
provider_url_mismatch: 'Provider and URL may be inconsistent',
|
|
237
248
|
provider_url_mismatch_detail: 'Provider: {0} / URL suggests: {1}',
|
|
238
|
-
url_provider_hint: "URL matches provider '{0}' but current provider is '{1}'. Consider updating Provider field."
|
|
249
|
+
url_provider_hint: "URL matches provider '{0}' but current provider is '{1}'. Consider updating Provider field.",
|
|
250
|
+
field_model_env_vars: '模型環境變數',
|
|
251
|
+
field_runtime_env_vars: '執行參數',
|
|
252
|
+
env_inherited: '繼承',
|
|
253
|
+
env_disabled: '已關閉 [off]',
|
|
254
|
+
manage_custom_env_vars: '管理自訂變數...',
|
|
255
|
+
no_custom_vars: '(無自訂變數)',
|
|
256
|
+
add_custom_var: '+ 新增自訂變數',
|
|
257
|
+
enter_custom_key: '輸入環境變數名稱:',
|
|
258
|
+
enter_custom_value: '輸入值:',
|
|
259
|
+
warn_model_not_in_provider: '警告: 模型 "{0}" 不在 {1} 模型列表中。請手動更新模型。',
|
|
260
|
+
warn_base_url_not_updated: '提示: Base URL 未自動更新 ({0})。如需更改請手動修改。',
|
|
261
|
+
warn_mixed_provider: '注意: Provider、Base URL 和 Model 來自不同供應商。請確認是否為有意配置。',
|
|
262
|
+
},
|
|
263
|
+
add: {
|
|
264
|
+
duplicate_detected: 'API "{0}" 已存在。跳轉編輯執行參數?',
|
|
265
|
+
jump_to_edit: '跳轉編輯已有 API',
|
|
266
|
+
cancel: '取消',
|
|
239
267
|
}
|
|
240
268
|
},
|
|
241
269
|
|
|
@@ -370,6 +398,10 @@ module.exports = {
|
|
|
370
398
|
enter_choice: "輸入您的選擇({0},或任意其他鍵返回主選單):",
|
|
371
399
|
arrow_keys_not_available: "方向鍵不可用。輸入選擇編號 (1-{0}):",
|
|
372
400
|
enter_choice_prompt: "[>] 輸入您的選擇 (1-2,或任意其他鍵返回主選單):",
|
|
401
|
+
input_1_to_n_or_q: "輸入 1-{0} 或 q:",
|
|
402
|
+
invalid_selection: "無效選擇。請輸入 1-{0}。",
|
|
403
|
+
enter_to_edit: "Enter 鍵編輯,ESC 鍵返回",
|
|
404
|
+
enter_to_select: "Enter 鍵選擇,ESC 鍵返回",
|
|
373
405
|
action: {
|
|
374
406
|
edit: 'edit',
|
|
375
407
|
remove: 'remove',
|
|
@@ -656,7 +688,7 @@ module.exports = {
|
|
|
656
688
|
select_mode_active_none: '無',
|
|
657
689
|
no_api_configured: '未設定第三方API,請先在「第三方API管理」中新增',
|
|
658
690
|
api_management_info: '已設定 {0} 個API,目前啟用: {1}',
|
|
659
|
-
config_summary: '語言: {0} | 啟動模式: {1} | 遙測: {2}',
|
|
691
|
+
config_summary: '語言: {0} | 啟動模式: {1} | 遙測: {2} | 停用閃爍: {3}',
|
|
660
692
|
edit_password_required: '🔒 Password verification required to edit API configuration',
|
|
661
693
|
remove_password_required: '🔒 Password verification required to remove API',
|
|
662
694
|
export_password_required: '🔒 Password verification required to export configuration',
|
|
@@ -666,22 +698,128 @@ module.exports = {
|
|
|
666
698
|
auto_upgrade: '自動偵測並升級第三方API的模型版本',
|
|
667
699
|
upgrade_notification: '在主選單頂部顯示模型可升級的通知',
|
|
668
700
|
telemetry: '關閉後啟動時注入 DISABLE_TELEMETRY=1,建議關閉',
|
|
669
|
-
launch_mode: '直接模式: 使用啟用API啟動 / 選擇模式: 啟動前從列表選擇'
|
|
701
|
+
launch_mode: '直接模式: 使用啟用API啟動 / 選擇模式: 啟動前從列表選擇',
|
|
702
|
+
no_flicker: '停用螢幕閃爍 (CLAUDE_CODE_NO_FLICKER)'
|
|
670
703
|
},
|
|
671
704
|
api_select: {
|
|
672
705
|
info: 'API: {0}',
|
|
673
706
|
detail: '提供商: {0} | 模型: {1}',
|
|
674
707
|
usage: '使用次數: {0} | 最後使用: {1}'
|
|
708
|
+
},
|
|
709
|
+
model: {
|
|
710
|
+
desc: '指定各場景使用的模型版本',
|
|
711
|
+
sonnet: '對應 Claude Code 的 Sonnet 檔位',
|
|
712
|
+
sonnet_detail: "Claude Code 日常對話使用的預設模型,平衡速度與推理能力。對應環境變數 [ANTHROPIC_DEFAULT_SONNET_MODEL]。目前值由模型編排按同代 Sonnet 檔位自動匹配",
|
|
713
|
+
opus: '對應 Claude Code 的 Opus 檔位',
|
|
714
|
+
opus_detail: "處理複雜推理、深度分析任務時使用的模型,能力最強。對應環境變數 [ANTHROPIC_DEFAULT_OPUS_MODEL]。目前值由模型編排按同代 Opus 檔位自動匹配",
|
|
715
|
+
haiku: '對應 Claude Code 的 Haiku 檔位',
|
|
716
|
+
haiku_detail: "輕量快速場景使用的模型,適合簡單任務和高頻呼叫。對應環境變數 [ANTHROPIC_DEFAULT_HAIKU_MODEL]。目前值由模型編排按同代高速變體自動匹配",
|
|
717
|
+
subagent: '子任務或分支執行時優先使用的模型',
|
|
718
|
+
subagent_detail: "子任務、分支執行時使用的模型,建議與快速模型一致以降低延遲和成本。對應環境變數 [CLAUDE_CODE_SUBAGENT_MODEL]。目前值由模型編排自動填入",
|
|
719
|
+
custom_option: '額外加入 /model 選擇器的模型 ID',
|
|
720
|
+
custom_option_detail: "向第三方 API 發起請求時使用的模型 ID。對應環境變數 [ANTHROPIC_CUSTOM_MODEL_OPTION]。目前值由模型編排自動填入",
|
|
721
|
+
custom_name: '自訂模型在 /model 中的顯示名稱',
|
|
722
|
+
custom_name_detail: "該模型在 /model 命令選擇器中的顯示名稱。對應環境變數 [ANTHROPIC_CUSTOM_MODEL_OPTION_NAME]。目前值由模型編排自動填入",
|
|
723
|
+
},
|
|
724
|
+
runtime: {
|
|
725
|
+
desc: '逾時、署名、網路行為等開關',
|
|
726
|
+
timeout: '控制 API 呼叫的最長等待時間',
|
|
727
|
+
timeout_detail: "API 呼叫最大等待時間(毫秒),逾時後請求自動中斷。對應環境變數 [API_TIMEOUT_MS]。",
|
|
728
|
+
attribution: '控制是否在輸出末尾附加署名標記',
|
|
729
|
+
attribution_detail: "控制是否在 AI 輸出末尾附加署名標記(如 Generated by Claude)。對應環境變數 [CLAUDE_CODE_ATTRIBUTION_HEADER]。",
|
|
730
|
+
nonessential: '控制是否減少非核心網路請求',
|
|
731
|
+
nonessential_detail: "開啟後減少版本檢查等後台網路請求,降低 API 開銷。對應環境變數 [CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC]。",
|
|
732
|
+
effort: '控制模型回答時投入的推理深度',
|
|
733
|
+
effort_detail: "控制模型回答時投入的推理深度,值越高推理越深但耗時越長。對應環境變數 [CLAUDE_CODE_EFFORT_LEVEL]。可選值:low / medium / high / xhigh / max / auto",
|
|
734
|
+
experimental: '停用 Anthropic 實驗性 Beta 功能,提高介面穩定性',
|
|
735
|
+
experimental_detail: "開啟後停用 Anthropic 實驗性 Beta 功能,提高介面穩定性。對應環境變數 [CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS]。",
|
|
736
|
+
nonstreaming: '控制串流請求失敗時是否禁止回退為非串流模式',
|
|
737
|
+
nonstreaming_detail: "開啟後串流請求失敗不會自動降級為非串流模式,適用於僅支援串流的第三方 API。對應環境變數 [CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK]。",
|
|
738
|
+
effort_values: "可選值: low, medium, high, xhigh, max, auto",
|
|
739
|
+
source_manual: "目前值由使用者手動設定",
|
|
740
|
+
source_provider: "目前值來自 Provider 推薦預設",
|
|
741
|
+
source_default: "目前值未設定,將使用 Claude Code 內建預設",
|
|
742
|
+
},
|
|
743
|
+
custom: {
|
|
744
|
+
desc: '注入啟動環境的額外鍵值對'
|
|
675
745
|
}
|
|
676
746
|
},
|
|
677
747
|
|
|
748
|
+
page: {
|
|
749
|
+
model_runtime_config: '模型與執行設定',
|
|
750
|
+
model_config: '模型設定',
|
|
751
|
+
runtime_config: '執行設定',
|
|
752
|
+
custom_vars: '自訂變數'
|
|
753
|
+
},
|
|
754
|
+
|
|
755
|
+
action: {
|
|
756
|
+
follow_recommended: '跟隨建議',
|
|
757
|
+
force_enable: '強制啟用',
|
|
758
|
+
force_disable: '強制停用',
|
|
759
|
+
custom_input: '自訂輸入',
|
|
760
|
+
edit_value: '編輯值',
|
|
761
|
+
delete_variable: '刪除變數',
|
|
762
|
+
add_variable: '新增變數',
|
|
763
|
+
finish_create: '完成建立(使用目前設定)',
|
|
764
|
+
cancel_config: "取消設定",
|
|
765
|
+
please_choose: '請選擇'
|
|
766
|
+
},
|
|
767
|
+
|
|
768
|
+
prompt: {
|
|
769
|
+
empty_to_restore: '輸入空值恢復為跟隨建議',
|
|
770
|
+
exit_to_cancel: '輸入 exit 取消'
|
|
771
|
+
},
|
|
772
|
+
|
|
773
|
+
add_api: {
|
|
774
|
+
step_n_of_m: '新增 API · 步驟 {0}/{1}',
|
|
775
|
+
confirm_config: '確認設定',
|
|
776
|
+
finish_hint: '系統已根據 provider 和 model 自動填入建議設定',
|
|
777
|
+
confirm_page_prompt: "可直接完成建立(配置項使用推薦的預設值),或選擇下方配置項進行自訂修改",
|
|
778
|
+
duplicate_title: '該 API 連線已存在',
|
|
779
|
+
duplicate_enter_config: '進入已有 API 的設定頁',
|
|
780
|
+
duplicate_back: '返回修改連線資訊',
|
|
781
|
+
duplicate_draft_discarded: '注意:如果您在新增流程中修改過 env 設定,這些修改不會自動合併到已有 API',
|
|
782
|
+
duplicate_race_lost: '剛才建立的 API 已被另一流程佔用,目前草稿未保留',
|
|
783
|
+
partial_failure: '部分 env 設定寫入失敗,請手動檢查',
|
|
784
|
+
recommended_models: '建議模型'
|
|
785
|
+
},
|
|
786
|
+
|
|
787
|
+
summary: {
|
|
788
|
+
x_items: '{0} 項'
|
|
789
|
+
},
|
|
790
|
+
|
|
791
|
+
// Config label display names (used in env editing menus)
|
|
792
|
+
config_labels: {
|
|
793
|
+
model: {
|
|
794
|
+
ANTHROPIC_DEFAULT_SONNET_MODEL: '一般模型(Sonnet)',
|
|
795
|
+
ANTHROPIC_DEFAULT_OPUS_MODEL: '高強度模型(Opus)',
|
|
796
|
+
ANTHROPIC_DEFAULT_HAIKU_MODEL: '快速模型(Haiku)',
|
|
797
|
+
CLAUDE_CODE_SUBAGENT_MODEL: '子代理模型',
|
|
798
|
+
ANTHROPIC_CUSTOM_MODEL_OPTION: '自訂模型',
|
|
799
|
+
ANTHROPIC_CUSTOM_MODEL_OPTION_NAME: '自訂模型名稱',
|
|
800
|
+
},
|
|
801
|
+
runtime: {
|
|
802
|
+
API_TIMEOUT_MS: '請求逾時',
|
|
803
|
+
CLAUDE_CODE_ATTRIBUTION_HEADER: '輸出署名',
|
|
804
|
+
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: '減少非必要流量',
|
|
805
|
+
CLAUDE_CODE_EFFORT_LEVEL: '推理強度',
|
|
806
|
+
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS: '停用實驗性功能',
|
|
807
|
+
CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK: '停用非串流回退',
|
|
808
|
+
},
|
|
809
|
+
},
|
|
810
|
+
|
|
811
|
+
confirm: {
|
|
812
|
+
delete_variable: '確認刪除此變數?(y/N)'
|
|
813
|
+
},
|
|
814
|
+
|
|
678
815
|
config: {
|
|
679
816
|
values: {
|
|
680
817
|
on: '開啟',
|
|
681
818
|
off: '關閉',
|
|
682
819
|
direct_mode: '直接模式',
|
|
683
820
|
select_mode: '選擇模式',
|
|
684
|
-
recommended_off: '關閉 (推薦)'
|
|
821
|
+
recommended_off: '關閉 (推薦)',
|
|
822
|
+
recommended_on: '開啟 (推薦)'
|
|
685
823
|
}
|
|
686
824
|
}
|
|
687
825
|
};
|
package/lib/i18n/locales/zh.js
CHANGED
|
@@ -38,6 +38,7 @@ module.exports = {
|
|
|
38
38
|
model_upgrade_notification: "模型升级提示",
|
|
39
39
|
telemetry: "Anthropic 遥测数据",
|
|
40
40
|
api_launch_mode: "第三方API启动模式",
|
|
41
|
+
no_flicker: "禁用屏幕闪烁",
|
|
41
42
|
back: "返回主菜单"
|
|
42
43
|
},
|
|
43
44
|
api_select: {
|
|
@@ -122,7 +123,8 @@ module.exports = {
|
|
|
122
123
|
failed_add: "添加API失败:{0}",
|
|
123
124
|
failed_remove: "删除API失败:{0}",
|
|
124
125
|
failed_switch: "切换API失败:{0}",
|
|
125
|
-
invalid_index: "无效的API索引"
|
|
126
|
+
invalid_index: "无效的API索引",
|
|
127
|
+
not_found: "未找到API:{0}",
|
|
126
128
|
},
|
|
127
129
|
password: {
|
|
128
130
|
empty: "密码不能为空",
|
|
@@ -194,7 +196,16 @@ module.exports = {
|
|
|
194
196
|
exporting: "导出配置中...",
|
|
195
197
|
importing: "导入配置中...",
|
|
196
198
|
switching_language: "切换语言中...",
|
|
197
|
-
initializing: "初始化中..."
|
|
199
|
+
initializing: "初始化中...",
|
|
200
|
+
overridden: "已覆盖",
|
|
201
|
+
not_set: "(未设置)",
|
|
202
|
+
default: "默认",
|
|
203
|
+
enabled: "开启",
|
|
204
|
+
disabled: "关闭",
|
|
205
|
+
current_value: "当前生效",
|
|
206
|
+
recommended_value: "推荐配置",
|
|
207
|
+
|
|
208
|
+
auto: "(未设置)",
|
|
198
209
|
},
|
|
199
210
|
|
|
200
211
|
// API详情和标签
|
|
@@ -235,7 +246,24 @@ module.exports = {
|
|
|
235
246
|
duplicate: '此更改将创建重复的配置',
|
|
236
247
|
provider_url_mismatch: '供应商和 URL 可能不一致',
|
|
237
248
|
provider_url_mismatch_detail: '供应商:{0} / URL 建议:{1}',
|
|
238
|
-
url_provider_hint: "URL 匹配供应商 '{0}',但当前供应商为 '{1}'。建议更新供应商字段。"
|
|
249
|
+
url_provider_hint: "URL 匹配供应商 '{0}',但当前供应商为 '{1}'。建议更新供应商字段。",
|
|
250
|
+
field_model_env_vars: '模型环境变量',
|
|
251
|
+
field_runtime_env_vars: '运行参数',
|
|
252
|
+
env_inherited: '继承',
|
|
253
|
+
env_disabled: '已关闭 [off]',
|
|
254
|
+
manage_custom_env_vars: '管理自定义变量...',
|
|
255
|
+
no_custom_vars: '(无自定义变量)',
|
|
256
|
+
add_custom_var: '+ 添加自定义变量',
|
|
257
|
+
enter_custom_key: '输入环境变量名:',
|
|
258
|
+
enter_custom_value: '输入值:',
|
|
259
|
+
warn_model_not_in_provider: '警告: 模型 "{0}" 不在 {1} 模型列表中。请手动更新模型。',
|
|
260
|
+
warn_base_url_not_updated: '提示: Base URL 未自动更新 ({0})。如需更改请手动修改。',
|
|
261
|
+
warn_mixed_provider: '注意: Provider、Base URL 和 Model 来自不同的供应商。请确认是否为有意配置。',
|
|
262
|
+
},
|
|
263
|
+
add: {
|
|
264
|
+
duplicate_detected: 'API "{0}" 已存在。跳转编辑运行参数?',
|
|
265
|
+
jump_to_edit: '跳转编辑已有 API',
|
|
266
|
+
cancel: '取消',
|
|
239
267
|
}
|
|
240
268
|
},
|
|
241
269
|
|
|
@@ -370,6 +398,10 @@ module.exports = {
|
|
|
370
398
|
enter_choice: "输入您的选择({0},或任意其他键返回主菜单):",
|
|
371
399
|
arrow_keys_not_available: "方向键不可用。输入选择编号 (1-{0}):",
|
|
372
400
|
enter_choice_prompt: "[>] 输入您的选择 (1-2,或任意其他键返回主菜单): ",
|
|
401
|
+
input_1_to_n_or_q: "输入 1-{0} 或 q:",
|
|
402
|
+
invalid_selection: "无效选择。请输入 1-{0}。",
|
|
403
|
+
enter_to_edit: "回车键编辑,ESC键返回",
|
|
404
|
+
enter_to_select: "回车键选择,ESC键返回",
|
|
373
405
|
action: {
|
|
374
406
|
edit: '编辑',
|
|
375
407
|
remove: '删除',
|
|
@@ -656,7 +688,7 @@ module.exports = {
|
|
|
656
688
|
select_mode_active_none: '无',
|
|
657
689
|
no_api_configured: '未配置第三方API,请先在「第三方API管理」中添加',
|
|
658
690
|
api_management_info: '已配置 {0} 个API,当前激活: {1}',
|
|
659
|
-
config_summary: '语言: {0} | 启动模式: {1} | 遥测: {2}',
|
|
691
|
+
config_summary: '语言: {0} | 启动模式: {1} | 遥测: {2} | 无闪烁: {3}',
|
|
660
692
|
edit_password_required: '🔒 编辑API配置需要密码验证',
|
|
661
693
|
remove_password_required: '🔒 删除API需要密码验证',
|
|
662
694
|
export_password_required: '🔒 导出配置需要密码验证',
|
|
@@ -666,22 +698,134 @@ module.exports = {
|
|
|
666
698
|
auto_upgrade: '自动检测并升级第三方API的模型版本',
|
|
667
699
|
upgrade_notification: '在主菜单顶部显示模型可升级的通知',
|
|
668
700
|
telemetry: '关闭后启动时注入 DISABLE_TELEMETRY=1,建议关闭',
|
|
669
|
-
launch_mode: '直接模式: 使用激活API启动 / 选择模式: 启动前从列表选择'
|
|
701
|
+
launch_mode: '直接模式: 使用激活API启动 / 选择模式: 启动前从列表选择',
|
|
702
|
+
no_flicker: '禁用屏幕闪烁 (CLAUDE_CODE_NO_FLICKER)'
|
|
670
703
|
},
|
|
671
704
|
api_select: {
|
|
672
705
|
info: 'API: {0}',
|
|
673
706
|
detail: '提供商: {0} | 模型: {1}',
|
|
674
707
|
usage: '使用次数: {0} | 最后使用: {1}'
|
|
708
|
+
},
|
|
709
|
+
model: {
|
|
710
|
+
desc: '指定各场景使用的模型版本',
|
|
711
|
+
sonnet: '对应 Claude Code 的 Sonnet 档位',
|
|
712
|
+
sonnet_detail: "Claude Code 日常对话使用的默认模型,平衡速度与推理能力。对应环境变量 [ANTHROPIC_DEFAULT_SONNET_MODEL]。当前值由模型编排按同代 Sonnet 档位自动匹配",
|
|
713
|
+
opus: '对应 Claude Code 的 Opus 档位',
|
|
714
|
+
opus_detail: "处理复杂推理、深度分析任务时使用的模型,能力最强。对应环境变量 [ANTHROPIC_DEFAULT_OPUS_MODEL]。当前值由模型编排按同代 Opus 档位自动匹配",
|
|
715
|
+
haiku: '对应 Claude Code 的 Haiku 档位',
|
|
716
|
+
haiku_detail: "轻量快速场景使用的模型,适合简单任务和高频调用。对应环境变量 [ANTHROPIC_DEFAULT_HAIKU_MODEL]。当前值由模型编排按同代高速变体自动匹配",
|
|
717
|
+
subagent: '子任务或分支执行时优先使用的模型',
|
|
718
|
+
subagent_detail: "子任务、分支执行时使用的模型,建议与快速模型一致以降低延迟和成本。对应环境变量 [CLAUDE_CODE_SUBAGENT_MODEL]。当前值由模型编排自动填充",
|
|
719
|
+
custom_option: '额外加入 /model 选择器的模型 ID',
|
|
720
|
+
custom_option_detail: "向第三方 API 发起请求时使用的模型 ID。对应环境变量 [ANTHROPIC_CUSTOM_MODEL_OPTION]。当前值由模型编排自动填充",
|
|
721
|
+
custom_name: '自定义模型在 /model 中的显示名',
|
|
722
|
+
custom_name_detail: "该模型在 /model 命令选择器中的显示名称。对应环境变量 [ANTHROPIC_CUSTOM_MODEL_OPTION_NAME]。当前值由模型编排自动填充",
|
|
723
|
+
},
|
|
724
|
+
runtime: {
|
|
725
|
+
desc: '超时、署名、网络行为等开关',
|
|
726
|
+
timeout: '控制 API 调用的最长等待时间',
|
|
727
|
+
timeout_detail: "API 调用最大等待时间(毫秒),超时后请求自动中断。对应环境变量 [API_TIMEOUT_MS]。",
|
|
728
|
+
attribution: '控制是否在输出末尾附加署名标记',
|
|
729
|
+
attribution_detail: "控制是否在 AI 输出末尾附加署名标记(如 Generated by Claude)。对应环境变量 [CLAUDE_CODE_ATTRIBUTION_HEADER]。",
|
|
730
|
+
nonessential: '控制是否减少非核心网络请求',
|
|
731
|
+
nonessential_detail: "开启后减少版本检查等后台网络请求,降低 API 开销。对应环境变量 [CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC]。",
|
|
732
|
+
effort: '控制模型回答时投入的推理深度',
|
|
733
|
+
effort_detail: "控制模型回答时投入的推理深度,值越高推理越深但耗时更长。对应环境变量 [CLAUDE_CODE_EFFORT_LEVEL]。可选值:low / medium / high / xhigh / max / auto",
|
|
734
|
+
experimental: '禁用 Anthropic 实验性 Beta 功能,提高接口稳定性',
|
|
735
|
+
experimental_detail: "开启后禁用 Anthropic 实验性 Beta 功能,提高接口稳定性。对应环境变量 [CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS]。",
|
|
736
|
+
nonstreaming: '控制流式请求失败时是否禁止回退到非流式模式',
|
|
737
|
+
nonstreaming_detail: "开启后流式请求失败不会自动降级为非流式模式,适用于仅支持流式的第三方 API。对应环境变量 [CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK]。",
|
|
738
|
+
effort_values: "可选值: low, medium, high, xhigh, max, auto",
|
|
739
|
+
source_manual: "当前值由用户手动设置",
|
|
740
|
+
source_provider: "当前值来自 Provider 推荐默认",
|
|
741
|
+
source_default: "当前值未设置,将使用 Claude Code 内置默认",
|
|
742
|
+
},
|
|
743
|
+
custom: {
|
|
744
|
+
desc: '注入启动环境的额外键值对'
|
|
675
745
|
}
|
|
676
746
|
},
|
|
677
747
|
|
|
748
|
+
// Page titles for env config sections
|
|
749
|
+
page: {
|
|
750
|
+
model_runtime_config: '模型与运行配置',
|
|
751
|
+
model_config: '模型配置',
|
|
752
|
+
runtime_config: '运行配置',
|
|
753
|
+
custom_vars: '自定义变量'
|
|
754
|
+
},
|
|
755
|
+
|
|
756
|
+
// Actions for env config editing
|
|
757
|
+
action: {
|
|
758
|
+
follow_recommended: '跟随推荐',
|
|
759
|
+
force_enable: '强制开启',
|
|
760
|
+
force_disable: '强制关闭',
|
|
761
|
+
custom_input: '自定义输入',
|
|
762
|
+
edit_value: '编辑值',
|
|
763
|
+
delete_variable: '删除变量',
|
|
764
|
+
add_variable: '添加变量',
|
|
765
|
+
finish_create: '完成创建(使用当前配置)',
|
|
766
|
+
cancel_config: "取消配置",
|
|
767
|
+
please_choose: '请选择'
|
|
768
|
+
},
|
|
769
|
+
|
|
770
|
+
// Prompts
|
|
771
|
+
prompt: {
|
|
772
|
+
empty_to_restore: '输入空值恢复为跟随推荐',
|
|
773
|
+
exit_to_cancel: '输入 exit 取消'
|
|
774
|
+
},
|
|
775
|
+
|
|
776
|
+
// Add API flow
|
|
777
|
+
add_api: {
|
|
778
|
+
step_n_of_m: '添加 API · 步骤 {0}/{1}',
|
|
779
|
+
confirm_config: '确认配置',
|
|
780
|
+
finish_hint: '系统已根据 provider 和 model 自动填充推荐配置',
|
|
781
|
+
confirm_page_prompt: "可直接完成创建(配置项使用推荐的默认值),或选择下方配置项进行自定义修改",
|
|
782
|
+
duplicate_title: '该 API 连接已存在',
|
|
783
|
+
duplicate_enter_config: '进入已有 API 的配置页',
|
|
784
|
+
duplicate_back: '返回修改连接信息',
|
|
785
|
+
duplicate_draft_discarded: '注意:如果你在新增流程中修改过 env 配置,这些修改不会自动合并到已有 API',
|
|
786
|
+
duplicate_race_lost: '刚刚创建的 API 已被另一流程占用,当前草稿未保留',
|
|
787
|
+
partial_failure: '部分 env 配置写入失败,请手动检查',
|
|
788
|
+
recommended_models: '推荐模型'
|
|
789
|
+
},
|
|
790
|
+
|
|
791
|
+
// Summary
|
|
792
|
+
summary: {
|
|
793
|
+
x_items: '{0} 项'
|
|
794
|
+
},
|
|
795
|
+
|
|
796
|
+
// Config label display names (used in env editing menus)
|
|
797
|
+
config_labels: {
|
|
798
|
+
model: {
|
|
799
|
+
ANTHROPIC_DEFAULT_SONNET_MODEL: '常规模型(Sonnet)',
|
|
800
|
+
ANTHROPIC_DEFAULT_OPUS_MODEL: '高强度模型(Opus)',
|
|
801
|
+
ANTHROPIC_DEFAULT_HAIKU_MODEL: '快速模型(Haiku)',
|
|
802
|
+
CLAUDE_CODE_SUBAGENT_MODEL: '子代理模型',
|
|
803
|
+
ANTHROPIC_CUSTOM_MODEL_OPTION: '自定义模型',
|
|
804
|
+
ANTHROPIC_CUSTOM_MODEL_OPTION_NAME: '自定义模型名称',
|
|
805
|
+
},
|
|
806
|
+
runtime: {
|
|
807
|
+
API_TIMEOUT_MS: '请求超时',
|
|
808
|
+
CLAUDE_CODE_ATTRIBUTION_HEADER: '输出署名',
|
|
809
|
+
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: '减少非必要流量',
|
|
810
|
+
CLAUDE_CODE_EFFORT_LEVEL: '推理强度',
|
|
811
|
+
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS: '禁用实验性功能',
|
|
812
|
+
CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK: '禁用非流式回退',
|
|
813
|
+
},
|
|
814
|
+
},
|
|
815
|
+
|
|
816
|
+
// Confirmations
|
|
817
|
+
confirm: {
|
|
818
|
+
delete_variable: '确认删除此变量?(y/N)'
|
|
819
|
+
},
|
|
820
|
+
|
|
678
821
|
config: {
|
|
679
822
|
values: {
|
|
680
823
|
on: '开启',
|
|
681
824
|
off: '关闭',
|
|
682
825
|
direct_mode: '直接模式',
|
|
683
826
|
select_mode: '选择模式',
|
|
684
|
-
recommended_off: '关闭 (推荐)'
|
|
827
|
+
recommended_off: '关闭 (推荐)',
|
|
828
|
+
recommended_on: '开启 (推荐)'
|
|
685
829
|
}
|
|
686
830
|
}
|
|
687
831
|
};
|
package/lib/launcher.js
CHANGED
|
@@ -108,6 +108,9 @@ function launchClaude(command, envVars = {}, disableAuthTokens = false, opts = {
|
|
|
108
108
|
if (launcherConfig.disableTelemetry) {
|
|
109
109
|
envVars.DISABLE_TELEMETRY = '1';
|
|
110
110
|
}
|
|
111
|
+
if (launcherConfig.noFlicker) {
|
|
112
|
+
envVars.CLAUDE_CODE_NO_FLICKER = '1';
|
|
113
|
+
}
|
|
111
114
|
|
|
112
115
|
// Disable Ctrl+C monitoring before launching Claude Code
|
|
113
116
|
// This allows Ctrl+C to be handled exclusively by Claude Code process
|
|
@@ -137,9 +140,8 @@ function launchClaude(command, envVars = {}, disableAuthTokens = false, opts = {
|
|
|
137
140
|
|
|
138
141
|
// Disable conflicting auth tokens when using third-party API
|
|
139
142
|
if (disableAuthTokens) {
|
|
140
|
-
// Only delete CLAUDE_CODE_OAUTH_TOKEN - keep ANTHROPIC_AUTH_TOKEN that we just set
|
|
141
143
|
delete env.CLAUDE_CODE_OAUTH_TOKEN;
|
|
142
|
-
|
|
144
|
+
delete env.ANTHROPIC_API_KEY;
|
|
143
145
|
}
|
|
144
146
|
|
|
145
147
|
// Parse command and arguments
|
|
@@ -214,36 +216,63 @@ function launchClaudeAutoMode() {
|
|
|
214
216
|
* Get environment variables based on provider type
|
|
215
217
|
*/
|
|
216
218
|
function getProviderEnvVars(api) {
|
|
217
|
-
// Decrypt the auth token (all tokens are stored encrypted)
|
|
218
219
|
const { decrypt } = require('./crypto');
|
|
219
220
|
const decrypted = decrypt(api.authToken);
|
|
220
|
-
|
|
221
221
|
if (!decrypted.success) {
|
|
222
|
-
console.error('Failed to decrypt auth token:', decrypted.error);
|
|
223
222
|
throw new Error('Failed to decrypt API auth token. Please check your configuration.');
|
|
224
223
|
}
|
|
225
224
|
|
|
226
225
|
const authToken = decrypted.value;
|
|
227
226
|
|
|
228
|
-
|
|
227
|
+
// Step 1: Base variables
|
|
228
|
+
const env = {
|
|
229
229
|
ANTHROPIC_BASE_URL: api.baseUrl,
|
|
230
230
|
ANTHROPIC_AUTH_TOKEN: authToken,
|
|
231
231
|
ANTHROPIC_MODEL: api.model,
|
|
232
|
-
ANTHROPIC_SMALL_FAST_MODEL: api.smallFastModel || api.model
|
|
232
|
+
ANTHROPIC_SMALL_FAST_MODEL: api.smallFastModel || api.model,
|
|
233
233
|
};
|
|
234
234
|
|
|
235
|
-
//
|
|
235
|
+
// Step 2: Provider-level defaults
|
|
236
236
|
const providerConfig = getProvider(api.provider);
|
|
237
|
-
|
|
238
237
|
if (providerConfig && providerConfig.envVars) {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
238
|
+
Object.assign(env, providerConfig.envVars);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
const { PREDEFINED_MODEL_ENV_KEYS, PREDEFINED_RUNTIME_KEYS, TYPE_A_FIELDS, RESERVED_ENV_KEYS } = require('./validators');
|
|
242
|
+
|
|
243
|
+
// Step 3: modelEnvVars (whitelist, non-empty)
|
|
244
|
+
if (api.modelEnvVars) {
|
|
245
|
+
for (const key of PREDEFINED_MODEL_ENV_KEYS) {
|
|
246
|
+
const val = api.modelEnvVars[key];
|
|
247
|
+
if (val !== undefined && val !== '') env[key] = val;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Step 4: runtimeEnvVars (whitelist, non-empty, skip "off")
|
|
252
|
+
if (api.runtimeEnvVars) {
|
|
253
|
+
for (const key of PREDEFINED_RUNTIME_KEYS) {
|
|
254
|
+
const val = api.runtimeEnvVars[key];
|
|
255
|
+
if (val !== undefined && val !== '' && val !== 'off') env[key] = val;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Step 5: customEnvVars (skip reserved/predefined)
|
|
260
|
+
if (api.customEnvVars) {
|
|
261
|
+
const allPredefined = new Set([...RESERVED_ENV_KEYS, ...PREDEFINED_RUNTIME_KEYS, ...PREDEFINED_MODEL_ENV_KEYS]);
|
|
262
|
+
for (const [key, val] of Object.entries(api.customEnvVars)) {
|
|
263
|
+
if (allPredefined.has(key)) continue;
|
|
264
|
+
if (val !== undefined && val !== '') env[key] = val;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// Step 6: Remove Type A fields with "off" (tombstone)
|
|
269
|
+
if (api.runtimeEnvVars) {
|
|
270
|
+
for (const key of TYPE_A_FIELDS) {
|
|
271
|
+
if (api.runtimeEnvVars[key] === 'off') delete env[key];
|
|
272
|
+
}
|
|
244
273
|
}
|
|
245
274
|
|
|
246
|
-
return
|
|
275
|
+
return env;
|
|
247
276
|
}
|
|
248
277
|
|
|
249
278
|
/**
|
|
@@ -281,8 +310,8 @@ function launchClaudeWithApi(api, skipPermissions = false, opts = {}) {
|
|
|
281
310
|
if (providerConfig && providerConfig.envVars && Object.keys(providerConfig.envVars).length > 0) {
|
|
282
311
|
console.log(colors.yellow + ' ⚡ ' + i18n.tSync('launch.provider_optimizations_applied') + colors.reset);
|
|
283
312
|
|
|
284
|
-
// Display specific optimizations
|
|
285
|
-
const msRaw =
|
|
313
|
+
// Display specific optimizations from merged envVars
|
|
314
|
+
const msRaw = envVars.API_TIMEOUT_MS;
|
|
286
315
|
const ms = Number(msRaw);
|
|
287
316
|
if (Number.isFinite(ms) && ms > 0) {
|
|
288
317
|
const timeoutSec = Math.floor(ms / 1000);
|