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,102 @@
#!/usr/bin/env node
/* eslint-env node */
import console from 'node:console';
import { existsSync, readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
import { dirname, extname, join, relative, resolve } from 'node:path';
import process from 'node:process';
import { fileURLToPath } from 'node:url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const DIST_DIR = resolve(__dirname, '../dist');
const PROCESS_EXTENSIONS = new Set(['.js', '.cjs', '.mjs', '.ts', '.mts', '.cts']);
const IMPORT_PATTERN = /(['"])@core\/([^'"]+)\1/g;
function collectFiles(root) {
const entries = readdirSync(root);
const files = [];
for (const entry of entries) {
const fullPath = join(root, entry);
const stats = statSync(fullPath);
if (stats.isDirectory()) {
files.push(...collectFiles(fullPath));
} else {
files.push(fullPath);
}
}
return files;
}
function resolveImport(fromFile, subpath) {
const fromExt = extname(fromFile);
const preferredExt = fromExt === '.cjs' ? '.cjs' : '.js';
const candidateBase = subpath.replace(/\.(mjs|cjs|js)$/, '');
const bases = [candidateBase];
if (!candidateBase.endsWith('index')) {
bases.push(join(candidateBase, 'index'));
}
const candidates = [];
for (const base of bases) {
const exts = Array.from(new Set([preferredExt, '.mjs', '.js', '.cjs']));
for (const ext of exts) {
candidates.push(`${base}${ext}`);
}
}
for (const candidate of candidates) {
const absolute = resolve(DIST_DIR, candidate);
if (existsSync(absolute)) {
let relativePath = relative(dirname(fromFile), absolute).replace(/\\/g, '/');
if (!relativePath.startsWith('.')) {
relativePath = `./${relativePath}`;
}
return relativePath;
}
}
return null;
}
function rewriteAliases(filePath) {
const ext = extname(filePath);
if (!PROCESS_EXTENSIONS.has(ext)) {
return false;
}
const original = readFileSync(filePath, 'utf8');
let modified = false;
const updated = original.replace(IMPORT_PATTERN, (match, quote, requested) => {
const resolved = resolveImport(filePath, requested);
if (!resolved) {
console.warn(`⚠️ Unable to resolve alias @core/${requested} in ${filePath}`);
return match;
}
modified = true;
return `${quote}${resolved}${quote}`;
});
if (modified) {
writeFileSync(filePath, updated, 'utf8');
}
return modified;
}
function main() {
if (!existsSync(DIST_DIR)) {
console.error(`❌ dist directory not found at ${DIST_DIR}`);
process.exit(1);
}
const files = collectFiles(DIST_DIR);
let changed = 0;
for (const file of files) {
if (rewriteAliases(file)) {
changed += 1;
}
}
console.log(` Fixed alias imports in ${changed} files.`);
}
main();