60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
#!/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)
|