cc-os/plugins/memory/hooks/session_context.py

60 lines
1.5 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""UserPromptSubmit hook — inject project graph path on the first prompt. Fail-open.
First prompt per session: emits hookSpecificOutput with additionalContext.
Subsequent prompts: emits {} (no-op).
"""
import os
import sys
import json
import subprocess
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import hook_io
def main():
inp = hook_io.read_input()
session_id = inp.session_id or "unknown"
cwd = inp.cwd or os.getcwd()
flag_file = f"/tmp/memory-context-injected-{session_id}"
if os.path.exists(flag_file):
print("{}")
return
try:
open(flag_file, "a").close()
except Exception:
pass
context = ""
try:
r = subprocess.run(
["git", "-C", cwd, "rev-parse", "--show-toplevel"],
capture_output=True, text=True,
)
project_root = r.stdout.strip() if r.returncode == 0 else ""
except Exception:
project_root = ""
if project_root:
project_graph = os.path.join(project_root, "graphify-out", "graph.json")
if os.path.isfile(project_graph):
context = "## Project Graph\n\nProject graph: %s\n" % project_graph
output = json.dumps({
"hookSpecificOutput": {
"hookEventName": "UserPromptSubmit",
"additionalContext": context,
}
})
print(output)
if __name__ == "__main__":
try:
main()
except Exception as e:
print(f"[session-context] error: {e}", file=sys.stderr)
sys.exit(0)