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,93 @@
// packages/agent-management/src/utils/execution-context.ts
// TODO: (migration) This file is duplicated from @dexto/core for short-term compatibility
// This will become the primary location once core services accept paths via initialization
import { walkUpDirectories } from './fs-walk.js';
import { readFileSync } from 'fs';
import * as path from 'path';
export type ExecutionContext = 'dexto-source' | 'dexto-project' | 'global-cli';
/**
* Check if directory is the dexto source code itself
* @param dirPath Directory to check
* @returns True if directory contains the dexto source monorepo (top-level).
*/
function isDextoSourceDirectory(dirPath: string): boolean {
const packageJsonPath = path.join(dirPath, 'package.json');
try {
const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
// Monorepo root must be named 'dexto-monorepo'. No other names are treated as source root.
return pkg.name === 'dexto-monorepo';
} catch {
return false;
}
}
/**
* Check if directory is a project that uses dexto as dependency (but is not dexto source)
* @param dirPath Directory to check
* @returns True if directory has dexto as dependency but is not dexto source
*/
function isDextoProjectDirectory(dirPath: string): boolean {
const packageJsonPath = path.join(dirPath, 'package.json');
try {
const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
// Not internal dexto packages themselves
if (pkg.name === 'dexto' || pkg.name === '@dexto/core' || pkg.name === '@dexto/webui') {
return false;
}
// Check if has dexto or @dexto/core as dependency
const allDeps = {
...(pkg.dependencies ?? {}),
...(pkg.devDependencies ?? {}),
...(pkg.peerDependencies ?? {}),
};
return 'dexto' in allDeps || '@dexto/core' in allDeps;
} catch {
return false;
}
}
/**
* Find dexto source root directory
* @param startPath Starting directory path
* @returns Dexto source root directory or null if not found
*/
export function findDextoSourceRoot(startPath: string = process.cwd()): string | null {
return walkUpDirectories(startPath, isDextoSourceDirectory);
}
/**
* Find dexto project root directory (projects using dexto as dependency)
* @param startPath Starting directory path
* @returns Dexto project root directory or null if not found
*/
export function findDextoProjectRoot(startPath: string = process.cwd()): string | null {
return walkUpDirectories(startPath, isDextoProjectDirectory);
}
/**
* Detect current execution context - standardized across codebase
* @param startPath Starting directory path (defaults to process.cwd())
* @returns Execution context
*/
export function getExecutionContext(startPath: string = process.cwd()): ExecutionContext {
// Check for Dexto source context first (most specific)
if (findDextoSourceRoot(startPath)) {
return 'dexto-source';
}
// Check for Dexto project context
if (findDextoProjectRoot(startPath)) {
return 'dexto-project';
}
// Default to global CLI context
return 'global-cli';
}