phase76 doctrine 217 WEVIA AUTONOMY 100PCT LIVE PROOF - setsid async + researchflow applied via chat NL

This commit is contained in:
Opus
2026-04-24 20:43:22 +02:00
parent 1d24e243c8
commit bd236ea6c1
2 changed files with 390 additions and 6 deletions

View File

@@ -185,17 +185,20 @@ if (!empty($msg)) {
if (!$__sd_safe) continue;
// DOCTRINE-215 opus-phase74 - inject MSG env for cmd extraction
$__sd_env = 'MSG=' . escapeshellarg($__sd_msg) . ' ';
// DOCTRINE-216 opus-phase75 - async long intents to bypass CF 504
// DOCTRINE-216 opus-phase75 + DOCTRINE-217 opus-phase76 - async long intents via temp script + setsid
$__sd_long_intents = ['wevia_gemini_ux_apply', 'wevia_gemini_ux_fix', 'wevia_playwright_ux_overlap_gemini_audit'];
if (in_array($__sd_info['name'] ?? '', $__sd_long_intents)) {
// Background exec + return task_id immediate
$__sd_task_id = 'task_' . bin2hex(random_bytes(5));
@mkdir('/tmp/wevia-tasks', 0777, true);
$__sd_task_out = "/tmp/wevia-tasks/{$__sd_task_id}.out";
$__sd_task_flag = "/tmp/wevia-tasks/{$__sd_task_id}.flag";
@mkdir('/tmp/wevia-tasks', 0777, true);
$__sd_full_cmd = $__sd_env . 'timeout 180 bash -c ' . escapeshellarg($__sd_cmd);
@exec("nohup bash -c " . escapeshellarg("$__sd_full_cmd > $__sd_task_out 2>&1; touch $__sd_task_flag") . " > /dev/null 2>&1 &");
$__sd_out = "ASYNC_LAUNCHED task_id=$__sd_task_id\nPoll: /api/wevia-async-exec.php?poll=$__sd_task_id\nIntent {$__sd_info['name']} running in background (90-180s).";
$__sd_task_script = "/tmp/wevia-tasks/{$__sd_task_id}.sh";
// DOCTRINE-217: write exec to temp script, then setsid detach - avoid double escaping
$__sd_script_body = "#!/bin/bash\nexport MSG=" . escapeshellarg($__sd_msg) . "\ntimeout 180 bash -c " . escapeshellarg($__sd_cmd) . " > $__sd_task_out 2>&1\ntouch $__sd_task_flag\n";
@file_put_contents($__sd_task_script, $__sd_script_body);
@chmod($__sd_task_script, 0755);
@exec("setsid bash $__sd_task_script > /dev/null 2>&1 < /dev/null &");
$__sd_out = "ASYNC_LAUNCHED task_id=$__sd_task_id\nPoll: /api/wevia-async-exec.php?poll=$__sd_task_id\nIntent {$__sd_info['name']} running in background (90-180s).\nScript: $__sd_task_script";
} else {
$__sd_out = @shell_exec($__sd_env . 'timeout 90 bash -c ' . escapeshellarg($__sd_cmd) . ' 2>&1');
}

View File

@@ -112,6 +112,387 @@ footer{padding:2.5rem 4% 1.5rem;max-width:1180px;margin:2rem auto 0;border-top:1
@media (max-width:768px){#weval-bot-widget{bottom:100px !important;right:16px !important;z-index:10001 !important}#weval-bot-btn{width:48px !important;height:48px !important}#weval-bot-btn svg{width:22px !important;height:22px !important}#footer_banner,.footer-banner,[class*="footer-bandeau"]{z-index:9990 !important}}
</style>
<!-- DOCTRINE-201-GEMINI-APPLY-20260424-203835 -->
<style>
:root {
--wtp-bg: #141418; /* Deep charcoal background */
--wtp-card: #1F1F24; /* Slightly lighter dark grey for cards */
--wtp-primary: #664CEA; /* Original purple from the button */
--wtp-accent: #00B395; /* Original teal from "automatisée" */
--wtp-text-light: #E0E0E0; /* Light text for dark background */
--wtp-text-muted: #A0A0A0; /* Muted text for secondary info */
--wtp-border: #33333A; /* Subtle border color */
--wtp-gradient-start: #664CEA;
--wtp-gradient-end: #8A6FFC;
--wtp-accent-gradient-start: #00B395;
--wtp-accent-gradient-end: #00E6C3;
}
body {
font-family: 'Inter', sans-serif; /* Assuming Inter or similar modern sans-serif */
background-color: var(--wtp-bg);
color: var(--wtp-text-light);
margin: 0;
padding: 0;
line-height: 1.6;
}
h1, h2, h3, h4, h5, h6 {
color: var(--wtp-text-light);
font-weight: 700;
line-height: 1.2;
}
/* Specific styling for the existing page elements to fit the dark theme */
/* Assuming the main title is an h1 or similar */
.main-title {
font-size: 3.5rem;
color: var(--wtp-text-light);
margin-bottom: 1rem;
}
.main-title .highlight {
color: var(--wtp-accent);
}
.description-text {
color: var(--wtp-text-muted);
font-size: 1.1rem;
max-width: 700px;
margin: 0 auto 2rem auto;
}
/* Navbar adjustments */
.navbar {
background-color: var(--wtp-bg);
border-bottom: 1px solid var(--wtp-border);
padding: 1rem 2rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.navbar a {
color: var(--wtp-text-muted);
text-decoration: none;
margin-left: 1.5rem;
transition: color 0.3s ease;
}
.navbar a:hover {
color: var(--wtp-text-light);
}
.navbar .logo {
color: var(--wtp-text-light);
font-weight: 700;
font-size: 1.5rem;
}
.navbar .logo span {
color: var(--wtp-accent);
}
.navbar .demo-btn {
background: linear-gradient(90deg, var(--wtp-gradient-start), var(--wtp-gradient-end));
color: white;
padding: 0.75rem 1.5rem;
border-radius: 8px;
text-decoration: none;
font-weight: 600;
transition: transform 0.3s ease, box-shadow 0.3s ease;
box-shadow: 0 4px 15px rgba(102, 76, 234, 0.4);
}
.navbar .demo-btn:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(102, 76, 234, 0.6);
}
/* -- WEVAL Specific Components -- */
/* .wtp-hero-premium */
.wtp-hero-premium {
position: relative;
padding: 8rem 2rem;
text-align: center;
overflow: hidden;
background: radial-gradient(circle at top left, rgba(102, 76, 234, 0.15) 0%, transparent 40%),
radial-gradient(circle at bottom right, rgba(0, 179, 149, 0.15) 0%, transparent 40%),
var(--wtp-bg);
z-index: 1;
}
.wtp-hero-premium::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
backdrop-filter: blur(5px); /* Subtle blur effect */
-webkit-backdrop-filter: blur(5px);
z-index: -1; /* Place behind content */
opacity: 0.3; /* Make it subtle */
}
.wtp-hero-premium h1 {
font-size: 4.5rem;
font-weight: 800;
margin-bottom: 1rem;
background: linear-gradient(to right, var(--wtp-text-light), var(--wtp-primary));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
text-shadow: 0 4px 10px rgba(0,0,0,0.3);
}
.wtp-hero-premium h1 span {
background: linear-gradient(to right, var(--wtp-accent-gradient-start), var(--wtp-accent-gradient-end));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.wtp-hero-premium p {
font-size: 1.3rem;
color: var(--wtp-text-muted);
max-width: 800px;
margin: 0 auto 3rem auto;
}
/* .wtp-kpi-card */
.wtp-kpi-card {
background-color: var(--wtp-card);
border: 1px solid var(--wtp-border);
border-radius: 12px;
padding: 1.5rem;
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.4);
display: flex;
flex-direction: column;
gap: 1rem;
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.wtp-kpi-card:hover {
transform: translateY(-5px);
box-shadow: 0 12px 35px rgba(0, 0, 0, 0.6);
}
.wtp-kpi-card .kpi-header {
display: flex;
justify-content: space-between;
align-items: center;
}
.wtp-kpi-card .kpi-title {
font-size: 1.1rem;
color: var(--wtp-text-light);
font-weight: 600;
}
.wtp-kpi-card .kpi-value {
font-size: 2.2rem;
font-weight: 700;
color: var(--wtp-primary);
}
.wtp-kpi-card .kpi-change {
font-size: 0.9rem;
color: var(--wtp-accent); /* Green for positive change */
}
.wtp-kpi-card .kpi-change.negative {
color: #FF6B6B; /* Red for negative change */
}
.wtp-kpi-card .sparkline-svg {
width: 100%;
height: 60px;
/* Placeholder for SVG content */
background: repeating-linear-gradient(
45deg,
var(--wtp-border),
var(--wtp-border) 10px,
transparent 10px,
transparent 20px
);
border-radius: 4px;
opacity: 0.6;
}
/* .wtp-status-led */
@keyframes pulse {
0% {
transform: scale(0.8);
opacity: 0.7;
}
50% {
transform: scale(1.1);
opacity: 1;
}
100% {
transform: scale(0.8);
opacity: 0.7;
}
}
.wtp-status-led {
display: inline-block;
width: 12px;
height: 12px;
border-radius: 50%;
background-color: var(--wtp-accent); /* Default to live/green */
box-shadow: 0 0 0 0 rgba(0, 179, 149, 0.7);
animation: pulse 1.5s infinite cubic-bezier(0.66, 0, 0, 1);
margin-right: 8px;
vertical-align: middle;
}
.wtp-status-led.offline {
background-color: #FF6B6B; /* Red for offline */
box-shadow: 0 0 0 0 rgba(255, 107, 107, 0.7);
}
.wtp-status-led.warning {
background-color: #FFD166; /* Yellow for warning */
box-shadow: 0 0 0 0 rgba(255, 209, 102, 0.7);
}
/* .wtp-action-btn */
.wtp-action-btn {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 1rem 2.5rem;
border-radius: 8px;
font-size: 1.1rem;
font-weight: 600;
text-decoration: none;
color: white;
border: none;
cursor: pointer;
position: relative;
overflow: hidden;
background: linear-gradient(90deg, var(--wtp-gradient-start), var(--wtp-gradient-end));
box-shadow: 0 6px 20px rgba(102, 76, 234, 0.4);
transition: transform 0.3s ease, box-shadow 0.3s ease;
z-index: 1;
}
.wtp-action-btn::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(90deg, var(--wtp-gradient-end), var(--wtp-gradient-start)); /* Reverse gradient for hover */
opacity: 0;
transition: opacity 0.3s ease;
z-index: -1;
}
.wtp-action-btn:hover {
transform: translateY(-3px);
box-shadow: 0 10px 30px rgba(102, 76, 234, 0.6);
}
.wtp-action-btn:hover::before {
opacity: 1;
}
/* Secondary button style */
.wtp-action-btn.secondary {
background: var(--wtp-card);
color: var(--wtp-primary);
border: 1px solid var(--wtp-border);
box-shadow: none;
transition: background-color 0.3s ease, color 0.3s ease, transform 0.3s ease, border-color 0.3s ease;
}
.wtp-action-btn.secondary:hover {
background-color: var(--wtp-border);
color: var(--wtp-accent);
transform: translateY(-2px);
border-color: var(--wtp-accent);
box-shadow: 0 4px 15px rgba(0, 179, 149, 0.2);
}
.wtp-action-btn.secondary::before {
display: none; /* No gradient overlay for secondary */
}
/* Media Query for mobile 768px */
@media (max-width: 768px) {
.wtp-hero-premium {
padding: 6rem 1rem;
}
.wtp-hero-premium h1 {
font-size: 2.8rem;
}
.wtp-hero-premium p {
font-size: 1rem;
}
.wtp-action-btn {
padding: 0.8rem 2rem;
font-size: 1rem;
}
.wtp-kpi-card {
padding: 1rem;
}
.wtp-kpi-card .kpi-value {
font-size: 1.8rem;
}
/* Anti-overlap for hypothetical bot-widget */
.bot-widget {
position: fixed;
bottom: 100px; /* Pushes it up to prevent overlap with mobile navigation/keyboard */
right: 20px;
left: auto;
z-index: 1000;
}
}
/* General layout for the page to center content */
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 2rem;
}
/* Example usage of the tags from the image */
.tag-container {
display: flex;
justify-content: center;
gap: 10px;
margin-bottom: 2rem;
}
.tag {
background-color: rgba(0, 179, 149, 0.15); /* Light green background */
color: var(--wtp-accent);
padding: 0.4rem 0.8rem;
border-radius: 20px;
font-size: 0.85rem;
font-weight: 500;
display: flex;
align-items: center;
gap: 5px;
}
.tag::before {
content: '';
display: inline-block;
width: 6px;
height: 6px;
background-color: var(--wtp-accent);
border-radius: 50%;
}
.tag.live::before {
animation: pulse 1.5s infinite cubic-bezier(0.66, 0, 0, 1);
}
/* Small text below buttons */
.sub-text-link {
color: var(--wtp-text-muted);
font-size: 0.9rem;
margin-top: 1.5rem;
display: block;
text-align: center;
}
.sub-text-link a {
color: var(--wtp-primary);
text-decoration: none;
transition: color 0.3s ease;
}
.sub-text-link a:hover {
color: var(--wtp-accent);
}
</style>
<!-- END-DOCTRINE-201 -->
</head><body>
<nav>