- bootstrap.py: write hooks.json from template at init, union-merge on update (preserves user on/off), remove dead _ship_hooks/HOOKS_TO_SHIP - doctor.py: check .aipass/hooks.json presence - .aipass/project_hooks.json: base template (all 14 handlers) - .aipass/.gitignore: whitelist template so it ships in clones - +13 tests, 421 pass, seedgo 99%
100 lines
2.8 KiB
JSON
100 lines
2.8 KiB
JSON
{
|
|
"_comment": "TEMPLATE: base per-project hook config copied into new projects by `aipass init` (DPLAN-0190). Mirrors AIPass's own .aipass/hooks.json. All handlers run from $AIPASS_HOME — projects only flip enabled true/false. Use `drone @hooks enable/disable <hook>` or edit here.",
|
|
"hooks_enabled": true,
|
|
|
|
"UserPromptSubmit": {
|
|
"identity_injector": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.prompt.identity.handle",
|
|
"matcher": ""
|
|
},
|
|
"email_notification": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.notification.email.handle",
|
|
"matcher": ""
|
|
},
|
|
"branch_prompt": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.prompt.branch_loader.handle",
|
|
"matcher": ""
|
|
},
|
|
"global_prompt": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.prompt.global_loader.handle",
|
|
"matcher": ""
|
|
}
|
|
},
|
|
|
|
"PreToolUse": {
|
|
"tool_use_sound": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.notification.tool_sound.handle",
|
|
"matcher": "Bash|Edit|MultiEdit|Write|Read|Grep|Glob|WebSearch|WebFetch|Task"
|
|
},
|
|
"pre_edit_gate": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.security.edit_gate.handle",
|
|
"matcher": "Edit|MultiEdit|Write|NotebookEdit"
|
|
},
|
|
"git_gate": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.security.git_gate.handle",
|
|
"matcher": "Bash|Edit|MultiEdit|Write|NotebookEdit"
|
|
}
|
|
},
|
|
|
|
"PostToolUse": {
|
|
"auto_fix_diagnostics": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.lifecycle.auto_fix.handle",
|
|
"matcher": "Edit|MultiEdit|Write|NotebookEdit",
|
|
"timeout": 45
|
|
},
|
|
"auto_watchdog": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.lifecycle.auto_watchdog.handle",
|
|
"matcher": "Bash"
|
|
}
|
|
},
|
|
|
|
"SubagentStop": {
|
|
"subagent_stop_gate": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.security.subagent_gate.handle",
|
|
"matcher": "",
|
|
"timeout": 60
|
|
}
|
|
},
|
|
|
|
"Stop": {
|
|
"stop_sound": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.notification.stop_sound.handle",
|
|
"matcher": ""
|
|
}
|
|
},
|
|
|
|
"Notification": {
|
|
"notification_sound": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.notification.announce.handle",
|
|
"matcher": ""
|
|
}
|
|
},
|
|
|
|
"PreCompact": {
|
|
"pre_compact": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.lifecycle.compact.handle",
|
|
"matcher": "",
|
|
"timeout": 60
|
|
},
|
|
"pre_compact_rollover": {
|
|
"enabled": true,
|
|
"handler": "aipass.hooks.apps.handlers.lifecycle.rollover.handle",
|
|
"matcher": "",
|
|
"timeout": 120
|
|
}
|
|
}
|
|
}
|