feat: Add intelligent auto-router and enhanced integrations

- Add intelligent-router.sh hook for automatic agent routing
- Add AUTO-TRIGGER-SUMMARY.md documentation
- Add FINAL-INTEGRATION-SUMMARY.md documentation
- Complete Prometheus integration (6 commands + 4 tools)
- Complete Dexto integration (12 commands + 5 tools)
- Enhanced Ralph with access to all agents
- Fix /clawd command (removed disable-model-invocation)
- Update hooks.json to v5 with intelligent routing
- 291 total skills now available
- All 21 commands with automatic routing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
admin
2026-01-28 00:27:56 +04:00
Unverified
parent 3b128ba3bd
commit b52318eeae
1724 changed files with 351216 additions and 0 deletions

View File

@@ -0,0 +1,87 @@
/**
* Notification Middleware
*
* Converts significant events into toast notifications.
* Respects notification suppression during history replay and session switches.
*/
import type { EventMiddleware, ClientEvent } from '../types.js';
import { useSessionStore } from '../../stores/sessionStore.js';
import { useNotificationStore, type Toast } from '../../stores/notificationStore.js';
/**
* Convert an event to a toast notification
* Returns null if the event should not generate a toast
*/
function eventToToast(
event: ClientEvent,
isCurrentSession: boolean
): Omit<Toast, 'id' | 'timestamp'> | null {
switch (event.name) {
// Errors are now shown inline via ErrorBanner, not as toasts
// Only show toast for errors in background sessions
case 'llm:error': {
if (isCurrentSession) {
return null; // Don't toast - shown inline via ErrorBanner
}
const sessionId = 'sessionId' in event ? event.sessionId : undefined;
return {
title: 'Error in background session',
description: event.error?.message || 'An error occurred',
intent: 'danger',
sessionId,
};
}
// Only notify for background sessions (not current session)
case 'llm:response': {
const sessionId = 'sessionId' in event ? event.sessionId : undefined;
if (isCurrentSession) {
return null; // Don't notify for current session
}
return {
title: 'Response Ready',
description: 'Agent completed in background session',
intent: 'info',
sessionId,
};
}
// No notifications for other events
default:
return null;
}
}
/**
* Notification middleware
*
* Converts events into toast notifications based on:
* - Event type (approval, error, response)
* - Session context (current vs background)
* - Notification suppression state (replay, switching)
*/
export const notificationMiddleware: EventMiddleware = (event, next) => {
// Always call next first
next(event);
const { shouldSuppressNotifications, currentSessionId } = useSessionStore.getState();
const { addToast } = useNotificationStore.getState();
// Skip notifications during history replay or session switch
if (shouldSuppressNotifications()) {
return;
}
// Determine if this event is from the current session
const sessionId = 'sessionId' in event ? event.sessionId : undefined;
const isCurrentSession = sessionId === currentSessionId;
// Convert event to toast
const toast = eventToToast(event, isCurrentSession);
// Add toast if applicable
if (toast) {
addToast(toast);
}
};