/**
 * ============================================================
 *  src/ui/hooks/useTokenUsage.ts —— token 用量计算
 * ------------------------------------------------------------
 *  纯函数 hook：根据当前 history 算 token 数 + 距离压缩阈值的百分比，
 *  StatusLine 用它显示底部状态。
 *
 *  历史坑：曾经用 useMemo([messages, provider]) 缓存——但 useChat
 *  里的 historyRef.current 跨渲染始终是同一个数组引用（runQuery
 *  内部用 push() / length=0 直接 mutate），useMemo 缓存键永不失效，
 *  导致 StatusLine 显示的 token 数从启动后就冻结。
 *
 *  修复：直接每渲染重算。countMessagesTokens 在百 KB 历史上 < 1ms，
 *  仅状态栏一处调用，零负担。如果未来历史规模变大需要 memo，
 *  再额外传入版本号 prop 配合依赖即可。
 * ============================================================
 */
import { getCompactThreshold } from '../../context/compact.js';
import { countMessagesTokens } from '../../context/tokenCounter.js';
export function useTokenUsage(messages, provider) {
    const tokens = countMessagesTokens(messages);
    // 与 loop 实际触发同源（getCompactThreshold：按 contextWindow × compactRatio 比例 + 8K 下限）
    const threshold = getCompactThreshold(provider);
    return {
        tokens,
        threshold,
        contextWindow: provider.contextWindow,
        toThreshold: threshold - tokens,
    };
}
