Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion plugins/hookify/core/config_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,8 @@ def load_rules(event: Optional[str] = None) -> List[Rule]:
rules = []

# Find all hookify.*.local.md files
pattern = os.path.join('.claude', 'hookify.*.local.md')
claude_dir = os.path.join(os.path.expanduser('~'), '.claude')
pattern = os.path.join(claude_dir, 'hookify.*.local.md')
files = glob.glob(pattern)

for file_path in files:
Expand Down
12 changes: 9 additions & 3 deletions plugins/hookify/core/rule_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from typing import List, Dict, Any, Optional

# Import from local module
from hookify.core.config_loader import Rule, Condition
from core.config_loader import Rule, Condition


# Cache compiled regexes (max 128 patterns)
Expand Down Expand Up @@ -86,8 +86,14 @@ def evaluate_rules(self, rules: List[Rule], input_data: Dict[str, Any]) -> Dict[
# If only warnings, show them but allow operation
if warning_rules:
messages = [f"**[{r.name}]**\n{r.message}" for r in warning_rules]
combined_message = "\n\n".join(messages)
return {
"systemMessage": "\n\n".join(messages)
"systemMessage": combined_message,
"hookSpecificOutput": {
"hookEventName": hook_event or "PreToolUse",
"permissionDecision": "allow",
"additionalContext": combined_message
}
}

# No matches - allow operation
Expand Down Expand Up @@ -275,7 +281,7 @@ def _regex_match(self, pattern: str, text: str) -> bool:

# For testing
if __name__ == '__main__':
from hookify.core.config_loader import Condition, Rule
from core.config_loader import Condition, Rule

# Test rule evaluation
rule = Rule(
Expand Down
4 changes: 2 additions & 2 deletions plugins/hookify/hooks/posttooluse.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
sys.path.insert(0, PLUGIN_ROOT)

try:
from hookify.core.config_loader import load_rules
from hookify.core.rule_engine import RuleEngine
from core.config_loader import load_rules
from core.rule_engine import RuleEngine
except ImportError as e:
error_msg = {"systemMessage": f"Hookify import error: {e}"}
print(json.dumps(error_msg), file=sys.stdout)
Expand Down
4 changes: 2 additions & 2 deletions plugins/hookify/hooks/pretooluse.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
sys.path.insert(0, PLUGIN_ROOT)

try:
from hookify.core.config_loader import load_rules
from hookify.core.rule_engine import RuleEngine
from core.config_loader import load_rules
from core.rule_engine import RuleEngine
except ImportError as e:
# If imports fail, allow operation and log error
error_msg = {"systemMessage": f"Hookify import error: {e}"}
Expand Down
4 changes: 2 additions & 2 deletions plugins/hookify/hooks/stop.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
sys.path.insert(0, PLUGIN_ROOT)

try:
from hookify.core.config_loader import load_rules
from hookify.core.rule_engine import RuleEngine
from core.config_loader import load_rules
from core.rule_engine import RuleEngine
except ImportError as e:
error_msg = {"systemMessage": f"Hookify import error: {e}"}
print(json.dumps(error_msg), file=sys.stdout)
Expand Down
4 changes: 2 additions & 2 deletions plugins/hookify/hooks/userpromptsubmit.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
sys.path.insert(0, PLUGIN_ROOT)

try:
from hookify.core.config_loader import load_rules
from hookify.core.rule_engine import RuleEngine
from core.config_loader import load_rules
from core.rule_engine import RuleEngine
except ImportError as e:
error_msg = {"systemMessage": f"Hookify import error: {e}"}
print(json.dumps(error_msg), file=sys.stdout)
Expand Down