cc-os/plugins/os-vault/hooks/session_state.py

39 lines
1.0 KiB
Python
Raw Permalink Normal View History

"""Touched-paths handoff between post-tool-use-write and session-end (deep module).
Encapsulates the /tmp/claude-vault-touched-<session_id> temp-file contract. The
file still exists by necessity the two hooks are separate process invocations
with no shared memory; the win is an explicit, named, testable contract.
One path per line. Fail-open throughout.
"""
from __future__ import annotations
import os
def _touch_file(session_id: str) -> str:
return f"/tmp/claude-vault-touched-{session_id}"
def record_touch(session_id: str, path: str) -> None:
try:
with open(_touch_file(session_id), "a") as f:
f.write(path + "\n")
except Exception:
pass
def read_touches(session_id: str) -> list:
try:
with open(_touch_file(session_id)) as f:
content = f.read()
except Exception:
return []
return [line for line in content.splitlines() if line]
def clear_touches(session_id: str) -> None:
try:
os.remove(_touch_file(session_id))
except Exception:
pass