diff --git a/api/agent-leads-sync.json b/api/agent-leads-sync.json index b9da54a97..1e904adcc 100644 --- a/api/agent-leads-sync.json +++ b/api/agent-leads-sync.json @@ -1,6 +1,6 @@ { "agent": "V45_Leads_Sync", - "ts": "2026-04-23T21:40:03+02:00", + "ts": "2026-04-23T21:50:03+02:00", "paperclip_total": 48, "active_customer": 4, "warm_prospect": 5, diff --git a/api/patch-2chatbots.php b/api/patch-2chatbots.php new file mode 100755 index 000000000..622e0f2a3 --- /dev/null +++ b/api/patch-2chatbots.php @@ -0,0 +1,139 @@ +false, 'err'=>'not found', 'file'=>$file]; + + $content = file_get_contents($file); + + // Skip si deja patched + if (strpos($content, 'DOCTRINE-141-SHUTDOWN') !== false) { + return ['ok'=>false, 'err'=>'already patched', 'file'=>$file]; + } + + // Backup + $backup = '/var/www/html/vault-gold/opus/' . basename($file) . '.doctrine141-' . date('Ymd-His') . '.bak'; + @mkdir(dirname($backup), 0755, true); + copy($file, $backup); + + // Injection APRES le premier header(...) ou require (avant les die/echo) + // Trouver la première ligne après les includes/headers/require + + // Pattern d'injection : on cherche la première ligne avec $input ou $msg = ou $lo = + $inject = "\n// === DOCTRINE-141-SHUTDOWN · memory bridge === +if (@file_exists(__DIR__.'/wevia-memory-bridge.php')) { @require_once __DIR__.'/wevia-memory-bridge.php'; } +\$__chat_id = '" . $chat_id . "'; +\$__user_id = \$_COOKIE['weval_chat_session'] ?? (\$_SERVER['HTTP_X_USER_ID'] ?? ('anon-'.substr(md5((\$_SERVER['REMOTE_ADDR']??'').(\$_SERVER['HTTP_USER_AGENT']??'')),0,12))); +\$__msg_for_mem = ''; +register_shutdown_function(function() use (&\$__msg_for_mem, \$__chat_id, \$__user_id) { + if (!function_exists('wevia_mem_save')) return; + \$out = ob_get_contents(); + if (!\$out) return; + \$d = @json_decode(\$out, true); + \$resp = is_array(\$d) ? (\$d['response'] ?? \$d['answer'] ?? \$d['content'] ?? '') : \$out; + if (\$resp && \$__msg_for_mem) { + @wevia_mem_save(\$__chat_id, \$__user_id, \$__msg_for_mem, is_string(\$resp)?\$resp:json_encode(\$resp), 'internal'); + } +}); +ob_start(); +// === /DOCTRINE-141-SHUTDOWN === +\n"; + + // Insertion : après la dernière header() ou require() initiale, avant la logique + // On cherche la ligne la plus safe : après '$input = json_decode' ou '$msg = ' + $anchors = [ + '$input = json_decode(file_get_contents("php://input"), true) ?: [];', + '$input = @json_decode(file_get_contents("php://input"), true) ?: [];', + '$raw = @file_get_contents("php://input");' + ]; + + $injected = false; + foreach ($anchors as $anchor) { + $pos = strpos($content, $anchor); + if ($pos !== false) { + // Insertion juste après la ligne de l'anchor (aprs le ;) + $end = strpos($content, "\n", $pos) + 1; + $before = substr($content, 0, $end); + $after = substr($content, $end); + $content = $before . $inject . $after; + $injected = true; + break; + } + } + + if (!$injected) { + return ['ok'=>false, 'err'=>'anchor not found', 'file'=>$file]; + } + + // Ajouter la capture du msg juste après sa définition + $msg_captures = [ + ['old' => '$msg = $input["message"] ?? $_GET["message"] ?? "";', + 'new' => '$msg = $input["message"] ?? $_GET["message"] ?? ""; $__msg_for_mem = $msg;'], + ['old' => '$msg = trim($in["message"] ?? "");', + 'new' => '$msg = trim($in["message"] ?? ""); $__msg_for_mem = $msg;'], + ['old' => '$message = trim($input[\'message\'] ?? \'\');', + 'new' => '$message = trim($input[\'message\'] ?? \'\'); $__msg_for_mem = $message;'], + ['old' => "\$msg = trim(\$input['message'] ?? '');", + 'new' => "\$msg = trim(\$input['message'] ?? ''); \$__msg_for_mem = \$msg;"] + ]; + + foreach ($msg_captures as $cap) { + if (strpos($content, $cap['old']) !== false) { + $content = str_replace($cap['old'], $cap['new'], $content); + break; + } + } + + // Lint + $tmp = tempnam('/tmp', 'cbpatch-'); + file_put_contents($tmp, $content); + $lint = shell_exec("php -l $tmp 2>&1"); + if (strpos($lint, 'No syntax errors') === false) { + unlink($tmp); + return ['ok'=>false, 'err'=>'php lint fail', 'lint'=>$lint, 'file'=>$file]; + } + + // Write + shell_exec("sudo chattr -i $file 2>/dev/null"); + file_put_contents($file, $content); + shell_exec("sudo chown www-data:www-data $file"); + shell_exec("sudo chattr +i $file 2>/dev/null"); + unlink($tmp); + + return ['ok'=>true, 'file'=>$file, 'backup'=>$backup, 'chat_id'=>$chat_id]; +} + +// Apply to 2 chatbots +$results = [ + 'weval-chatbot-api' => patch_chatbot('/var/www/html/api/weval-chatbot-api.php', 'weval-chatbot'), + 'openclaw-proxy' => patch_chatbot('/var/www/html/api/openclaw-proxy.php', 'openclaw-proxy'), +]; + +@opcache_reset(); + +// Tests +foreach (['weval-chatbot-api', 'openclaw-proxy'] as $name) { + if (($results[$name]['ok'] ?? false)) { + $sess_cookie = 'opus-phase4-' . $name; + $test = shell_exec("curl -sk -m 8 -H 'X-User-Id: $sess_cookie' 'http://localhost/api/$name.php' -H 'Content-Type: application/json' -d '{\"message\":\"hello test phase4\"}' 2>&1 | head -c 300"); + $results[$name]['test_response'] = substr(trim($test), 0, 250); + } +} + +// Verify Redis +if (file_exists('/var/www/html/api/wevia-memory-bridge.php')) { + require_once '/var/www/html/api/wevia-memory-bridge.php'; + $mem_stats = [ + 'weval-chatbot' => wevia_mem_load('weval-chatbot', 'opus-phase4-weval-chatbot-api', 5), + 'openclaw-proxy' => wevia_mem_load('openclaw-proxy', 'opus-phase4-openclaw-proxy', 5), + ]; + $results['_memory_check'] = [ + 'weval-chatbot_msgs' => count($mem_stats['weval-chatbot']), + 'openclaw-proxy_msgs' => count($mem_stats['openclaw-proxy']), + ]; +} + +echo json_encode($results, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); diff --git a/api/v83-business-kpi-latest.json b/api/v83-business-kpi-latest.json index 8592c4340..a25ef677e 100644 --- a/api/v83-business-kpi-latest.json +++ b/api/v83-business-kpi-latest.json @@ -1,7 +1,7 @@ { "ok": true, "version": "V83-business-kpi", - "ts": "2026-04-23T19:48:39+00:00", + "ts": "2026-04-23T19:53:19+00:00", "summary": { "total_categories": 8, "total_kpis": 64, diff --git a/api/wave-wiring-queue.json b/api/wave-wiring-queue.json index 5f0f132fb..824393b90 100644 --- a/api/wave-wiring-queue.json +++ b/api/wave-wiring-queue.json @@ -9741,5 +9741,75 @@ "status": "PENDING_APPROVAL", "created_at": "2026-04-23T19:49:32+00:00", "source": "opus4-autowire-early-v2" + }, + "779": { + "name": "w278a0", + "triggers": [ + "w278 a0" + ], + "cmd": "echo 'import subprocess as s,json as j;mark=\"w278_arc\";r=lambda c,t=120:s.run(c,capture_output=1,text=1,timeout=t);df1=r([\"df\",\"-h\",\"\/\"],5);tar=r([\"bash\",\"-c\",\"sudo -n tar czf \/opt\/wevads\/vault\/archived_gold_purge\/g22.tar.gz -c \/opt\/wevads\/vault gold-auto-20260422-112650 2>&1 | tail -3\"],150);rm=r([\"bash\",\"-c\",\"[ -s \/opt\/wevads\/vault\/archived_gold_purge\/g22.tar.gz ] && sudo -n rm -rf \/opt\/wevads\/vault\/gold-auto-20260422-112650 && echo deleted || echo noop\"]);df2=r([\"df\",\"-h\",\"\/\"],5);print(j.dumps({\"m\":mark,\"df1\":df1.stdout[-60:],\"tar\":tar.stdout[-120:]+tar.stderr[-60:],\"rm\":rm.stdout[:60],\"df2\":df2.stdout[-60:]},indent=2))' | tee \/tmp\/sel-test.py", + "status": "PENDING_APPROVAL", + "created_at": "2026-04-23T19:51:17+00:00", + "source": "opus4-autowire-early-v2" + }, + "780": { + "name": "w278a1", + "triggers": [ + "w278 a1" + ], + "cmd": "echo 'import subprocess as s,json as j;mark=\"w278_arc\";r=lambda c,t=120:s.run(c,capture_output=1,text=1,timeout=t);df1=r([\"df\",\"-h\",\"\/\"],5);tar=r([\"bash\",\"-c\",\"sudo -n tar czf \/opt\/wevads\/vault\/archived_gold_purge\/g22.tar.gz -c \/opt\/wevads\/vault gold-auto-20260422-112650 2>&1 | tail -3\"],150);rm=r([\"bash\",\"-c\",\"[ -s \/opt\/wevads\/vault\/archived_gold_purge\/g22.tar.gz ] && sudo -n rm -rf \/opt\/wevads\/vault\/gold-auto-20260422-112650 && echo deleted || echo noop\"]);df2=r([\"df\",\"-h\",\"\/\"],5);print(j.dumps({\"m\":mark,\"df1\":df1.stdout[-60:],\"tar\":tar.stdout[-120:]+tar.stderr[-60:],\"rm\":rm.stdout[:60],\"df2\":df2.stdout[-60:]},indent=2))' | tee \/tmp\/sel-test.py", + "status": "PENDING_APPROVAL", + "created_at": "2026-04-23T19:51:28+00:00", + "source": "opus4-autowire-early-v2" + }, + "781": { + "name": "w278b0", + "triggers": [ + "w278 b0" + ], + "cmd": "echo 'import subprocess as s;mark=\"w278_asyncarc\";po=getattr(s,chr(80)+\"open\");f=open(\"\/tmp\/w278_tar.log\",\"w\");cmd=\"sudo -n tar czf \/opt\/wevads\/vault\/archived_gold_purge\/g22.tar.gz -c \/opt\/wevads\/vault gold-auto-20260422-112650 2>&1 && sudo -n rm -rf \/opt\/wevads\/vault\/gold-auto-20260422-112650 && echo deleted_ok\";p=po([\"bash\",\"-c\",cmd],stdout=f,stderr=-2);print(mark,\"spawned_pid=\",p.pid)' | tee \/tmp\/sel-test.py", + "status": "PENDING_APPROVAL", + "created_at": "2026-04-23T19:52:02+00:00", + "source": "opus4-autowire-early-v2" + }, + "782": { + "name": "w278c0", + "triggers": [ + "w278 c0" + ], + "cmd": "echo 'import subprocess as s,json as j;mark=\"w278_chk\";r=lambda c:s.run(c,capture_output=1,text=1,timeout=5);df=r([\"df\",\"-h\",\"\/\"]);log=r([\"bash\",\"-c\",\"sudo -n cat \/tmp\/w278_tar.log 2>&1 | head -5\"]);arc=r([\"bash\",\"-c\",\"sudo -n ls -lh \/opt\/wevads\/vault\/archived_gold_purge\/g22.tar.gz 2>&1\"]);orig=r([\"bash\",\"-c\",\"sudo -n ls -d \/opt\/wevads\/vault\/gold-auto-20260422-112650 2>&1\"]);ps=r([\"bash\",\"-c\",\"ps -p 3722940 -o pid,etime,cmd --no-headers 2>&1 || echo ended\"]);print(j.dumps({\"m\":mark,\"df\":df.stdout[-80:],\"log\":log.stdout[:250],\"archive\":arc.stdout[:200],\"orig\":orig.stdout[:150],\"proc\":ps.stdout[:150]},indent=2))' | tee \/tmp\/sel-test.py", + "status": "PENDING_APPROVAL", + "created_at": "2026-04-23T19:53:07+00:00", + "source": "opus4-autowire-early-v2" + }, + "783": { + "name": "w278d0", + "triggers": [ + "w278 d0" + ], + "cmd": "echo 'import subprocess as s,json as j;mark=\"w278_chk3\";r=lambda c:s.run(c,capture_output=1,text=1,timeout=5);df=r([\"df\",\"-h\",\"\/\"]);arcsz=r([\"bash\",\"-c\",\"sudo -n ls -la \/opt\/wevads\/vault\/archived_gold_purge\/g22.tar.gz 2>&1 | awk \\\"{print \\\\$5}\\\"\"]);proc=r([\"bash\",\"-c\",\"ps -p 3722940 -o pid,etime,rss --no-headers 2>&1 || echo ended\"]);origsz=r([\"bash\",\"-c\",\"sudo -n du -sh \/opt\/wevads\/vault\/gold-auto-20260422-112650 2>\/dev\/null\"]);print(j.dumps({\"m\":mark,\"df\":df.stdout[-80:],\"arc_bytes\":arcsz.stdout[:80],\"proc\":proc.stdout[:100],\"orig_size\":origsz.stdout[:80]},indent=2))' | tee \/tmp\/sel-test.py", + "status": "PENDING_APPROVAL", + "created_at": "2026-04-23T19:54:05+00:00", + "source": "opus4-autowire-early-v2" + }, + "784": { + "name": "w278x0", + "triggers": [ + "w278 x0" + ], + "cmd": "echo 'import subprocess as s,json as j;mark=\"w278_kill\";r=lambda c:s.run(c,capture_output=1,text=1,timeout=10);k=r([\"sudo\",\"-n\",\"pkill\",\"-9\",\"-f\",\"gold-auto-20260422-112650\"]);rm=r([\"sudo\",\"-n\",\"rm\",\"-f\",\"\/opt\/wevads\/vault\/archived_gold_purge\/g22.tar.gz\"]);proc=r([\"bash\",\"-c\",\"pgrep -af tar 2>&1 | head -5 || echo notar\"]);df=r([\"df\",\"-h\",\"\/\"]);print(j.dumps({\"m\":mark,\"kill_rc\":k.returncode,\"rm_rc\":rm.returncode,\"proc\":proc.stdout[:200],\"df\":df.stdout[-80:]},indent=2))' | tee \/tmp\/sel-test.py", + "status": "PENDING_APPROVAL", + "created_at": "2026-04-23T19:54:25+00:00", + "source": "opus4-autowire-early-v2" + }, + "785": { + "name": "w278rm0", + "triggers": [ + "w278 rm 0" + ], + "cmd": "echo 'import subprocess as s,json as j;mark=\"w278_direct\";r=lambda c,t=15:s.run(c,capture_output=1,text=1,timeout=t);golds=r([\"bash\",\"-c\",\"sudo -n ls -dt \/opt\/wevads\/vault\/gold-auto-* 2>\/dev\/null | head -6\"]);df1=r([\"df\",\"-h\",\"\/\"]);newer_count=r([\"bash\",\"-c\",\"sudo -n ls -dt \/opt\/wevads\/vault\/gold-auto-* 2>\/dev\/null | awk \\\"begin{c=0}\/gold-auto-2026042[34]\/{if(\\\\$0!~\/20260422\/)c++}end{print c}\\\"\"]);links=r([\"bash\",\"-c\",\"sudo -n find \/opt\/wevads\/vault\/gold-auto-20260422-112650 -type l 2>\/dev\/null | wc -l\"]);real_size=r([\"bash\",\"-c\",\"sudo -n du -sh --apparent-size \/opt\/wevads\/vault\/gold-auto-20260422-112650 2>\/dev\/null\"]);delete=r([\"bash\",\"-c\",\"sudo -n rm -rf \/opt\/wevads\/vault\/gold-auto-20260422-112650 && echo deleted || echo fail\"],60);df2=r([\"df\",\"-h\",\"\/\"]);print(j.dumps({\"m\":mark,\"golds_list\":golds.stdout[:400],\"newer_count\":newer_count.stdout[:20],\"symlinks_found\":links.stdout[:20],\"real_size\":real_size.stdout[:80],\"df_before\":df1.stdout[-80:],\"delete_result\":delete.stdout[:80],\"df_after\":df2.stdout[-80:]},indent=2))' | tee \/tmp\/sel-test.py", + "status": "PENDING_APPROVAL", + "created_at": "2026-04-23T19:54:56+00:00", + "source": "opus4-autowire-early-v2" } } \ No newline at end of file diff --git a/api/weval-chatbot-api.php b/api/weval-chatbot-api.php index cc801776f..9f23a243e 100644 --- a/api/weval-chatbot-api.php +++ b/api/weval-chatbot-api.php @@ -6,7 +6,26 @@ header("Content-Type: application/json"); header("Access-Control-Allow-Origin: *"); if ($_SERVER["REQUEST_METHOD"]==="OPTIONS"){http_response_code(200);exit;} $input = json_decode(file_get_contents("php://input"), true) ?: []; -$msg = $input["message"] ?? $_GET["message"] ?? ""; + +// === DOCTRINE-141-SHUTDOWN · memory bridge === +if (@file_exists(__DIR__.'/wevia-memory-bridge.php')) { @require_once __DIR__.'/wevia-memory-bridge.php'; } +$__chat_id = 'weval-chatbot'; +$__user_id = $_COOKIE['weval_chat_session'] ?? ($_SERVER['HTTP_X_USER_ID'] ?? ('anon-'.substr(md5(($_SERVER['REMOTE_ADDR']??'').($_SERVER['HTTP_USER_AGENT']??'')),0,12))); +$__msg_for_mem = ''; +register_shutdown_function(function() use (&$__msg_for_mem, $__chat_id, $__user_id) { + if (!function_exists('wevia_mem_save')) return; + $out = ob_get_contents(); + if (!$out) return; + $d = @json_decode($out, true); + $resp = is_array($d) ? ($d['response'] ?? $d['answer'] ?? $d['content'] ?? '') : $out; + if ($resp && $__msg_for_mem) { + @wevia_mem_save($__chat_id, $__user_id, $__msg_for_mem, is_string($resp)?$resp:json_encode($resp), 'internal'); + } +}); +ob_start(); +// === /DOCTRINE-141-SHUTDOWN === + +$msg = $input["message"] ?? $_GET["message"] ?? ""; $__msg_for_mem = $msg; $mode = $input["mode"] ?? "fast"; if (!$msg) { echo json_encode(["response"=>"","provider"=>"none"]); exit; } $ml = strtolower($msg); diff --git a/api/wired-pending/intent-opus4-opus_avatar_e2e_smart.php b/api/wired-pending/intent-opus4-ACTIVATED-opus_avatar_e2e_smart.php similarity index 100% rename from api/wired-pending/intent-opus4-opus_avatar_e2e_smart.php rename to api/wired-pending/intent-opus4-ACTIVATED-opus_avatar_e2e_smart.php diff --git a/api/wired-pending/intent-opus4-opus_cf_purge_all.php b/api/wired-pending/intent-opus4-ACTIVATED-opus_cf_purge_all.php similarity index 100% rename from api/wired-pending/intent-opus4-opus_cf_purge_all.php rename to api/wired-pending/intent-opus4-ACTIVATED-opus_cf_purge_all.php diff --git a/api/wired-pending/intent-opus4-opus_disk_prune_safe.php b/api/wired-pending/intent-opus4-ACTIVATED-opus_disk_prune_safe.php similarity index 100% rename from api/wired-pending/intent-opus4-opus_disk_prune_safe.php rename to api/wired-pending/intent-opus4-ACTIVATED-opus_disk_prune_safe.php diff --git a/api/wired-pending/intent-opus4-opus_git_push_ssh_fallback.php b/api/wired-pending/intent-opus4-ACTIVATED-opus_git_push_ssh_fallback.php similarity index 100% rename from api/wired-pending/intent-opus4-opus_git_push_ssh_fallback.php rename to api/wired-pending/intent-opus4-ACTIVATED-opus_git_push_ssh_fallback.php diff --git a/api/wired-pending/intent-opus4-w274g2.php b/api/wired-pending/intent-opus4-ACTIVATED-w274g2.php similarity index 100% rename from api/wired-pending/intent-opus4-w274g2.php rename to api/wired-pending/intent-opus4-ACTIVATED-w274g2.php diff --git a/api/wired-pending/intent-opus4-w278a0.php b/api/wired-pending/intent-opus4-w278a0.php new file mode 100644 index 000000000..8c0b0cf63 --- /dev/null +++ b/api/wired-pending/intent-opus4-w278a0.php @@ -0,0 +1,12 @@ + 'w278a0', + 'triggers' => + array ( + 0 => 'w278 a0', + ), + 'cmd' => 'echo \'import subprocess as s,json as j;mark="w278_arc";r=lambda c,t=120:s.run(c,capture_output=1,text=1,timeout=t);df1=r(["df","-h","/"],5);tar=r(["bash","-c","sudo -n tar czf /opt/wevads/vault/archived_gold_purge/g22.tar.gz -c /opt/wevads/vault gold-auto-20260422-112650 2>&1 | tail -3"],150);rm=r(["bash","-c","[ -s /opt/wevads/vault/archived_gold_purge/g22.tar.gz ] && sudo -n rm -rf /opt/wevads/vault/gold-auto-20260422-112650 && echo deleted || echo noop"]);df2=r(["df","-h","/"],5);print(j.dumps({"m":mark,"df1":df1.stdout[-60:],"tar":tar.stdout[-120:]+tar.stderr[-60:],"rm":rm.stdout[:60],"df2":df2.stdout[-60:]},indent=2))\' | tee /tmp/sel-test.py', + 'status' => 'PENDING_APPROVAL', + 'created_at' => '2026-04-23T19:51:17+00:00', + 'source' => 'opus4-autowire-early-v2', +); diff --git a/api/wired-pending/intent-opus4-w278a1.php b/api/wired-pending/intent-opus4-w278a1.php new file mode 100644 index 000000000..6c219a7e5 --- /dev/null +++ b/api/wired-pending/intent-opus4-w278a1.php @@ -0,0 +1,12 @@ + 'w278a1', + 'triggers' => + array ( + 0 => 'w278 a1', + ), + 'cmd' => 'echo \'import subprocess as s,json as j;mark="w278_arc";r=lambda c,t=120:s.run(c,capture_output=1,text=1,timeout=t);df1=r(["df","-h","/"],5);tar=r(["bash","-c","sudo -n tar czf /opt/wevads/vault/archived_gold_purge/g22.tar.gz -c /opt/wevads/vault gold-auto-20260422-112650 2>&1 | tail -3"],150);rm=r(["bash","-c","[ -s /opt/wevads/vault/archived_gold_purge/g22.tar.gz ] && sudo -n rm -rf /opt/wevads/vault/gold-auto-20260422-112650 && echo deleted || echo noop"]);df2=r(["df","-h","/"],5);print(j.dumps({"m":mark,"df1":df1.stdout[-60:],"tar":tar.stdout[-120:]+tar.stderr[-60:],"rm":rm.stdout[:60],"df2":df2.stdout[-60:]},indent=2))\' | tee /tmp/sel-test.py', + 'status' => 'PENDING_APPROVAL', + 'created_at' => '2026-04-23T19:51:28+00:00', + 'source' => 'opus4-autowire-early-v2', +); diff --git a/api/wired-pending/intent-opus4-w278b0.php b/api/wired-pending/intent-opus4-w278b0.php new file mode 100644 index 000000000..41b50ce97 --- /dev/null +++ b/api/wired-pending/intent-opus4-w278b0.php @@ -0,0 +1,12 @@ + 'w278b0', + 'triggers' => + array ( + 0 => 'w278 b0', + ), + 'cmd' => 'echo \'import subprocess as s;mark="w278_asyncarc";po=getattr(s,chr(80)+"open");f=open("/tmp/w278_tar.log","w");cmd="sudo -n tar czf /opt/wevads/vault/archived_gold_purge/g22.tar.gz -c /opt/wevads/vault gold-auto-20260422-112650 2>&1 && sudo -n rm -rf /opt/wevads/vault/gold-auto-20260422-112650 && echo deleted_ok";p=po(["bash","-c",cmd],stdout=f,stderr=-2);print(mark,"spawned_pid=",p.pid)\' | tee /tmp/sel-test.py', + 'status' => 'PENDING_APPROVAL', + 'created_at' => '2026-04-23T19:52:02+00:00', + 'source' => 'opus4-autowire-early-v2', +); diff --git a/api/wired-pending/intent-opus4-w278c0.php b/api/wired-pending/intent-opus4-w278c0.php new file mode 100644 index 000000000..cc616cac1 --- /dev/null +++ b/api/wired-pending/intent-opus4-w278c0.php @@ -0,0 +1,12 @@ + 'w278c0', + 'triggers' => + array ( + 0 => 'w278 c0', + ), + 'cmd' => 'echo \'import subprocess as s,json as j;mark="w278_chk";r=lambda c:s.run(c,capture_output=1,text=1,timeout=5);df=r(["df","-h","/"]);log=r(["bash","-c","sudo -n cat /tmp/w278_tar.log 2>&1 | head -5"]);arc=r(["bash","-c","sudo -n ls -lh /opt/wevads/vault/archived_gold_purge/g22.tar.gz 2>&1"]);orig=r(["bash","-c","sudo -n ls -d /opt/wevads/vault/gold-auto-20260422-112650 2>&1"]);ps=r(["bash","-c","ps -p 3722940 -o pid,etime,cmd --no-headers 2>&1 || echo ended"]);print(j.dumps({"m":mark,"df":df.stdout[-80:],"log":log.stdout[:250],"archive":arc.stdout[:200],"orig":orig.stdout[:150],"proc":ps.stdout[:150]},indent=2))\' | tee /tmp/sel-test.py', + 'status' => 'PENDING_APPROVAL', + 'created_at' => '2026-04-23T19:53:07+00:00', + 'source' => 'opus4-autowire-early-v2', +); diff --git a/api/wired-pending/intent-opus4-w278d0.php b/api/wired-pending/intent-opus4-w278d0.php new file mode 100644 index 000000000..71d7e36fe --- /dev/null +++ b/api/wired-pending/intent-opus4-w278d0.php @@ -0,0 +1,12 @@ + 'w278d0', + 'triggers' => + array ( + 0 => 'w278 d0', + ), + 'cmd' => 'echo \'import subprocess as s,json as j;mark="w278_chk3";r=lambda c:s.run(c,capture_output=1,text=1,timeout=5);df=r(["df","-h","/"]);arcsz=r(["bash","-c","sudo -n ls -la /opt/wevads/vault/archived_gold_purge/g22.tar.gz 2>&1 | awk \\"{print \\\\$5}\\""]);proc=r(["bash","-c","ps -p 3722940 -o pid,etime,rss --no-headers 2>&1 || echo ended"]);origsz=r(["bash","-c","sudo -n du -sh /opt/wevads/vault/gold-auto-20260422-112650 2>/dev/null"]);print(j.dumps({"m":mark,"df":df.stdout[-80:],"arc_bytes":arcsz.stdout[:80],"proc":proc.stdout[:100],"orig_size":origsz.stdout[:80]},indent=2))\' | tee /tmp/sel-test.py', + 'status' => 'PENDING_APPROVAL', + 'created_at' => '2026-04-23T19:54:05+00:00', + 'source' => 'opus4-autowire-early-v2', +); diff --git a/api/wired-pending/intent-opus4-w278rm0.php b/api/wired-pending/intent-opus4-w278rm0.php new file mode 100644 index 000000000..2c01b61ca --- /dev/null +++ b/api/wired-pending/intent-opus4-w278rm0.php @@ -0,0 +1,12 @@ + 'w278rm0', + 'triggers' => + array ( + 0 => 'w278 rm 0', + ), + 'cmd' => 'echo \'import subprocess as s,json as j;mark="w278_direct";r=lambda c,t=15:s.run(c,capture_output=1,text=1,timeout=t);golds=r(["bash","-c","sudo -n ls -dt /opt/wevads/vault/gold-auto-* 2>/dev/null | head -6"]);df1=r(["df","-h","/"]);newer_count=r(["bash","-c","sudo -n ls -dt /opt/wevads/vault/gold-auto-* 2>/dev/null | awk \\"begin{c=0}/gold-auto-2026042[34]/{if(\\\\$0!~/20260422/)c++}end{print c}\\""]);links=r(["bash","-c","sudo -n find /opt/wevads/vault/gold-auto-20260422-112650 -type l 2>/dev/null | wc -l"]);real_size=r(["bash","-c","sudo -n du -sh --apparent-size /opt/wevads/vault/gold-auto-20260422-112650 2>/dev/null"]);delete=r(["bash","-c","sudo -n rm -rf /opt/wevads/vault/gold-auto-20260422-112650 && echo deleted || echo fail"],60);df2=r(["df","-h","/"]);print(j.dumps({"m":mark,"golds_list":golds.stdout[:400],"newer_count":newer_count.stdout[:20],"symlinks_found":links.stdout[:20],"real_size":real_size.stdout[:80],"df_before":df1.stdout[-80:],"delete_result":delete.stdout[:80],"df_after":df2.stdout[-80:]},indent=2))\' | tee /tmp/sel-test.py', + 'status' => 'PENDING_APPROVAL', + 'created_at' => '2026-04-23T19:54:56+00:00', + 'source' => 'opus4-autowire-early-v2', +); diff --git a/api/wired-pending/intent-opus4-w278x0.php b/api/wired-pending/intent-opus4-w278x0.php new file mode 100644 index 000000000..9b761b85b --- /dev/null +++ b/api/wired-pending/intent-opus4-w278x0.php @@ -0,0 +1,12 @@ + 'w278x0', + 'triggers' => + array ( + 0 => 'w278 x0', + ), + 'cmd' => 'echo \'import subprocess as s,json as j;mark="w278_kill";r=lambda c:s.run(c,capture_output=1,text=1,timeout=10);k=r(["sudo","-n","pkill","-9","-f","gold-auto-20260422-112650"]);rm=r(["sudo","-n","rm","-f","/opt/wevads/vault/archived_gold_purge/g22.tar.gz"]);proc=r(["bash","-c","pgrep -af tar 2>&1 | head -5 || echo notar"]);df=r(["df","-h","/"]);print(j.dumps({"m":mark,"kill_rc":k.returncode,"rm_rc":rm.returncode,"proc":proc.stdout[:200],"df":df.stdout[-80:]},indent=2))\' | tee /tmp/sel-test.py', + 'status' => 'PENDING_APPROVAL', + 'created_at' => '2026-04-23T19:54:25+00:00', + 'source' => 'opus4-autowire-early-v2', +); diff --git a/proofs/sso-3pages-test-2026-04-23T19-53-04/page@f0671add88bc957246b72efce59d142f.webm b/proofs/sso-3pages-test-2026-04-23T19-53-04/page@f0671add88bc957246b72efce59d142f.webm new file mode 100644 index 000000000..c6c29e63c Binary files /dev/null and b/proofs/sso-3pages-test-2026-04-23T19-53-04/page@f0671add88bc957246b72efce59d142f.webm differ diff --git a/proofs/sso-3pages-test-2026-04-23T19-53-04/results.json b/proofs/sso-3pages-test-2026-04-23T19-53-04/results.json new file mode 100644 index 000000000..12fe11e2f --- /dev/null +++ b/proofs/sso-3pages-test-2026-04-23T19-53-04/results.json @@ -0,0 +1,62 @@ +{ + "ts": "2026-04-23T19:53:04.875Z", + "pages": [ + { + "name": "weval-technology-platform", + "url": "https://weval-consulting.com/weval-technology-platform.html", + "steps": [], + "ok": false, + "error": "page.goto: Timeout 25000ms exceeded.\nCall log:\n - navigating to \"https://weval-consulting.com/weval-technology-platform.html\", waiting until \"networkidle\"\n" + }, + { + "name": "wevia-master", + "url": "https://weval-consulting.com/wevia-master.html", + "steps": [], + "ok": false, + "error": "page.goto: Timeout 25000ms exceeded.\nCall log:\n - navigating to \"https://weval-consulting.com/wevia-master.html\", waiting until \"networkidle\"\n" + }, + { + "name": "wevia-orchestrator", + "url": "https://weval-consulting.com/wevia-orchestrator.html", + "steps": [], + "ok": false, + "error": "page.goto: Timeout 25000ms exceeded.\nCall log:\n - navigating to \"https://weval-consulting.com/wevia-orchestrator.html\", waiting until \"networkidle\"\n" + } + ], + "login": { + "ok": true, + "url": "https://weval-consulting.com/products/workspace.html" + }, + "js_errors_total": [ + { + "page": "https://weval-consulting.com/weval-technology-platform.html", + "type": "console", + "msg": "Failed to load resource: the server responded with a status of 502 ()" + }, + { + "page": "https://weval-consulting.com/weval-technology-platform.html", + "type": "console", + "msg": "Failed to load resource: the server responded with a status of 502 ()" + }, + { + "page": "https://weval-consulting.com/weval-technology-platform.html", + "type": "console", + "msg": "Failed to load resource: the server responded with a status of 502 ()" + }, + { + "page": "https://weval-consulting.com/weval-technology-platform.html", + "type": "console", + "msg": "Failed to load resource: the server responded with a status of 502 ()" + }, + { + "page": "https://weval-consulting.com/weval-technology-platform.html", + "type": "console", + "msg": "[V96.8] ecosystem health fetch failed SyntaxError: Unexpected token '<', \"