1 default off + session on: PASS (settings.test, RPC) 2 global on persists: PASS (settings.test, RPC) 3 auto compact reinject: PARTIAL (kept/reinject units; E2E blocked) 4 manual /compact skip: PASS (reinject-manual-defer.test) 5 tracked sources: PASS (detect.test) 6 state /resume: PASS code (loadStateFromBranch); no integration test 7 footer on·N: PASS code (updateSkillReinjectStatusLine); TUI not exercised 8 no duplicate in kept: PASS (kept-window.test) 9 pi-auto-compact defer: PARTIAL (auto-compact.test; race E2E blocked) 10 manual /compact coexist: PARTIAL (manual-defer units; E2E blocked) Co-authored-by: Cursor <cursoragent@cursor.com>
pi-skill-reinject
Pi Coding Agent extension: отслеживает вызванные skills и повторно инжектит их после auto compaction.
Статус: реализовано (v1)
Установка
# из клона репозитория
pi -e ./src/index.ts
# или абсолютный путь
pi -e ~/Documents/repos/pi-auto-reinjection/src/index.ts
Для постоянной установки укажите путь к src/index.ts в ~/.pi/agent/settings.json → extensions (нужен весь каталог src/, не один файл). См. Pi extensions.
По умолчанию extension выключен. Включение:
/skill-reinject on # эта сессия
/skill-reinject global on # навсегда (~/.pi/agent/settings.json)
Команда /skill-reinject
/skill-reinject # статус (enabled, delivery, tracked, pending)
/skill-reinject on | off | reset # session override
/skill-reinject global on | off # глобальный default
/skill-reinject list | clear # tracked skills
/skill-reinject now # принудительный re-inject (debug)
/skill-reinject integration auto|defer|immediate|off
Алиасы: /sr, /skills-reinject. Footer status: on·N / off·N.
Полный синтаксис и настройки — SPEC.md §7.
Как это работает
Pi хранит в контексте только описания skills; полный SKILL.md теряется при compaction. Extension отслеживает вызванные skills (/skill:name, skill-блоки, read на SKILL.md при trackReadPaths: true) и после auto compaction повторно инжектит отсутствующие в kept window блоки — тем же форматом, что /skill:name.
Совместимость с pi-auto-compact
Рассчитан на совместную работу с @capyup/pi-auto-compact. При обнаружении команды auto-compact re-inject идёт через defer + before_agent_start, чтобы не конкурировать с follow-up pi-auto-compact (см. SPEC.md §16).
Coexistence с Pi default auto-compaction: оба механизма могут сработать в одной сессии. При использовании pi-auto-compact можно отключить встроенный compaction Pi ("compaction.enabled": false в settings) или оставить оба — skill-reinject отработает после каждого auto compaction. Extension не отключает чужой compaction; при первом обнаружении обоих механизмов показывает одноразовый hint.
Разработка
npm run typecheck # tsc --noEmit
npm test # vitest
Документация
- SPEC.md — полное ТЗ
- Pi extensions
- Pi skills
- Pi compaction
- pi-auto-compact