Compare commits

..

3 Commits

Author SHA1 Message Date
Виталий Никитенко
b3468095c9 docs(rules): authorize Eltex merge-request review writes 2026-08-21 15:42:04 +03:00
Виталий Никитенко
676b25217e docs(effort): DeepSeek V4 has 3 native effort levels
low->low, medium/xhigh->high, max->max on the DeepSeek API side.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 15:41:59 +03:00
Виталий Никитенко
9448212a26 fix(deepseek): USD-only balance display, drop CNY/¥
Launcher and statusline show only USD from balance_infos; ¥ removed.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 15:41:55 +03:00
5 changed files with 20 additions and 20 deletions

View File

@@ -15,10 +15,10 @@
| Claude Code `/effort` | Anthropic (`ai-claude`) | DeepSeek V4 (`ai-deepseek`) | Kimi K2.7/K2.6 (`ai-kimi`) | GLM 5.3 (`ai-glm`) | OpenRouter/GPT-5.5 (`ai-openrouter`) | OpenCode Go (`ai-opencode`) | | Claude Code `/effort` | Anthropic (`ai-claude`) | DeepSeek V4 (`ai-deepseek`) | Kimi K2.7/K2.6 (`ai-kimi`) | GLM 5.3 (`ai-glm`) | OpenRouter/GPT-5.5 (`ai-openrouter`) | OpenCode Go (`ai-opencode`) |
|:---:|:---:|:---:|:---:|:---:|:---:|:---:| |:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| `low` | нативно `low` | провайдер поднимает до `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга | | `low` | нативно `low` | нативно `low` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
| `medium` | нативно `medium` | провайдер поднимает до `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга | | `medium` | нативно `medium` | провайдер поднимает до `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
| `high` | нативно `high` | нативно `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга | | `high` | нативно `high` | нативно `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
| `xhigh` | нативно `xhigh` | провайдер поднимает до `max` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга | | `xhigh` | нативно `xhigh` | провайдер поднимает до `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
| `max` | нативно `max` | нативно `max` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга | | `max` | нативно `max` | нативно `max` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
Для OpenRouter текущий лаунчер не делает локального преобразования effort и отправляет Для OpenRouter текущий лаунчер не делает локального преобразования effort и отправляет
@@ -45,12 +45,13 @@ low -> medium -> high -> xhigh -> max
### DeepSeek V4 ### DeepSeek V4
```text ```text
high -> max low -> high -> max
``` ```
- 2 реальных уровня. - 3 реальных уровня.
- `low` и `medium` фактически поднимаются до `high`. - `low` остаётся `low` — реально снижает thinking бюджет.
- `xhigh` фактически поднимается до `max`. - `medium` и `xhigh` фактически поднимаются до `high`.
- `max` остаётся `max` — максимальный бюджет thinking.
- Маппинг выполняется на стороне DeepSeek API. - Маппинг выполняется на стороне DeepSeek API.
- Дефолт `ai-deepseek`: `high`. - Дефолт `ai-deepseek`: `high`.
@@ -125,4 +126,4 @@ ai-deepseek # без флага - использовать ур
- Для повседневной работы: `high` или `xhigh`. - Для повседневной работы: `high` или `xhigh`.
- `max` effort имеет реальный эффект у Anthropic и DeepSeek; у Kimi и GLM это всё тот же thinking on / маппинг на стороне сервера. - `max` effort имеет реальный эффект у Anthropic и DeepSeek; у Kimi и GLM это всё тот же thinking on / маппинг на стороне сервера.
- `low`/`medium` у DeepSeek, Kimi и GLM фактически не снижают reasoning. - `low`/`medium` у Kimi и GLM фактически не снижают reasoning; у DeepSeek `low` теперь даёт реальный уровень `low` и экономит бюджет.

View File

@@ -23,6 +23,7 @@ Use these defaults across projects, then apply any more specific repository inst
- For requests to answer, explain, review, diagnose, or plan, inspect the relevant materials and report the result. Do not implement changes unless the request also asks for them. - For requests to answer, explain, review, diagnose, or plan, inspect the relevant materials and report the result. Do not implement changes unless the request also asks for them.
- For requests to change, build, or fix, perform safe in-scope local edits and validation without asking for routine confirmation. - For requests to change, build, or fix, perform safe in-scope local edits and validation without asking for routine confirmation.
- Ask before destructive or difficult-to-recover actions, external writes or publication, purchases, or a material expansion of scope. - Ask before destructive or difficult-to-recover actions, external writes or publication, purchases, or a material expansion of scope.
- Exception for Eltex merge-request reviews: a bare review request or explicit `eltex-review` invocation authorizes the skill's documented GitLab writes, including inline discussions, approval, and its thank-you note. Explicit chat-only wording keeps the review read-only.
- Preserve unrelated user changes and adapt to a dirty working tree. Never discard or overwrite work you did not create. - Preserve unrelated user changes and adapt to a dirty working tree. Never discard or overwrite work you did not create.
## 4. Plan and Verify Proportionally ## 4. Plan and Verify Proportionally

View File

@@ -6,7 +6,7 @@ The custom statusline script renders **only ASCII-safe characters and ANSI color
- ASCII brackets `[ ]` for git branch and effort level - ASCII brackets `[ ]` for git branch and effort level
- ANSI 256-color escape sequences for model names, effort levels, and rate-limit percentages - ANSI 256-color escape sequences for model names, effort levels, and rate-limit percentages
- The `¥` symbol (U+00A5) for CNY balance in DeepSeek output - The `$` symbol for the DeepSeek balance (USD only)
It does **not** use Nerd Font glyphs, powerline separators, or emoji. It does **not** use Nerd Font glyphs, powerline separators, or emoji.

View File

@@ -171,13 +171,12 @@ if [[ "$model_id" == *deepseek* ]]; then
import sys, json import sys, json
d = json.load(sys.stdin) d = json.load(sys.stdin)
infos = d.get('balance_infos', []) infos = d.get('balance_infos', [])
symbols = {'USD': '\$', 'CNY': '\u00a5'}
parts = [] parts = []
for info in infos: for info in infos:
curr = info.get('currency', '') if info.get('currency', '').upper() != 'USD':
continue
total = info.get('total_balance', '0') total = info.get('total_balance', '0')
sym = symbols.get(curr, curr) parts.append(f'\${total}')
parts.append(f'{sym}{total}')
if parts: if parts:
print(' '.join(parts)) print(' '.join(parts))
" 2>/dev/null) " 2>/dev/null)

View File

@@ -706,25 +706,24 @@ try:
d = json.load(sys.stdin) d = json.load(sys.stdin)
available = d.get('is_available', False) available = d.get('is_available', False)
infos = d.get('balance_infos', []) infos = d.get('balance_infos', [])
# Показываем только USD (CNY не выводим)
infos = [i for i in infos if i.get('currency', '').upper() == 'USD']
if not infos: if not infos:
print(' \033[0;33m[БАЛАНС]\033[0m Нет данных о балансе') print(' \033[0;33m[БАЛАНС]\033[0m Нет данных о балансе')
sys.exit(0) sys.exit(0)
symbols = {'USD': '\$', 'CNY': '¥'}
cache_parts = [] cache_parts = []
for info in infos: for info in infos:
curr = info.get('currency', '???')
total = info.get('total_balance', '0') total = info.get('total_balance', '0')
granted = info.get('granted_balance', '0') granted = info.get('granted_balance', '0')
topped_up = info.get('topped_up_balance', '0') topped_up = info.get('topped_up_balance', '0')
sym = symbols.get(curr, curr)
status = '✅ доступен' if available else '❌ не активен' status = '✅ доступен' if available else '❌ не активен'
print(f' \033[1;36m💰 Баланс DeepSeek:\033[0m {total} {curr} {status}') print(f' \033[1;36m💰 Баланс DeepSeek:\033[0m \${total} {status}')
if float(granted) > 0: if float(granted) > 0:
print(f' └─ Начислено: {granted} {curr}') print(f' └─ Начислено: \${granted}')
if float(topped_up) > 0: if float(topped_up) > 0:
print(f' └─ Пополнено: {topped_up} {curr}') print(f' └─ Пополнено: \${topped_up}')
cache_parts.append(f'{sym}{total}') cache_parts.append(f'\${total}')
# Cache all currencies with symbols for statusline # Cache USD balance for statusline
if cache_parts: if cache_parts:
cache_dir = os.path.expanduser('~/.cache/ai-setup') cache_dir = os.path.expanduser('~/.cache/ai-setup')
os.makedirs(cache_dir, exist_ok=True) os.makedirs(cache_dir, exist_ok=True)