@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.
@@ -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
  };
@@ -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
- console.log(colors.gray + ' Disabled: CLAUDE_CODE_OAUTH_TOKEN' + colors.reset);
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
- const baseEnvVars = {
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
- // Get provider configuration and merge provider-specific environment variables
235
+ // Step 2: Provider-level defaults
236
236
  const providerConfig = getProvider(api.provider);
237
-
238
237
  if (providerConfig && providerConfig.envVars) {
239
- // Merge base env vars with provider-specific env vars
240
- return {
241
- ...baseEnvVars,
242
- ...providerConfig.envVars
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 baseEnvVars;
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 based on envVars
285
- const msRaw = providerConfig.envVars.API_TIMEOUT_MS;
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);