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 токена

⚙️ Как это работает

  1. Пары tool_use ↔ tool_result связываются по tool_use_id.
  2. Первые сообщения и последние preserveRecentMessages сообщений — pinned.
  3. Состояние для Jev: весь диалог (старые tool results заменены на ok, N chars (omitted)).
  4. Фиттинг состояния в maxStateTokens по этапам: • усечение tool inputs: 1000 → 200 → 60 символов; • обрезка длинных текстов (head + tail); • замена старых сообщений на [… N chars omitted …]; • сокращение tool calls до одной строки; • удаление старых сообщений без calls.
  5. Для каждого unpinned call Jev отвечает на два вопроса: • keepCall — нужно ли оставить вызов; • keepResult — нужно ли оставить результат verbatim.
  6. Решения: • keepResult ≥ threshold → сохранить call + result; • keepCall ≥ threshold → сохранить call, усечь result до truncateHeadChars + заметка; • иначе → удалить call и result.
  7. Сообщения без контента удаляются; результат без вызова невозможен.

💡 Вывод и значение

• Сохраняет критически важные факты, которых теряет суммаризация. • Позволяет экономить токены без риска потерять контекст. • Работает как библиотека и как плагин 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).

Мои мысли

graph

Карта связей