feat: add post-pipeline hooks (KIN-003)

- core/hooks.py: HookRunner с CRUD, run_hooks(), _execute_hook(), логированием
- core/db.py: новые таблицы hooks и hook_logs в схеме
- agents/runner.py: вызов run_hooks() после завершения pipeline
- tests/test_hooks.py: 23 теста (CRUD, fnmatch-матчинг, выполнение, таймаут)

Хуки запускаются синхронно после update_task(status="review").
Ошибка хука логируется, не блокирует пайплайн.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Gros Frumos 2026-03-15 18:31:00 +02:00
parent bf38532f59
commit d311c2fb66
4 changed files with 534 additions and 0 deletions

View file

@ -13,6 +13,7 @@ from typing import Any
from core import models
from core.context_builder import build_context, format_prompt
from core.hooks import run_hooks
def run_agent(
@ -465,6 +466,11 @@ def run_pipeline(
)
models.update_task(conn, task_id, status="review")
# Run post-pipeline hooks (failures don't affect pipeline status)
task_modules = models.get_modules(conn, project_id)
run_hooks(conn, project_id, task_id,
event="pipeline_completed", task_modules=task_modules)
return {
"success": True,
"steps_completed": len(steps),