Fast Jev Compaction для Claude
Claude Code плагин и npm-библиотека, заменяющая lossy-суммаризацию контекста на точечное удаление ненужных tool calls и результатов по решениям Jev.
privacy
Эта заметка участвует в semantic memory.
AI Summary
🚀 TL;DR
Библиотека и плагин для Claude Code, которые вместо суммаризации старых сообщений удаляют только те tool calls и tool results, которые Jev признаёт устаревшими. Всё остальное остаётся verbatim.
📖 Что это такое
fast-jev-compaction — npm-пакет (src/) и Claude Code function-hook плагин (hooks/, .claude-plugin/). Заменяет встроенную компактизацию Claude Code на механизм, который:
• не переписывает текст пользователя и ассистента;
• удаляет или усекает только tool calls / results по решениям Jev;
• сохраняет точные пути, ошибки, команды и ограничения.
🔑 Ключевые факты
• Репозиторий: tamaratran/fast-jev-compaction
• Установка: npm install fast-jev-compaction
• Переменная окружения: TYPESAFE_API_KEY
• Модель по умолчанию: jev-latest
• Эндпоинт: https://api.typesafe.ai/v1/systemone
• Порог принятия решения: keepThreshold = 0.5
• Сохраняемые последние сообщения: preserveRecentMessages = 6
• Лимит состояния: maxStateTokens = 25000
• Лимит запроса: maxRequestTokens = 30000
• Усечение результата: truncateHeadChars = 300
• Оценка токенов: 1 слово ≈ 6 символов, 1 цифра ≈ 0.5 токена
⚙️ Как это работает
- Пары
tool_use↔tool_resultсвязываются поtool_use_id. - Первые сообщения и последние
preserveRecentMessagesсообщений — pinned. - Состояние для Jev: весь диалог (старые tool results заменены на
ok, N chars (omitted)). - Фиттинг состояния в
maxStateTokensпо этапам: • усечение tool inputs: 1000 → 200 → 60 символов; • обрезка длинных текстов (head + tail); • замена старых сообщений на[… N chars omitted …]; • сокращение tool calls до одной строки; • удаление старых сообщений без calls. - Для каждого unpinned call Jev отвечает на два вопроса:
•
keepCall— нужно ли оставить вызов; •keepResult— нужно ли оставить результат verbatim. - Решения:
•
keepResult ≥ threshold→ сохранить call + result; •keepCall ≥ threshold→ сохранить call, усечь result доtruncateHeadChars+ заметка; • иначе → удалить call и result. - Сообщения без контента удаляются; результат без вызова невозможен.
💡 Вывод и значение
• Сохраняет критически важные факты, которых теряет суммаризация.
• Позволяет экономить токены без риска потерять контекст.
• Работает как библиотека и как плагин Claude Code 2.1.274+.
• При неудаче Jev или недостаточном сокращении — fallback на встроенную суммаризацию.
• Для разработки: npm run typecheck && npm test && npm run build && npm run validate:plugin.
📌 Важные детали
• Только tool calls/results могут быть удалены; текст сообщений остаётся.
• Оценка токенов — эвристика, не tokenizer.
• Полное состояние повторяется в каждом параллельном запросе.
• Для кастомного транспорта реализуйте JevAsker и используйте compact(messages, asker, options).
• Плагин требует CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 и перезапуска Claude Code.
• Демо: SwiftUI-приложение demo/JevDemo для записи экрана (не использует API).