@kikkimo/claude-launcher 2.4.0 → 2.5.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.
@@ -0,0 +1,187 @@
1
+ # Design: Update Models & Add Auto Mode
2
+
3
+ **Date:** 2026-03-31
4
+ **Branch:** `feature/update-models-and-auto-mode`
5
+ **Scope:** Update GLM/Kimi/MiniMax model versions, add Claude Auto Mode menu item, add dynamic menu hints
6
+
7
+ ---
8
+
9
+ ## 1. Model Configuration Updates (`lib/presets/providers.js`)
10
+
11
+ ### 1.1 GLM (zhipu + zai)
12
+
13
+ **Changes:** Add `glm-5.1`, `glm-5-turbo`; remove `glm-4.5`, `glm-4.6`; add versionAliases for removed models only.
14
+
15
+ **Source:** [Z.AI Developer Docs - Using GLM-5.1](https://docs.z.ai/devpack/using5.1), confirmed available on Anthropic-compatible endpoint `https://api.z.ai/api/anthropic`.
16
+
17
+ ```js
18
+ // Both zhipu and zai get identical model config:
19
+ name: 'ZhiPu AI (GLM-5.1/5-Turbo/5/4.7) - 智谱清言', // zhipu
20
+ name: 'Z.ai (GLM-5.1/5-Turbo/5/4.7) - ZhiPu Global', // zai
21
+ models: ['glm-5.1', 'glm-5-turbo', 'glm-5', 'glm-4.7'],
22
+ versionAliases: {
23
+ 'glm-4.5': 'glm-5.1', // removed from model list
24
+ 'glm-4.6': 'glm-5.1' // removed from model list
25
+ }
26
+ ```
27
+
28
+ Note: `glm-5-turbo`, `glm-5`, `glm-4.7` are distinct models offered concurrently by the provider ([docs](https://docs.z.ai/guides/llm/glm-5-turbo)). They are NOT deprecated and must NOT appear in versionAliases, otherwise auto-upgrade would silently rewrite a user's intentional model choice.
29
+
30
+ ### 1.2 Kimi (moonshot)
31
+
32
+ **Changes:** Add `kimi-k2.5`; remove `kimi-k2-0711-preview`, `kimi-k2-0905-preview`, `kimi-k2-turbo-preview`; add versionAliases for removed models only.
33
+
34
+ **Source:** [Kimi K2.5 Quickstart](https://platform.moonshot.cn/docs/guide/kimi-k2-5-quickstart)
35
+
36
+ ```js
37
+ name: 'Moonshot AI (Kimi-K2.5/K2-Thinking)',
38
+ models: ['kimi-k2.5', 'kimi-k2-thinking', 'kimi-k2-thinking-turbo'],
39
+ versionAliases: {
40
+ 'kimi-k2-0711-preview': 'kimi-k2.5', // removed from model list
41
+ 'kimi-k2-0905-preview': 'kimi-k2.5', // removed from model list
42
+ 'kimi-k2-turbo-preview': 'kimi-k2.5' // removed from model list
43
+ }
44
+ ```
45
+
46
+ Note: `kimi-k2-thinking` and `kimi-k2-thinking-turbo` are distinct thinking models ([docs](https://platform.moonshot.ai/docs/guide/use-kimi-k2-thinking-model)), not deprecated. They must NOT appear in versionAliases.
47
+
48
+ `kimi_for_coding` provider: no changes.
49
+
50
+ ### 1.3 MiniMax (minimax_cn + minimax_global)
51
+
52
+ **Changes:** Add `MiniMax-M2.7`, `MiniMax-M2.5`; no versionAliases needed (all models remain selectable).
53
+
54
+ **Source:** [MiniMax Anthropic API Docs](https://platform.minimax.io/docs/api-reference/text-anthropic-api)
55
+
56
+ ```js
57
+ // minimax_cn
58
+ name: 'MiniMax CN (国内版)',
59
+ models: ['MiniMax-M2.7', 'MiniMax-M2.5', 'MiniMax-M2.1'],
60
+ // No versionAliases - M2.1 and M2.5 are distinct tiers, not deprecated
61
+
62
+ // minimax_global
63
+ name: 'MiniMax Global (国际版)',
64
+ models: ['MiniMax-M2.7', 'MiniMax-M2.5', 'MiniMax-M2.1'],
65
+ // No versionAliases - same reason
66
+ ```
67
+
68
+ Note: MiniMax offers M2.1, M2.5, and M2.7 as concurrent tiers with different price/performance profiles ([platform docs](https://platform.minimax.io/)). They are NOT deprecated and must NOT appear in versionAliases.
69
+
70
+ ### 1.4 Unchanged Providers
71
+
72
+ - `anthropic`: No changes (existing versionAliases handle multi-series upgrades correctly)
73
+ - `deepseek`: No changes
74
+ - `kimi_for_coding`: No changes
75
+ - `custom`: No changes
76
+
77
+ ### 1.5 Upgrade Logic
78
+
79
+ `getLatestModel()` and `hasModelUpgrade()` in `providers.js` remain unchanged. They continue to use `versionAliases` exclusively. The key invariant is: **versionAliases must only contain models that are truly removed/deprecated, never distinct models that the provider offers concurrently.**
80
+
81
+ ---
82
+
83
+ ## 2. Auto Mode Menu Item
84
+
85
+ ### 2.1 Background
86
+
87
+ Claude Code auto mode (released March 24, 2026) uses a classifier-gated approval system. The `--enable-auto-mode` CLI flag **enables auto mode support** in a session, but does NOT start the session directly in auto mode. The user must press **Shift+Tab** to cycle to auto mode after launch. ([Source](https://claude.com/blog/auto-mode))
88
+
89
+ Plan support: Currently available on Team plans. Enterprise and API plan support is rolling out.
90
+
91
+ ### 2.2 New Menu Structure
92
+
93
+ ```
94
+ 0: Launch Claude Code
95
+ 1: Launch Claude Code (Skip Permissions)
96
+ 2: Launch Claude Code (Enable Auto Mode) <-- NEW (note: "Enable", not just "Auto Mode")
97
+ 3: Launch Claude Code with 3rd-party API
98
+ 4: Launch Claude Code with 3rd-party API (Auto Skip Permissions)
99
+ 5: 3rd-party API Management
100
+ 6: Language Settings
101
+ 7: Version Update Check
102
+ 8: Exit
103
+ ```
104
+
105
+ ### 2.3 Launch Implementation (`lib/launcher.js`)
106
+
107
+ New function `launchClaudeAutoMode()`:
108
+ - Command: `claude --enable-auto-mode`
109
+ - Uses existing `launchClaude()` core with the new command string
110
+ - This enables auto mode as a selectable permission mode; user switches to it with Shift+Tab in session
111
+
112
+ ### 2.4 Main File Changes (`claude-launcher`)
113
+
114
+ - Add new menu option at index 2
115
+ - Shift all subsequent menu indices by 1
116
+ - Add case handler for index 2 calling `launchClaudeAutoMode()`
117
+
118
+ ---
119
+
120
+ ## 3. Dynamic Menu Hints
121
+
122
+ ### 3.1 Menu Class Changes (`lib/ui/menu.js`)
123
+
124
+ **Parameter contract preservation:** Current signatures are `displayMenu(clearScreen, versionInfo)` and `navigate(clearScreen, versionInfo)`. The `hintCallback` parameter is added as the **third** parameter to both methods:
125
+
126
+ ```js
127
+ displayMenu(clearScreen = true, versionInfo = null, hintCallback = null)
128
+ navigate(clearScreen = true, versionInfo = null, hintCallback = null)
129
+ ```
130
+
131
+ This preserves backward compatibility with all existing call sites that pass `(clearScreen, versionInfo)`.
132
+
133
+ **Sync constraint:** `hintCallback` must be a **synchronous** function returning `string | null`. The menu redraws synchronously inside the raw-mode keypress handler (`lib/ui/menu.js` handleKeyPress), which has no `await` space. Hint text must be pre-computed before calling `navigate()`, or the callback must use only `i18n.tSync()` / cached data — never `await i18n.t()`.
134
+
135
+ **Rendering:** If `hintCallback` is provided and `hintCallback(this.selectedIndex)` returns a non-null string, the Menu rendering layer prepends the `ℹ` icon with `colors.cyan` and renders the hint text in `colors.gray` below the menu options. If it returns null, no hint line is rendered. **Locale values must be pure text without the `ℹ` prefix** — the icon and color are added by Menu, not by i18n strings.
136
+
137
+ ### 3.2 Hint Rules
138
+
139
+ | Selected Index | Hint text returned by hintCallback (no icon prefix) |
140
+ |---|---|
141
+ | 0 (Default Launch) | `null` (no hint) |
142
+ | 1 (Skip Permissions) | `null` (no hint) |
143
+ | 2 (Enable Auto Mode) | `"Auto Mode: Currently supports Team plan. Enterprise/API rolling out. Use Shift+Tab to switch after launch."` |
144
+ | 3 (3rd-party API) | Active API exists: `"Active: ZhiPu AI / glm-5.1"` (formatted from i18n); No API: `"No active API configured. Go to 'API Management' to add one."` |
145
+ | 4 (3rd-party + Skip) | Same as index 3 |
146
+ | 5-8 | `null` (no hint) |
147
+
148
+ ### 3.3 Hint i18n
149
+
150
+ All hint strings go through the i18n system. **Placeholders use positional `{0}`, `{1}` format** to match the existing `MessageFormatter.format()` in `lib/i18n/formatter.js`. Locale values must NOT include the `ℹ` icon prefix.
151
+
152
+ New keys:
153
+ - `hints.auto_mode_info` — e.g. `'Auto Mode: Currently supports Team plan. Enterprise/API rolling out. Use Shift+Tab to switch after launch.'`
154
+ - `hints.active_api_info` — e.g. `'Active: {0} / {1}'` (where `{0}` = provider name, `{1}` = model)
155
+ - `hints.no_active_api` — e.g. `'No active API configured. Go to "API Management" to add one.'`
156
+
157
+ ---
158
+
159
+ ## 4. i18n Updates
160
+
161
+ All 11 locale files need new entries:
162
+
163
+ - `menu.main.launch_auto_mode` - Menu item text for "Launch Claude Code (Enable Auto Mode)"
164
+ - `hints.auto_mode_info` - Pure text, no icon prefix
165
+ - `hints.active_api_info` - Uses `{0}` for provider name, `{1}` for model name
166
+ - `hints.no_active_api` - Pure text, no icon prefix
167
+
168
+ ---
169
+
170
+ ## 5. Files to Modify
171
+
172
+ | File | Changes |
173
+ |---|---|
174
+ | `lib/presets/providers.js` | Update models, names, versionAliases for GLM/Kimi/MiniMax (deprecations only) |
175
+ | `lib/ui/menu.js` | Add `hintCallback` as **3rd parameter** to `displayMenu()` and `navigate()` |
176
+ | `lib/launcher.js` | Add `launchClaudeAutoMode()` function |
177
+ | `claude-launcher` (main) | New menu item, hint callback, case handler, index shifts |
178
+ | `lib/i18n/locales/*.js` (x11) | New i18n keys for Auto Mode menu and hints |
179
+
180
+ ---
181
+
182
+ ## 6. Out of Scope
183
+
184
+ - No changes to `getLatestModel()` / `hasModelUpgrade()` logic
185
+ - No new `latestModel` field
186
+ - No changes to DeepSeek, Anthropic, kimi_for_coding, or custom providers
187
+ - No changes to the model upgrade checker or auto-upgrade flow
@@ -10,6 +10,7 @@ module.exports = {
10
10
  title: "Hauptmenü",
11
11
  launch_default: "Claude Code starten",
12
12
  launch_skip: "Claude Code starten (Berechtigungsprüfung überspringen)",
13
+ launch_auto_mode: "Claude Code starten (Auto-Modus aktivieren)",
13
14
  launch_api: "Claude Code mit Drittanbieter-API starten",
14
15
  launch_api_skip: "Claude Code mit Drittanbieter-API starten (Berechtigungsprüfung überspringen)",
15
16
  api_management: "Drittanbieter-API-Verwaltung",
@@ -599,5 +600,10 @@ module.exports = {
599
600
  manual_complete: "Upgrade abgeschlossen!",
600
601
  manual_stats_upgraded: "Upgegradet: {0}",
601
602
  manual_stats_skipped: "Übersprungen: {0} ({1} bereits aktuell, {2} keine Upgrade-Info)"
603
+ },
604
+ hints: {
605
+ auto_mode_info: 'Auto-Modus: Derzeit fuer Team-Plan verfuegbar. Enterprise/API wird schrittweise eingefuehrt. Nach dem Start mit Shift+Tab wechseln.',
606
+ active_api_info: 'Aktiv: {0} / {1}',
607
+ no_active_api: 'Keine aktive API konfiguriert. Gehen Sie zur "API-Verwaltung", um eine hinzuzufuegen.'
602
608
  }
603
609
  };
@@ -10,6 +10,7 @@ module.exports = {
10
10
  title: "Main Menu",
11
11
  launch_default: "Launch Claude Code",
12
12
  launch_skip: "Launch Claude Code (Auto Skip Permissions)",
13
+ launch_auto_mode: "Launch Claude Code (Enable Auto Mode)",
13
14
  launch_api: "Launch Claude Code with 3rd-party API",
14
15
  launch_api_skip: "Launch Claude Code with 3rd-party API (Auto Skip Permissions)",
15
16
  api_management: "3rd-party API Management",
@@ -599,5 +600,10 @@ module.exports = {
599
600
  manual_complete: "Upgrade complete!",
600
601
  manual_stats_upgraded: "Upgraded: {0}",
601
602
  manual_stats_skipped: "Skipped: {0} ({1} already latest, {2} no upgrade info)"
603
+ },
604
+ hints: {
605
+ auto_mode_info: 'Auto Mode: Currently supports Team plan. Enterprise/API rolling out. Use Shift+Tab to switch after launch.',
606
+ active_api_info: 'Active: {0} / {1}',
607
+ no_active_api: 'No active API configured. Go to "API Management" to add one.'
602
608
  }
603
609
  };
@@ -10,6 +10,7 @@ module.exports = {
10
10
  title: "Menú Principal",
11
11
  launch_default: "Iniciar Claude Code",
12
12
  launch_skip: "Iniciar Claude Code (Omitir verificación de permisos)",
13
+ launch_auto_mode: "Iniciar Claude Code (Activar modo automatico)",
13
14
  launch_api: "Iniciar Claude Code con API de terceros",
14
15
  launch_api_skip: "Iniciar Claude Code con API de terceros (Omitir verificación de permisos)",
15
16
  api_management: "Gestión de API de terceros",
@@ -599,5 +600,10 @@ module.exports = {
599
600
  manual_complete: "¡Actualización completa!",
600
601
  manual_stats_upgraded: "Actualizados: {0}",
601
602
  manual_stats_skipped: "Omitidos: {0} ({1} ya actualizados, {2} sin info de actualización)"
603
+ },
604
+ hints: {
605
+ auto_mode_info: 'Modo automatico: Disponible para el plan Team. Enterprise/API en despliegue gradual. Despues de iniciar, presione Shift+Tab para cambiar.',
606
+ active_api_info: 'Activo: {0} / {1}',
607
+ no_active_api: 'No hay API activa configurada. Vaya a "Gestion de API" para agregar una.'
602
608
  }
603
609
  };
@@ -10,6 +10,7 @@ module.exports = {
10
10
  title: "Menu Principal",
11
11
  launch_default: "Lancer Claude Code",
12
12
  launch_skip: "Lancer Claude Code (Ignorer la vérification des permissions)",
13
+ launch_auto_mode: "Lancer Claude Code (Activer le mode auto)",
13
14
  launch_api: "Lancer Claude Code avec API tierce",
14
15
  launch_api_skip: "Lancer Claude Code avec API tierce (Ignorer la vérification des permissions)",
15
16
  api_management: "Gestion des API tierces",
@@ -599,5 +600,10 @@ module.exports = {
599
600
  manual_complete: "Mise à niveau terminée !",
600
601
  manual_stats_upgraded: "Mis à niveau : {0}",
601
602
  manual_stats_skipped: "Ignoré : {0} ({1} déjà à jour, {2} sans info de mise à niveau)"
603
+ },
604
+ hints: {
605
+ auto_mode_info: 'Mode auto : Disponible pour le plan Team. Enterprise/API en cours de deploiement. Apres le lancement, appuyez sur Shift+Tab pour basculer.',
606
+ active_api_info: 'Actif : {0} / {1}',
607
+ no_active_api: 'Aucune API active configuree. Allez dans "Gestion des API" pour en ajouter une.'
602
608
  }
603
609
  };
@@ -10,6 +10,7 @@ module.exports = {
10
10
  title: "Menu Principale",
11
11
  launch_default: "Avvia Claude Code",
12
12
  launch_skip: "Avvia Claude Code (Salta Automaticamente Permessi)",
13
+ launch_auto_mode: "Avvia Claude Code (Abilita modalita automatica)",
13
14
  launch_api: "Avvia Claude Code con API di Terze Parti",
14
15
  launch_api_skip: "Avvia Claude Code con API di Terze Parti (Salta Automaticamente Permessi)",
15
16
  api_management: "Gestione API di Terze Parti",
@@ -599,5 +600,10 @@ module.exports = {
599
600
  manual_complete: "Aggiornamento completato!",
600
601
  manual_stats_upgraded: "Aggiornati: {0}",
601
602
  manual_stats_skipped: "Saltati: {0} ({1} già aggiornati, {2} senza info aggiornamento)"
603
+ },
604
+ hints: {
605
+ auto_mode_info: 'Modalita automatica: Attualmente disponibile per il piano Team. Enterprise/API in fase di rilascio graduale. Dopo l\'avvio, premi Shift+Tab per passare.',
606
+ active_api_info: 'Attivo: {0} / {1}',
607
+ no_active_api: 'Nessuna API attiva configurata. Vai a "Gestione API" per aggiungerne una.'
602
608
  }
603
609
  };
@@ -10,6 +10,7 @@ module.exports = {
10
10
  title: "メインメニュー",
11
11
  launch_default: "Claude Codeを起動",
12
12
  launch_skip: "Claude Codeを起動(権限確認をスキップ)",
13
+ launch_auto_mode: "Claude Code を起動(自動モード有効化)",
13
14
  launch_api: "サードパーティAPIでClaude Codeを起動",
14
15
  launch_api_skip: "サードパーティAPIでClaude Codeを起動(権限確認をスキップ)",
15
16
  api_management: "サードパーティAPI管理",
@@ -599,5 +600,10 @@ module.exports = {
599
600
  manual_complete: "アップグレード完了!",
600
601
  manual_stats_upgraded: "アップグレード済み:{0}個",
601
602
  manual_stats_skipped: "スキップ:{0}個({1}個は既に最新、{2}個はアップグレード情報なし)"
603
+ },
604
+ hints: {
605
+ auto_mode_info: '自動モード:現在 Team プランで利用可能。Enterprise/API プランは順次展開中。起動後 Shift+Tab で切替。',
606
+ active_api_info: 'アクティブ:{0} / {1}',
607
+ no_active_api: 'アクティブなAPIがありません。「API管理」から追加してください。'
602
608
  }
603
609
  };
@@ -10,6 +10,7 @@ module.exports = {
10
10
  title: "메인 메뉴",
11
11
  launch_default: "Claude Code 실행",
12
12
  launch_skip: "Claude Code 실행 (권한 확인 자동 건너뛰기)",
13
+ launch_auto_mode: "Claude Code 실행 (자동 모드 활성화)",
13
14
  launch_api: "서드파티 API로 Claude Code 실행",
14
15
  launch_api_skip: "서드파티 API로 Claude Code 실행 (권한 확인 자동 건너뛰기)",
15
16
  api_management: "서드파티 API 관리",
@@ -599,5 +600,10 @@ module.exports = {
599
600
  manual_complete: "업그레이드 완료!",
600
601
  manual_stats_upgraded: "업그레이드됨: {0}개",
601
602
  manual_stats_skipped: "건너뜀: {0}개 ({1}개 이미 최신, {2}개 업그레이드 정보 없음)"
603
+ },
604
+ hints: {
605
+ auto_mode_info: '자동 모드: 현재 Team 플랜에서 지원됩니다. Enterprise/API 플랜은 순차 출시 중입니다. 실행 후 Shift+Tab으로 전환하세요.',
606
+ active_api_info: '활성: {0} / {1}',
607
+ no_active_api: '활성화된 API가 없습니다. "API 관리"에서 추가하세요.'
602
608
  }
603
609
  };
@@ -10,6 +10,7 @@ module.exports = {
10
10
  title: "Menu Principal",
11
11
  launch_default: "Executar Claude Code",
12
12
  launch_skip: "Executar Claude Code (Pular Permissões Automaticamente)",
13
+ launch_auto_mode: "Iniciar Claude Code (Ativar modo automatico)",
13
14
  launch_api: "Executar Claude Code com API de Terceiros",
14
15
  launch_api_skip: "Executar Claude Code com API de Terceiros (Pular Permissões Automaticamente)",
15
16
  api_management: "Gerenciamento de API de Terceiros",
@@ -599,5 +600,10 @@ module.exports = {
599
600
  manual_complete: "Atualização completa!",
600
601
  manual_stats_upgraded: "Atualizados: {0}",
601
602
  manual_stats_skipped: "Ignorados: {0} ({1} já atualizados, {2} sem info de atualização)"
603
+ },
604
+ hints: {
605
+ auto_mode_info: 'Modo automatico: Disponivel para o plano Team. Enterprise/API em implantacao gradual. Apos iniciar, pressione Shift+Tab para alternar.',
606
+ active_api_info: 'Ativo: {0} / {1}',
607
+ no_active_api: 'Nenhuma API ativa configurada. Va para "Gerenciamento de API" para adicionar uma.'
602
608
  }
603
609
  };
@@ -10,6 +10,7 @@ module.exports = {
10
10
  title: "Главное меню",
11
11
  launch_default: "Запустить Claude Code",
12
12
  launch_skip: "Запустить Claude Code (Автопропуск разрешений)",
13
+ launch_auto_mode: "Запустить Claude Code (Включить авторежим)",
13
14
  launch_api: "Запустить Claude Code со сторонним API",
14
15
  launch_api_skip: "Запустить Claude Code со сторонним API (Автопропуск разрешений)",
15
16
  api_management: "Управление сторонними API",
@@ -599,5 +600,10 @@ module.exports = {
599
600
  manual_complete: "Обновление завершено!",
600
601
  manual_stats_upgraded: "Обновлено: {0}",
601
602
  manual_stats_skipped: "Пропущено: {0} ({1} уже обновлены, {2} без информации об обновлении)"
603
+ },
604
+ hints: {
605
+ auto_mode_info: 'Авторежим: Доступен для плана Team. Enterprise/API постепенно внедряются. После запуска нажмите Shift+Tab для переключения.',
606
+ active_api_info: 'Активный: {0} / {1}',
607
+ no_active_api: 'Нет настроенного активного API. Перейдите в "Управление API", чтобы добавить.'
602
608
  }
603
609
  };
@@ -10,6 +10,7 @@ module.exports = {
10
10
  title: "主選單",
11
11
  launch_default: "啟動 Claude Code",
12
12
  launch_skip: "啟動 Claude Code(自動跳過權限詢問)",
13
+ launch_auto_mode: "啟動 Claude Code(啟用自動模式)",
13
14
  launch_api: "使用第三方API啟動 Claude Code",
14
15
  launch_api_skip: "使用第三方API啟動 Claude Code(自動跳過權限詢問)",
15
16
  api_management: "第三方API管理",
@@ -599,5 +600,10 @@ module.exports = {
599
600
  manual_complete: "升級完成!",
600
601
  manual_stats_upgraded: "已升級:{0} 個",
601
602
  manual_stats_skipped: "已跳過:{0} 個({1} 個已是最新,{2} 個無升級資訊)"
603
+ },
604
+ hints: {
605
+ auto_mode_info: '自動模式:目前支援 Team 方案。Enterprise/API 方案逐步推出中。啟動後按 Shift+Tab 切換。',
606
+ active_api_info: '目前啟用:{0} / {1}',
607
+ no_active_api: '未設定啟用的API,請前往「API管理」新增。'
602
608
  }
603
609
  };
@@ -10,6 +10,7 @@ module.exports = {
10
10
  title: "主菜单",
11
11
  launch_default: "启动 Claude Code",
12
12
  launch_skip: "启动 Claude Code(自动跳过权限询问)",
13
+ launch_auto_mode: "启动 Claude Code(启用自动模式)",
13
14
  launch_api: "使用第三方API启动 Claude Code",
14
15
  launch_api_skip: "使用第三方API启动 Claude Code(自动跳过权限询问)",
15
16
  api_management: "第三方API管理",
@@ -599,5 +600,10 @@ module.exports = {
599
600
  manual_complete: "升级完成!",
600
601
  manual_stats_upgraded: "已升级: {0} 个",
601
602
  manual_stats_skipped: "已跳过: {0} 个 ({1} 个已是最新, {2} 个无升级信息)"
603
+ },
604
+ hints: {
605
+ auto_mode_info: '自动模式:目前支持 Team 计划。Enterprise/API 计划逐步推出中。启动后按 Shift+Tab 切换。',
606
+ active_api_info: '当前激活:{0} / {1}',
607
+ no_active_api: '未配置激活的API,请前往"API管理"添加。'
602
608
  }
603
609
  };
package/lib/launcher.js CHANGED
@@ -183,6 +183,15 @@ function launchClaudeSkipPermissions() {
183
183
  launchClaude('claude --dangerously-skip-permissions');
184
184
  }
185
185
 
186
+ /**
187
+ * Launch Claude with auto mode enabled
188
+ * Note: --enable-auto-mode makes auto mode available as a permission mode.
189
+ * User must press Shift+Tab in the session to switch to it.
190
+ */
191
+ function launchClaudeAutoMode() {
192
+ launchClaude('claude --enable-auto-mode');
193
+ }
194
+
186
195
  /**
187
196
  * Get environment variables based on provider type
188
197
  */
@@ -353,6 +362,7 @@ module.exports = {
353
362
  launchClaude,
354
363
  launchClaudeDefault,
355
364
  launchClaudeSkipPermissions,
365
+ launchClaudeAutoMode,
356
366
  launchClaudeWithApi,
357
367
  getProviderEnvVars,
358
368
  testApiConnection
@@ -35,15 +35,20 @@ const providers = {
35
35
  compatibility: 'native'
36
36
  },
37
37
  moonshot: {
38
- name: 'Moonshot AI (Kimi-K2)',
38
+ name: 'Moonshot AI (Kimi-K2.5/K2-Thinking)',
39
39
  baseUrl: 'https://api.moonshot.cn/anthropic',
40
40
  models: [
41
- 'kimi-k2-0711-preview',
42
- 'kimi-k2-0905-preview',
43
- 'kimi-k2-turbo-preview',
41
+ 'kimi-k2.5',
44
42
  'kimi-k2-thinking',
45
43
  'kimi-k2-thinking-turbo'
46
44
  ],
45
+ versionAliases: {
46
+ 'kimi-k2-0711-preview': 'kimi-k2.5',
47
+ 'kimi-k2-0905-preview': 'kimi-k2.5',
48
+ 'kimi-k2-turbo-preview': 'kimi-k2.5',
49
+ 'kimi-k2-thinking': 'kimi-k2.5',
50
+ 'kimi-k2-thinking-turbo': 'kimi-k2.5'
51
+ },
47
52
  authTokenFormat: 'sk-...',
48
53
  description: 'Moonshot AI - Provides Anthropic-compatible API',
49
54
  requiresToken: true,
@@ -74,8 +79,14 @@ const providers = {
74
79
  name: 'MiniMax CN (国内版)',
75
80
  baseUrl: 'https://api.minimaxi.com/anthropic',
76
81
  models: [
82
+ 'MiniMax-M2.7',
83
+ 'MiniMax-M2.5',
77
84
  'MiniMax-M2.1'
78
85
  ],
86
+ versionAliases: {
87
+ 'MiniMax-M2.1': 'MiniMax-M2.7',
88
+ 'MiniMax-M2.5': 'MiniMax-M2.7'
89
+ },
79
90
  authTokenFormat: 'sk-...',
80
91
  description: 'MiniMax AI - Anthropic-compatible API for China users',
81
92
  requiresToken: true,
@@ -90,8 +101,14 @@ const providers = {
90
101
  name: 'MiniMax Global (国际版)',
91
102
  baseUrl: 'https://api.minimax.io/anthropic',
92
103
  models: [
104
+ 'MiniMax-M2.7',
105
+ 'MiniMax-M2.5',
93
106
  'MiniMax-M2.1'
94
107
  ],
108
+ versionAliases: {
109
+ 'MiniMax-M2.1': 'MiniMax-M2.7',
110
+ 'MiniMax-M2.5': 'MiniMax-M2.7'
111
+ },
95
112
  authTokenFormat: 'sk-...',
96
113
  description: 'MiniMax AI - Anthropic-compatible API for international users',
97
114
  requiresToken: true,
@@ -120,18 +137,20 @@ const providers = {
120
137
  note: 'Requires extended timeout for complex reasoning tasks'
121
138
  },
122
139
  zhipu: {
123
- name: 'ZhiPu AI (GLM-5/4.7/4.6/4.5) - 智谱清言',
140
+ name: 'ZhiPu AI (GLM-5.1/5-Turbo/5/4.7) - 智谱清言',
124
141
  baseUrl: 'https://open.bigmodel.cn/api/anthropic',
125
142
  models: [
143
+ 'glm-5.1',
144
+ 'glm-5-turbo',
126
145
  'glm-5',
127
- 'glm-4.7',
128
- 'glm-4.6',
129
- 'glm-4.5'
146
+ 'glm-4.7'
130
147
  ],
131
148
  versionAliases: {
132
- 'glm-4.5': 'glm-5',
133
- 'glm-4.6': 'glm-5',
134
- 'glm-4.7': 'glm-5'
149
+ 'glm-4.5': 'glm-5.1',
150
+ 'glm-4.6': 'glm-5.1',
151
+ 'glm-4.7': 'glm-5.1',
152
+ 'glm-5': 'glm-5.1',
153
+ 'glm-5-turbo': 'glm-5.1'
135
154
  },
136
155
  authTokenFormat: 'sk-...',
137
156
  description: 'ZhiPu AI (智谱清言) - Anthropic-compatible API for mainland China',
@@ -144,18 +163,20 @@ const providers = {
144
163
  note: 'Requires extended timeout for large responses'
145
164
  },
146
165
  zai: {
147
- name: 'Z.ai (GLM-5/4.7/4.6/4.5) - ZhiPu Global',
166
+ name: 'Z.ai (GLM-5.1/5-Turbo/5/4.7) - ZhiPu Global',
148
167
  baseUrl: 'https://api.z.ai/api/anthropic',
149
168
  models: [
169
+ 'glm-5.1',
170
+ 'glm-5-turbo',
150
171
  'glm-5',
151
- 'glm-4.7',
152
- 'glm-4.6',
153
- 'glm-4.5'
172
+ 'glm-4.7'
154
173
  ],
155
174
  versionAliases: {
156
- 'glm-4.5': 'glm-5',
157
- 'glm-4.6': 'glm-5',
158
- 'glm-4.7': 'glm-5'
175
+ 'glm-4.5': 'glm-5.1',
176
+ 'glm-4.6': 'glm-5.1',
177
+ 'glm-4.7': 'glm-5.1',
178
+ 'glm-5': 'glm-5.1',
179
+ 'glm-5-turbo': 'glm-5.1'
159
180
  },
160
181
  authTokenFormat: 'sk-...',
161
182
  description: 'Z.ai (ZhiPu AI Global) - Anthropic-compatible API for international users',
package/lib/ui/menu.js CHANGED
@@ -60,8 +60,9 @@ class Menu {
60
60
  * Display menu with current selection
61
61
  * @param {boolean} clearScreen - Whether to clear screen before displaying (default: true)
62
62
  * @param {string} versionInfo - Optional version info to display between banner and navigation
63
+ * @param {Function|null} hintCallback - Optional sync callback(selectedIndex) returning hint string or null
63
64
  */
64
- displayMenu(clearScreen = true, versionInfo = null) {
65
+ displayMenu(clearScreen = true, versionInfo = null, hintCallback = null) {
65
66
  // Clear screen and display header + menu together (like old version)
66
67
  if (clearScreen) {
67
68
  console.clear();
@@ -92,6 +93,15 @@ class Menu {
92
93
  }
93
94
  });
94
95
 
96
+ // Render dynamic hint if callback provided
97
+ if (hintCallback) {
98
+ const hintText = hintCallback(this.selectedIndex);
99
+ if (hintText) {
100
+ console.log('');
101
+ console.log(colors.green + ' \u2139 ' + hintText + colors.reset);
102
+ }
103
+ }
104
+
95
105
  console.log('');
96
106
  }
97
107
 
@@ -107,8 +117,9 @@ class Menu {
107
117
  * Handle keyboard navigation
108
118
  * @param {boolean} clearScreen - Whether to clear screen on initial display (default: true)
109
119
  * @param {string} versionInfo - Optional version info to display
120
+ * @param {Function|null} hintCallback - Optional sync callback(selectedIndex) returning hint string or null
110
121
  */
111
- async navigate(clearScreen = true, versionInfo = null) {
122
+ async navigate(clearScreen = true, versionInfo = null, hintCallback = null) {
112
123
  // Guard against empty menu to prevent NaN from modulo operations
113
124
  if (!this.menuOptions || this.menuOptions.length === 0) {
114
125
  console.log(colors.yellow + ' Warning: No menu options available' + colors.reset);
@@ -116,9 +127,10 @@ class Menu {
116
127
  }
117
128
 
118
129
  this.versionInfo = versionInfo; // Store for redrawing
130
+ this.hintCallback = hintCallback; // Store for redrawing
119
131
 
120
132
  return new Promise((resolve, reject) => {
121
- this.displayMenu(clearScreen, versionInfo);
133
+ this.displayMenu(clearScreen, versionInfo, hintCallback);
122
134
 
123
135
  if (process.stdin.isTTY) {
124
136
  const scope = stdinManager.acquire('raw', {
@@ -171,12 +183,12 @@ class Menu {
171
183
  switch (key) {
172
184
  case '\u001b[A': // Up arrow
173
185
  this.selectedIndex = (this.selectedIndex - 1 + this.menuOptions.length) % this.menuOptions.length;
174
- this.displayMenu(true, this.versionInfo);
186
+ this.displayMenu(true, this.versionInfo, this.hintCallback);
175
187
  break;
176
188
 
177
189
  case '\u001b[B': // Down arrow
178
190
  this.selectedIndex = (this.selectedIndex + 1) % this.menuOptions.length;
179
- this.displayMenu(true, this.versionInfo);
191
+ this.displayMenu(true, this.versionInfo, this.hintCallback);
180
192
  break;
181
193
 
182
194
  case '\r': // Enter
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kikkimo/claude-launcher",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "description": "Interactive launcher for Claude Code with beautiful Claude-style interface",
5
5
  "main": "claude-launcher",
6
6
  "bin": {
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "scripts": {
10
10
  "start": "node claude-launcher",
11
- "test": "echo \"No tests specified\" && exit 0",
11
+ "test": "node test/providers.test.js && node test/menu-hints.test.js",
12
12
  "prepublishOnly": "echo \"Publishing claude-launcher...\"",
13
13
  "postinstall": "echo \"Claude Launcher installed successfully! Run 'claude-launcher' to start.\"",
14
14
  "publish:public": "npm publish --access public"