diff --git a/.claude/provider_manifest.json b/.claude/provider_manifest.json index c81be7a6..49a72ec4 100644 --- a/.claude/provider_manifest.json +++ b/.claude/provider_manifest.json @@ -4,7 +4,8 @@ "cli": { "claude": { "hooks": [ - {"command": "$AIPASS_HOME/.venv/bin/python3 $AIPASS_HOME/src/aipass/hooks/apps/handlers/bridges/claude.py UserPromptSubmit:global_prompt", "event": "UserPromptSubmit"}, + {"command": "$AIPASS_HOME/.venv/bin/python3 $AIPASS_HOME/src/aipass/hooks/apps/handlers/bridges/claude.py UserPromptSubmit:tier0_kernel", "event": "UserPromptSubmit"}, + {"command": "$AIPASS_HOME/.venv/bin/python3 $AIPASS_HOME/src/aipass/hooks/apps/handlers/bridges/claude.py UserPromptSubmit:navmap", "event": "UserPromptSubmit"}, {"command": "$AIPASS_HOME/.venv/bin/python3 $AIPASS_HOME/src/aipass/hooks/apps/handlers/bridges/claude.py UserPromptSubmit:branch_prompt", "event": "UserPromptSubmit"}, {"command": "$AIPASS_HOME/.venv/bin/python3 $AIPASS_HOME/src/aipass/hooks/apps/handlers/bridges/claude.py UserPromptSubmit:identity_injector", "event": "UserPromptSubmit"}, {"command": "$AIPASS_HOME/.venv/bin/python3 $AIPASS_HOME/src/aipass/hooks/apps/handlers/bridges/claude.py UserPromptSubmit:email_notification", "event": "UserPromptSubmit"}, diff --git a/setup.sh b/setup.sh index 6678ac01..83afe50d 100755 --- a/setup.sh +++ b/setup.sh @@ -631,7 +631,8 @@ else: # PreCompact: 3 hooks x 2 matchers (manual + auto) = 6 entries settings["hooks"] = { "UserPromptSubmit": [ - {"hooks": [{"type": "command", "command": f"{bridge} UserPromptSubmit:global_prompt"}]}, + {"hooks": [{"type": "command", "command": f"{bridge} UserPromptSubmit:tier0_kernel"}]}, + {"hooks": [{"type": "command", "command": f"{bridge} UserPromptSubmit:navmap"}]}, {"hooks": [{"type": "command", "command": f"{bridge} UserPromptSubmit:branch_prompt"}]}, {"hooks": [{"type": "command", "command": f"{bridge} UserPromptSubmit:identity_injector"}]}, {"hooks": [{"type": "command", "command": f"{bridge} UserPromptSubmit:email_notification"}]}, diff --git a/src/aipass/hooks/apps/modules/cadence.py b/src/aipass/hooks/apps/modules/cadence.py index 6d610b44..4e97b4ae 100644 --- a/src/aipass/hooks/apps/modules/cadence.py +++ b/src/aipass/hooks/apps/modules/cadence.py @@ -44,6 +44,8 @@ DEFAULTS = { "enabled": True, "period": 5, "loaders": { + "tier0": {"period": 1}, + "navmap": {"period": 5, "offset": 0}, "global": {"offset": 0}, "branch": {"offset": 0}, }, diff --git a/src/aipass/hooks/tests/test_cadence.py b/src/aipass/hooks/tests/test_cadence.py index 96f3a0cc..6b56b5b1 100644 --- a/src/aipass/hooks/tests/test_cadence.py +++ b/src/aipass/hooks/tests/test_cadence.py @@ -325,6 +325,17 @@ class TestConfig: assert config["loaders"]["global"]["offset"] == 0 assert config["loaders"]["branch"]["offset"] == 0 + def test_defaults_include_tiered_loaders(self, tmp_path): + """Fresh clone with no cadence_config.json gets tiered cadence out of the box.""" + from aipass.hooks.apps.modules.cadence import _load_config + + with patch(f"{MODULE}._CONFIG_PATH", tmp_path / "nonexistent.json"): + config = _load_config() + + assert config["loaders"]["tier0"]["period"] == 1 + assert config["loaders"]["navmap"]["period"] == 5 + assert config["loaders"]["navmap"]["offset"] == 0 + def test_config_deep_merges_over_defaults(self, tmp_path): from aipass.hooks.apps.modules.cadence import _load_config