Files
html/api/wevia-agent-factory.php
2026-04-18 04:40:02 +02:00

120 lines
4.1 KiB
PHP

<?php
// V67 - WEVIA Agent Factory (auto-create missing ERP agents)
// Doctrine: WEVIA detects gap -> creates stub -> wires intent -> zero manual
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
$action = $_REQUEST['action'] ?? 'list';
$registry_file = '/var/www/html/api/wevia-tool-registry.json';
$avatars_file = '/var/www/html/api/agent-avatars-v2.json';
$depts_kpi = '/var/www/html/api/wevia-v64-departments-kpi.php';
function load_missing_agents() {
global $depts_kpi;
if (!is_readable($depts_kpi)) return [];
$content = file_get_contents($depts_kpi);
preg_match_all("/'gap_agent'=>'([^']+)'/", $content, $m);
return array_values(array_unique($m[1] ?? []));
}
function agent_id($name) {
$id = strtolower($name);
$id = preg_replace('/[^a-z0-9]+/', '_', $id);
$id = trim($id, '_');
return $id;
}
function agent_exists_in_registry($name) {
global $registry_file;
if (!is_readable($registry_file)) return false;
$reg = json_decode(file_get_contents($registry_file), true);
$tools = $reg['tools'] ?? $reg ?? [];
$id = 'agent_' . agent_id($name);
foreach ($tools as $t) {
if (is_array($t) && ($t['id'] ?? '') === $id) return true;
}
return false;
}
function create_agent_stub($name) {
$id = agent_id($name);
$stub_path = "/var/www/html/api/agent-stubs/agent_{$id}.php";
$stub_dir = dirname($stub_path);
if (!is_dir($stub_dir)) @mkdir($stub_dir, 0755, true);
$stub = "<?php\n";
$stub .= "// V67 auto-generated stub for: {$name}\n";
$stub .= "header('Content-Type: application/json');\n";
$stub .= "echo json_encode([\n";
$stub .= " 'agent' => '{$name}',\n";
$stub .= " 'id' => 'agent_{$id}',\n";
$stub .= " 'status' => 'stub',\n";
$stub .= " 'version' => 'V67',\n";
$stub .= " 'note' => 'Auto-created by agent-factory. Enrich with business logic.',\n";
$stub .= " 'kpis' => [],\n";
$stub .= " 'generated' => date('c')\n";
$stub .= "]);\n";
$wrote = @file_put_contents($stub_path, $stub);
return ['ok' => $wrote !== false, 'path' => $stub_path, 'bytes' => $wrote];
}
if ($action === 'list') {
$missing = load_missing_agents();
$result = [];
foreach ($missing as $name) {
$result[] = [
'name' => $name,
'id' => 'agent_' . agent_id($name),
'in_registry' => agent_exists_in_registry($name),
'stub_exists' => file_exists("/var/www/html/api/agent-stubs/agent_" . agent_id($name) . ".php")
];
}
echo json_encode(['ok' => true, 'total' => count($result), 'agents' => $result], JSON_PRETTY_PRINT);
exit;
}
if ($action === 'create') {
$name = $_REQUEST['agent'] ?? '';
if (!$name) { echo json_encode(['ok' => false, 'error' => 'agent name required']); exit; }
$result = create_agent_stub($name);
$result['name'] = $name;
$result['id'] = 'agent_' . agent_id($name);
echo json_encode($result, JSON_PRETTY_PRINT);
exit;
}
if ($action === 'bulk_create') {
$missing = load_missing_agents();
$created = 0; $skipped = 0; $errors = 0;
$log = [];
foreach ($missing as $name) {
$id = agent_id($name);
$stub_path = "/var/www/html/api/agent-stubs/agent_{$id}.php";
if (file_exists($stub_path)) { $skipped++; continue; }
$r = create_agent_stub($name);
if ($r['ok']) { $created++; $log[] = $name; } else { $errors++; }
}
echo json_encode(['ok' => true, 'created' => $created, 'skipped' => $skipped, 'errors' => $errors, 'agents_created' => $log], JSON_PRETTY_PRINT);
exit;
}
if ($action === 'count') {
$missing = load_missing_agents();
$created = 0;
foreach ($missing as $name) {
$id = agent_id($name);
if (file_exists("/var/www/html/api/agent-stubs/agent_{$id}.php")) $created++;
}
echo json_encode([
'ok' => true,
'total_missing' => count($missing),
'already_created' => $created,
'remaining' => count($missing) - $created
]);
exit;
}
echo json_encode(['ok' => false, 'error' => 'unknown action', 'valid_actions' => ['list','create','bulk_create','count']]);