Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """sessionStart hook: snapshot git tree for codex review threshold gating. | |
| Saves a git tree reference representing the working-tree state at session | |
| start. The companion stop hook (codex_review.py) diffs against this | |
| baseline to measure how much the session changed, independent of commits. | |
| """ | |
| import subprocess | |
| import sys | |
| from pathlib import Path | |
| project_root = Path(__file__).resolve().parent.parent | |
| state_dir = project_root / ".cursor" / "hooks" / "state" | |
| baseline_path = state_dir / "codex_review_baseline" | |
| def save_baseline() -> None: | |
| """Record the working-tree state so the review hook can diff against it. | |
| Uses git add -N to include untracked files in the snapshot, so new | |
| files created during the session appear in the stop-time diff. | |
| """ | |
| state_dir.mkdir(parents=True, exist_ok=True) | |
| subprocess.run( | |
| ["/usr/bin/git", "add", "-N", "."], | |
| capture_output=True, | |
| text=True, | |
| timeout=10, | |
| check=False, | |
| cwd=str(project_root), | |
| ) | |
| stash = subprocess.run( | |
| ["/usr/bin/git", "stash", "create"], | |
| capture_output=True, | |
| text=True, | |
| timeout=10, | |
| check=False, | |
| cwd=str(project_root), | |
| ) | |
| sha = stash.stdout.strip() | |
| if not sha: | |
| head = subprocess.run( | |
| ["/usr/bin/git", "rev-parse", "HEAD"], | |
| capture_output=True, | |
| text=True, | |
| timeout=5, | |
| check=False, | |
| cwd=str(project_root), | |
| ) | |
| sha = head.stdout.strip() | |
| baseline_path.write_text(sha) | |
| def main() -> None: | |
| """Entry point: read hook input, snapshot baseline, emit empty JSON.""" | |
| sys.stdin.read() | |
| save_baseline() | |
| print("{}") | |
| if __name__ == "__main__": | |
| main() | |