Files
html/api/wevia-auto-intent.php
opus f699ed0200
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
auto-sync-0005
2026-04-18 00:05:02 +02:00

224 lines
11 KiB
PHP

<?php
// WEVIA AUTO-INTENT V59 - ULTRA DEEP SCAN (opus+qdrant+rnd+obsidian+memory+frameworks)
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
$action = $_GET['action'] ?? 'list';
$LOG = '/var/log/wevia-autointent.jsonl';
$PROPOSALS = '/opt/wevads/state/autointent-proposals.json';
function load_proposals() {
global $PROPOSALS;
return file_exists($PROPOSALS) ? (json_decode(@file_get_contents($PROPOSALS), true) ?: []) : [];
}
if ($action === 'list') {
echo json_encode(['status'=>'ok','proposals'=>load_proposals()], JSON_UNESCAPED_UNICODE);
exit;
}
if ($action === 'scan') {
if (!file_exists($LOG)) { echo json_encode(['status'=>'empty']); exit; }
$patterns = [];
foreach (array_slice(@file($LOG, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ?: [], -500) as $l) {
$ev = @json_decode($l, true);
if (!$ev || !isset($ev['msg']) || !isset($ev['exec_count']) || $ev['exec_count'] > 0) continue;
$toks = array_filter(preg_split('/\W+/u', mb_strtolower($ev['msg'])), fn($t) => mb_strlen($t) >= 4);
if (empty($toks)) continue;
$sig = implode('|', array_unique($toks));
if (!isset($patterns[$sig])) $patterns[$sig] = ['count'=>0,'samples'=>[],'keywords'=>$toks];
$patterns[$sig]['count']++;
if (count($patterns[$sig]['samples']) < 3) $patterns[$sig]['samples'][] = $ev['msg'];
}
uasort($patterns, fn($a,$b) => $b['count']-$a['count']);
echo json_encode(['status'=>'ok','patterns_found'=>count($patterns),'top_candidates'=>array_slice($patterns,0,20,true)], JSON_UNESCAPED_UNICODE);
exit;
}
if ($action === 'propose' && $_SERVER['REQUEST_METHOD'] === 'POST') {
$body = @json_decode(file_get_contents('php://input'), true);
if (!$body) { http_response_code(400); exit; }
$p = load_proposals();
$p[] = ['id'=>'p_'.date('YmdHis'),'name'=>$body['name']??'','trigger'=>$body['trigger']??'','cmd'=>$body['cmd']??'','status'=>'pending','created_at'=>date('c')];
@file_put_contents($PROPOSALS, json_encode($p, JSON_PRETTY_PRINT));
echo json_encode(['status'=>'ok','stored'=>count($p)]);
exit;
}
if ($action === 'dormants') {
$d = [];
// V55 base cats
$d['hubs'] = [];
foreach (glob('/var/www/html/*hub*.html') as $h) {
$n = basename($h,'.html');
if (strpos($n,'pre-carto') !== false) continue;
$d['hubs'][] = ['name'=>$n,'size_kb'=>round(filesize($h)/1024,1),'url'=>'/'.basename($h)];
}
$d['priority_intents'] = [];
if (file_exists('/opt/wevia-brain/priority-intents-nl.json')) {
foreach ((json_decode(file_get_contents('/opt/wevia-brain/priority-intents-nl.json'), true) ?: []) as $p) {
$c = trim($p['command']??''); $t = $p['triggers']??'';
if (strlen($c) < 10 || $c === 'echo bonjour' || strpos($t,'zxq') === 0) continue;
$d['priority_intents'][] = ['name'=>$p['name'],'trigger'=>$t,'cmd_preview'=>substr($c,0,120)];
}
}
$d['archived_intents'] = [];
foreach (glob('/opt/weval-l99/wiki/_var_www_html_api_wevia-*-intent*.json') as $a) {
$dd = @json_decode(file_get_contents($a), true);
if ($dd) $d['archived_intents'][] = ['file'=>basename($dd['file']??''),'fns'=>$dd['functions']??[]];
}
$d['backend_php_intents'] = [];
foreach (glob('/var/www/html/api/*intent*.php') as $p)
$d['backend_php_intents'][] = ['name'=>basename($p),'size_kb'=>round(filesize($p)/1024,1)];
$d['dormant_wevia_ia'] = [];
$d['s89_ai_apis'] = [];
if (file_exists('/opt/wevia-brain/DORMANT-CAPABILITIES-ARCHIVE.json')) {
$dca = @json_decode(file_get_contents('/opt/wevia-brain/DORMANT-CAPABILITIES-ARCHIVE.json'), true);
foreach (($dca['categories']['dormant_wevia_ia']['files']??[]) as $f)
$d['dormant_wevia_ia'][] = ['file'=>$f['file']??'','size_b'=>$f['size']??0];
foreach (($dca['categories']['s89_ai_apis']['files']??[]) as $f)
$d['s89_ai_apis'][] = ['file'=>$f['file']??'','size_b'=>$f['size']??0,'role'=>$f['role']??''];
}
$d['orchestrators'] = [];
foreach (glob('/var/www/html/api/*orchestrator*.php') as $o) {
$bn = basename($o);
$active = in_array($bn, ['wevia-sse-orchestrator.php','wevia-sse-orchestrator-public.php']);
$d['orchestrators'][] = ['name'=>$bn,'size_kb'=>round(filesize($o)/1024,1),'status'=>$active?'active':'dormant'];
}
$d['tool_registries'] = [];
foreach (['/opt/wevia-brain/tool-registry-v2.json','/opt/wevia-brain/tool-registry-v3-opus-arch.json','/var/www/html/api/wevia-tool-registry.json'] as $tr) {
if (!file_exists($tr)) continue;
$dd = @json_decode(file_get_contents($tr), true);
$tools = $dd['tools']??[];
$d['tool_registries'][] = ['file'=>basename($tr),'tools_count'=>is_array($tools)?count($tools):0,'version'=>$dd['version']??'-'];
}
// V58 cats
$d['brain_nucleus'] = [];
foreach (glob('/opt/wevia-brain/prompts/nucleus/*.md') as $n)
$d['brain_nucleus'][] = ['name'=>basename($n,'.md'),'size_kb'=>round(filesize($n)/1024,1)];
$d['personas'] = [];
foreach (glob('/opt/wevia-brain/prompts/personas/*.md') as $p)
$d['personas'][] = ['name'=>basename($p,'.md'),'size_kb'=>round(filesize($p)/1024,1)];
$d['system_prompts'] = [];
foreach (glob('/opt/wevia-brain/prompts/system/*.md') as $sp)
$d['system_prompts'][] = ['name'=>basename($sp,'.md'),'size_kb'=>round(filesize($sp)/1024,1)];
$d['knowledge_bases'] = [];
foreach (glob('/opt/wevia-brain/knowledge/*.{json,md}', GLOB_BRACE) as $kb)
$d['knowledge_bases'][] = ['name'=>basename($kb),'size_kb'=>round(filesize($kb)/1024,1)];
$d['knowledge_deep'] = [];
foreach (glob('/opt/wevia-brain/knowledge/deep/*.md') as $kd)
$d['knowledge_deep'][] = ['name'=>basename($kd,'.md'),'size_kb'=>round(filesize($kd)/1024,1)];
$d['oss_skills'] = [];
if (is_dir('/opt/skills')) {
foreach (glob('/opt/skills/*', GLOB_ONLYDIR) as $sk)
$d['oss_skills'][] = ['name'=>basename($sk)];
}
$d['weval_ecosystem'] = [];
foreach (glob('/opt/weval-*', GLOB_ONLYDIR) as $we)
$d['weval_ecosystem'][] = ['name'=>basename($we)];
$d['oss_repos'] = [];
foreach (glob('/opt/*/.git', GLOB_ONLYDIR) as $gr) {
$repo = basename(dirname($gr));
$d['oss_repos'][] = ['name'=>$repo,'path'=>'/opt/'.$repo];
}
// === V59 NEW 7 categories ===
// 1. OPUS artifacts (hooks, dispatchers, system, orchestrators scattered)
$d['opus_artifacts'] = [];
$opus_files = array_merge(
glob('/opt/wevia-brain/opus*.php'),
glob('/opt/wevia-brain/opus*.sh'),
glob('/opt/wevia-brain/cognitive-opus*.php'),
glob('/opt/wevia-brain/prompts/opus-*.md'),
glob('/opt/wevia-brain/prompts/opus-*.json'),
glob('/opt/wevia-brain/modules/opus*.php'),
glob('/var/www/html/api/opus*.php'),
glob('/var/www/html/api/opus5-*.php'),
glob('/var/www/html/api/wevia-opus*.php'),
glob('/var/www/html/api/nonreg-opus.php')
);
foreach ($opus_files as $o) {
$d['opus_artifacts'][] = ['file'=>basename($o),'path'=>$o,'size_kb'=>round(filesize($o)/1024,1)];
}
// 2. QDRANT collections
$d['qdrant_collections'] = [];
if (is_dir('/opt/qdrant-data/collections')) {
foreach (glob('/opt/qdrant-data/collections/*', GLOB_ONLYDIR) as $qc) {
$d['qdrant_collections'][] = ['name'=>basename($qc)];
}
}
// 3. RND plugins (74 domaines tech/business)
$d['rnd_plugins'] = [];
if (is_dir('/opt/rnd-agents/plugins')) {
foreach (glob('/opt/rnd-agents/plugins/*', GLOB_ONLYDIR) as $rp) {
$d['rnd_plugins'][] = ['name'=>basename($rp)];
}
}
// 4. Obsidian vault (doctrines/learnings/decisions/KB)
$d['obsidian_vault'] = [];
foreach (['doctrines','learnings','decisions','kb','sessions','tools','infra','ethica'] as $cat) {
$dir = "/opt/obsidian-vault/$cat";
if (!is_dir($dir)) continue;
$files = @scandir($dir) ?: [];
$count = count(array_filter($files, fn($f) => !in_array($f, ['.', '..'])));
$d['obsidian_vault'][] = ['category'=>$cat,'count'=>$count,'path'=>$dir];
}
// 5. Memory systems (claude-mem, supermemory, claude-mem skills)
$d['memory_systems'] = [];
foreach (['/opt/claude-mem','/opt/supermemory','/opt/wevia-brain/knowledge'] as $ms) {
if (!is_dir($ms)) continue;
$size_mb = 0;
foreach (glob("$ms/*") as $f) if (is_file($f)) $size_mb += filesize($f);
$d['memory_systems'][] = ['name'=>basename($ms),'path'=>$ms,'size_mb'=>round($size_mb/1024/1024,2)];
}
// 6. Agent frameworks (autogen, SuperClaude, HolyClaude, rnd-swarm, rnd-astron, deer-flow)
$d['agent_frameworks'] = [];
$frameworks = ['SuperClaude_Framework','HolyClaude','autogen','rnd-swarm','rnd-astron-agent','rnd-edict','deer-flow','deepagent','claw-code','aios','FrancyJGLisboa_agent-skill-creator'];
foreach ($frameworks as $fw) {
$path = "/opt/$fw";
if (is_dir($path)) {
$d['agent_frameworks'][] = ['name'=>$fw,'path'=>$path];
}
}
// 7. Other OSS clones + /opt raw dirs
$d['other_oss'] = [];
$known = array_flip(array_merge($frameworks, ['skills','skillsmith','paperclip-skills','huggingface-skills','awesome-agent-skills','antigravity-awesome-skills','wevia-brain','wevia-finetune','wevads','weval-l99','weval-nonreg','weval-crewai','weval-litellm','weval-guardian','weval-ops','weval-plugins','weval-radar','weval-scrapy','weval-security','weval-ux','claude-mem','supermemory','system-prompts-ai','qdrant-data','backups','containerd','google','guard','gitea','jzOcb_writing-style-skill','keyhacks','open-webui-fresh','paperclip-weval','plausible','pmta','pmta-versions','prometheus','render-configs','ruflo','searxng','sovereign-api','twenty-compose','twenty','vaultwarden','vllm','wazuh','whisper.cpp','hf-spaces','isolated-pmta5','fmgapp','flowise-data','DiffusionDB','LTX-Video','activepieces','authentik','anythingllm','antigravity-awesome-skills','awesome-claude-code-toolkit','everything-claude-code']));
foreach (glob('/opt/*', GLOB_ONLYDIR) as $dir) {
$name = basename($dir);
if (!isset($known[$name])) {
$d['other_oss'][] = ['name'=>$name,'path'=>$dir];
}
}
$counts = [];
foreach ($d as $k => $v) $counts[$k] = count($v);
$counts['TOTAL'] = array_sum($counts);
echo json_encode(['status'=>'ok','counts'=>$counts,'dormants'=>$d], JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
exit;
}
echo json_encode(['error'=>'action: list | scan | propose | dormants']);