224 lines
11 KiB
PHP
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']);
|