fix: system-prompt через файл, кеш rate_limits при старте, SessionStart хук
- Все лаунчеры (ai-claude, ai-deepseek, ai-kimi, ai-openrouter): промпт пишется во временный файл через --system-prompt-file вместо аргумента командной строки. Решает E2BIG при промптах > 128KB (MAX_ARG_STRLEN) из проектов с большими .md файлами. - statusline: кешируем rate_limits по model_id (раздельные файлы для claude/kimi/openrouter). При старте сессии показываем данные из кеша + ctx:0%. Убирает пустую статусную строку до первого запроса. - settings.json: добавляем SessionStart хук при setup, триггерит вызов statusLine при открытии сессии. - ai-claude: --model sonnet зафиксирован, убрали exec для корректной работы trap (cleanup временного файла). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
input=$(cat)
|
||||
cwd=$(echo "$input" | jq -r '.cwd')
|
||||
model=$(echo "$input" | jq -r '.model.display_name // empty')
|
||||
model_id=$(echo "$input" | jq -r '.model.id // empty')
|
||||
five_pct=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')
|
||||
five_reset=$(echo "$input" | jq -r '.rate_limits.five_hour.resets_at // empty')
|
||||
week_pct=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')
|
||||
@@ -47,13 +48,72 @@ pct_color() {
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ "$model" == *[Dd]eep[Ss]eek* ]]; then
|
||||
# --- Баланс DeepSeek ---
|
||||
# Моментально показываем кэшированный баланс, в фоне обновляем через API.
|
||||
if [[ "$model_id" == *deepseek* ]]; then
|
||||
cache_file="$HOME/.cache/ai-setup/deepseek_balance"
|
||||
if [ -f "$cache_file" ]; then
|
||||
balance=$(head -1 "$cache_file")
|
||||
[ -n "$balance" ] && printf " \033[00;35m\$%s\033[00m" "$balance"
|
||||
fi
|
||||
|
||||
# Фоновое обновление баланса (не чаще раза в 30 секунд)
|
||||
refresh_ts="$HOME/.cache/ai-setup/deepseek_balance_refresh_ts"
|
||||
now=$(date +%s)
|
||||
last=$(cat "$refresh_ts" 2>/dev/null || echo 0)
|
||||
if [ $(( now - last )) -gt 30 ]; then
|
||||
key_file="$HOME/.config/ai-setup/deepseek_key"
|
||||
if [ -f "$key_file" ]; then
|
||||
echo "$now" > "$refresh_ts" 2>/dev/null
|
||||
(
|
||||
api_key=$(cat "$key_file")
|
||||
resp=$(curl -s --max-time 10 "https://api.deepseek.com/user/balance" \
|
||||
-H "Authorization: Bearer $api_key" \
|
||||
-H "Accept: application/json" 2>/dev/null)
|
||||
if [ -n "$resp" ]; then
|
||||
new_balance=$(echo "$resp" | python3 -c "
|
||||
import sys, json
|
||||
d = json.load(sys.stdin)
|
||||
infos = d.get('balance_infos', [])
|
||||
if infos:
|
||||
curr = infos[0].get('currency', '')
|
||||
total = infos[0].get('total_balance', '0')
|
||||
print(f'{total} {curr}')
|
||||
" 2>/dev/null)
|
||||
if [ -n "$new_balance" ]; then
|
||||
echo "$new_balance" > "$cache_file"
|
||||
fi
|
||||
fi
|
||||
) &
|
||||
fi
|
||||
fi
|
||||
else
|
||||
# Рейт-лимиты для НЕ-DeepSeek провайдеров
|
||||
# Кеш специфичен для провайдера (по model_id) чтобы не смешивать claude/kimi/openrouter
|
||||
_cache_key=$(echo "${model_id:-unknown}" | sed 's/[^a-zA-Z0-9._-]/_/g')
|
||||
RATE_CACHE="$HOME/.cache/ai-setup/rate_limits_${_cache_key}.cache"
|
||||
mkdir -p "$HOME/.cache/ai-setup"
|
||||
|
||||
# Если есть свежие данные - сохранить в кеш
|
||||
if [ -n "$five_pct" ] || [ -n "$week_pct" ]; then
|
||||
{
|
||||
echo "FIVE_PCT=${five_pct}"
|
||||
echo "FIVE_RESET=${five_reset}"
|
||||
echo "WEEK_PCT=${week_pct}"
|
||||
echo "WEEK_RESET=${week_reset}"
|
||||
} > "$RATE_CACHE"
|
||||
fi
|
||||
|
||||
# Если нет данных - читать из кеша (старт сессии до первого запроса)
|
||||
if [ -z "$five_pct" ] && [ -z "$week_pct" ] && [ -f "$RATE_CACHE" ]; then
|
||||
# shellcheck source=/dev/null
|
||||
source "$RATE_CACHE" 2>/dev/null
|
||||
five_pct="${FIVE_PCT:-}"
|
||||
five_reset="${FIVE_RESET:-}"
|
||||
week_pct="${WEEK_PCT:-}"
|
||||
week_reset="${WEEK_RESET:-}"
|
||||
fi
|
||||
|
||||
if [ -n "$five_pct" ] && [ -n "$five_reset" ]; then
|
||||
five_int=$(printf '%.0f' "$five_pct")
|
||||
remaining=$(fmt_remaining "$five_reset")
|
||||
@@ -68,6 +128,9 @@ else
|
||||
fi
|
||||
fi
|
||||
|
||||
# ctx:0% при старте новой сессии (нет данных от API)
|
||||
[ -z "$ctx_pct" ] && ctx_pct="0"
|
||||
|
||||
if [ -n "$ctx_pct" ]; then
|
||||
ctx_int=$(printf '%.0f' "$ctx_pct")
|
||||
color=$(pct_color "$ctx_int")
|
||||
|
||||
Reference in New Issue
Block a user