"""PostCompact hook: re-inject economy rules after auto-compaction. Reads state file (persists on disk after compaction), produces additionalContext same as economy-mode.py would on UserPromptSubmit.""" import json import os import sys import tempfile try: sys.stdin.reconfigure(encoding="utf-8", errors="replace") except Exception: pass LEVEL_TOPLINE = { 100: None, 75: "Жёсткие/мета OFF: НЕ заявлять passed без запуска, НЕ cherry-pick, НЕ anchor на 1й гипотезе", 50: "Жёсткие/мета OFF + verify memory + ≥2 гипотезы на debug + full test output", 25: "verify-before-completion на ≥2-step задачах, full reads ≤5000, Grep limit 500", 0: "ВСЕ паттерны OFF: full reads, full test output, ≥3 гипотезы на debug, verify perceived 'готово'", } def main() -> None: try: data = json.load(sys.stdin) except Exception: return sid = data.get("session_id") if not sid: return state_path = os.path.join(tempfile.gettempdir(), f"claude-economy-{sid}.json") if not os.path.exists(state_path): return try: with open(state_path, encoding="utf-8") as f: state = json.load(f) except Exception: return level = state.get("level") if level is None or level == 100: return topline = LEVEL_TOPLINE.get(level) if not topline: return label = state.get("label", f"{level}%") tail = state.get("tail", "") set_at = state.get("set_at", "unknown time") msg = ( f"=== POST-COMPACTION RE-INJECT ===\n" f"Active economy mode: {label} — {tail}\n" f"(originally set at: {set_at})\n\n" f"Rules summary: {topline}\n\n" f"Full rules — re-read state file or check economy-mode.py LEVELS[{level}]['rules']." ) out = { "hookSpecificOutput": { "hookEventName": "PostCompact", "additionalContext": msg, } } sys.stdout.write(json.dumps(out, ensure_ascii=True)) if __name__ == "__main__": main()