Files
FESADev/.codex/hooks/pre_edit_policy.py
T
2026-05-01 02:29:30 +09:00

59 lines
1.4 KiB
Python

#!/usr/bin/env python3
"""Add FESA context before repository files are edited."""
from __future__ import annotations
import json
import re
import sys
WATCHED_PATTERNS = (
r"\bAGENTS\.md\b",
r"\bPLAN\.md\b",
r"\bPROGRESS\.md\b",
r"\bdocs[\\/]",
r"\bphases[\\/]",
r"\.codex[\\/]agents[\\/]",
r"\.codex[\\/]commands[\\/]",
r"\.codex[\\/]skills[\\/]",
r"\.codex[\\/]hooks",
r"\.codex[\\/]config\.toml\b",
r"\bplugins[\\/]",
r"\.agents[\\/]plugins[\\/]",
)
def has_watched_path(tool_input: object) -> bool:
text = json.dumps(tool_input, ensure_ascii=False)
return any(re.search(pattern, text, re.IGNORECASE) for pattern in WATCHED_PATTERNS)
def main() -> int:
try:
payload = json.load(sys.stdin)
except json.JSONDecodeError:
return 0
if not has_watched_path(payload.get("tool_input", {})):
return 0
json.dump(
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"additionalContext": (
"FESA edit guardrail: after editing docs, phases, or .codex extension files, "
"keep PLAN.md/PROGRESS.md synchronized and run python scripts/validate_workspace.py "
"when the turn changes files."
),
}
},
sys.stdout,
)
return 0
if __name__ == "__main__":
raise SystemExit(main())