68 lines
1.7 KiB
Python
68 lines
1.7 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""PostToolUse hook for Write/Edit — record vault .md touch, invalidate rebuild stamp.
|
||
|
|
|
||
|
|
Fail-open. Exits silently (no side effects) unless the written file is a .md file
|
||
|
|
under the configured vault path.
|
||
|
|
"""
|
||
|
|
import os
|
||
|
|
import sys
|
||
|
|
from datetime import datetime, timezone
|
||
|
|
|
||
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||
|
|
import config as config_mod
|
||
|
|
import hook_io
|
||
|
|
import session_state
|
||
|
|
|
||
|
|
|
||
|
|
def _utc():
|
||
|
|
return datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
|
||
|
|
|
||
|
|
|
||
|
|
def main():
|
||
|
|
cache_dir = os.path.expanduser("~/.cache/graphify")
|
||
|
|
try:
|
||
|
|
os.makedirs(cache_dir, exist_ok=True)
|
||
|
|
except Exception:
|
||
|
|
pass
|
||
|
|
|
||
|
|
cfg = config_mod.load_config()
|
||
|
|
inp = hook_io.read_input()
|
||
|
|
file_path = inp.file_path
|
||
|
|
session_id = inp.session_id
|
||
|
|
|
||
|
|
if not file_path:
|
||
|
|
return
|
||
|
|
if not file_path.endswith(".md"):
|
||
|
|
return
|
||
|
|
if not file_path.startswith(cfg.vault_path):
|
||
|
|
return
|
||
|
|
|
||
|
|
log = os.path.join(cache_dir, "post-tool-use.log")
|
||
|
|
session_state.record_touch(session_id, file_path)
|
||
|
|
|
||
|
|
stamp = os.path.join(cache_dir, "vault-rebuild.stamp")
|
||
|
|
removed_ok = True
|
||
|
|
try:
|
||
|
|
os.remove(stamp)
|
||
|
|
except FileNotFoundError:
|
||
|
|
pass
|
||
|
|
except Exception:
|
||
|
|
removed_ok = False
|
||
|
|
|
||
|
|
try:
|
||
|
|
with open(log, "a") as f:
|
||
|
|
if removed_ok:
|
||
|
|
f.write(f"[{_utc()}] Invalidated rebuild stamp: {file_path}\n")
|
||
|
|
else:
|
||
|
|
f.write(f"[{_utc()}] WARN: Could not delete rebuild stamp for {file_path}\n")
|
||
|
|
except Exception:
|
||
|
|
pass
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
try:
|
||
|
|
main()
|
||
|
|
except Exception as e:
|
||
|
|
print(f"[post-tool-use-write] error: {e}", file=sys.stderr)
|
||
|
|
sys.exit(0)
|