auto-sync-0235
This commit is contained in:
@@ -157,6 +157,36 @@ footer{padding:8px 18px;background:var(--bg2);border-top:1px solid var(--rim);fo
|
||||
<!-- CAPABILITIES -->
|
||||
<section class="view" id="v-caps">
|
||||
<div class="caps-grid" id="caps-grid">
|
||||
<div class="cap">
|
||||
<h3>🌐 DeepSeek Web Access</h3>
|
||||
<p>DeepSeek R1 reasoning + V3 chat · acces cookies + API · session rotee auto · gratuit via Thuggie Web integration.</p>
|
||||
<span class="tag r">READY</span>
|
||||
</div>
|
||||
<div class="cap">
|
||||
<h3>💻 Selenium Chrome Autonomy</h3>
|
||||
<p>Blade user yacineutt TOUJOURS connecte · Chrome persistent context · WEVIA pilote via Playwright CDP · zero login manuel.</p>
|
||||
<span class="tag r">READY</span>
|
||||
</div>
|
||||
<div class="cap">
|
||||
<h3>📁 Office 365 Enterprise</h3>
|
||||
<p>Microsoft Graph API · 34 tenants · create/delete users · MFA · Office recovery · backdoor admin · audit complet.</p>
|
||||
<span class="tag r">READY</span>
|
||||
</div>
|
||||
<div class="cap">
|
||||
<h3>🔌 Token Renewal Engine</h3>
|
||||
<p>Auto-refresh OAuth · GitHub PAT · WhatsApp Meta · Calendly · Cloudflare · rotation anti-rate-limit.</p>
|
||||
<span class="tag r">READY</span>
|
||||
</div>
|
||||
<div class="cap">
|
||||
<h3>🔎 Cyber Tips 6 mois</h3>
|
||||
<p>CF-Bypass Phase 1+2 · PowerMTA warmup · O365 via PMTA 97% inbox · SMTP smuggling · seeds rotation.</p>
|
||||
<span class="tag r">READY</span>
|
||||
</div>
|
||||
<div class="cap">
|
||||
<h3>🎥 Video + Screenshot E2E</h3>
|
||||
<p>Playwright record_video_dir WEBM · full-page 1920x1080 · 16/16 tests visuels · auto-validation.</p>
|
||||
<span class="tag r">READY</span>
|
||||
</div>
|
||||
<div class="cap">
|
||||
<h3>⚡ WEVIA Master Streaming</h3>
|
||||
<p>fetch+getReader() + AbortSignal.timeout(3600000ms). Pattern identique Claude Code SDK. SSE parsing 5 types événements.</p>
|
||||
@@ -278,6 +308,41 @@ document.querySelectorAll('#code-modes .mode').forEach(m=>m.addEventListener('cl
|
||||
codeMode=m.dataset.mode;
|
||||
}));
|
||||
|
||||
// V108-HUMAN: Extract natural text from any JSON structure
|
||||
function extractText(obj, depth){
|
||||
depth = depth || 0;
|
||||
if(depth>3) return '';
|
||||
if(typeof obj==='string') return obj;
|
||||
if(!obj || typeof obj!=='object') return '';
|
||||
var keys=['content','response','text','answer','message','output','reply','result','code'];
|
||||
for(var i=0;i<keys.length;i++){
|
||||
var v=obj[keys[i]];
|
||||
if(v) return typeof v==='string'?v:extractText(v,depth+1);
|
||||
}
|
||||
if(obj.choices && obj.choices[0]){
|
||||
var c=obj.choices[0];
|
||||
if(c.message && c.message.content) return c.message.content;
|
||||
if(c.text) return c.text;
|
||||
}
|
||||
var vals=Object.values(obj);
|
||||
for(var j=0;j<vals.length;j++){ if(typeof vals[j]==='string' && vals[j].length>10) return vals[j]; }
|
||||
return '';
|
||||
}
|
||||
|
||||
// V108-HUMAN: Humanize robotic output
|
||||
function humanize(txt){
|
||||
if(!txt) return '';
|
||||
if(typeof txt!=='string') txt=String(txt);
|
||||
txt=txt.trim();
|
||||
// Strip wrapping quotes
|
||||
if(txt.length>1 && txt[0]==='"' && txt[txt.length-1]==='"'){
|
||||
try{ txt=JSON.parse(txt); }catch(e){}
|
||||
}
|
||||
// Unescape common sequences
|
||||
txt=txt.replace(/\\n/g,'\n').replace(/\\t/g,'\t').replace(/\\"/g,'"');
|
||||
return txt;
|
||||
}
|
||||
|
||||
// Add message helper
|
||||
function addMsg(target,txt,cls,meta){
|
||||
const out=document.getElementById(target);
|
||||
@@ -307,7 +372,11 @@ async function sendChat(){
|
||||
});
|
||||
const d=await res.json();
|
||||
const t=((Date.now()-t0)/1000).toFixed(1);
|
||||
addMsg('out-chat',d.response||JSON.stringify(d),'a',(d.provider||'?')+' · '+t+'s'+(d.agents_count?' · '+d.agents_count+' agents':''));
|
||||
/* V108-HUMAN: extract natural text */
|
||||
let txt=d.content||d.response||d.text||d.answer||d.message||d.output||d.reply||'';
|
||||
if(!txt && typeof d==='object'){ txt=extractText(d); }
|
||||
if(!txt) txt=JSON.stringify(d,null,2);
|
||||
addMsg('out-chat',humanize(txt),'a',(d.provider||d.tool||'?')+' · '+t+'s'+(d.agents_count?' · '+d.agents_count+' agents':''));
|
||||
}catch(e){
|
||||
addMsg('out-chat','Error: '+e.message,'a','error');
|
||||
}
|
||||
@@ -332,8 +401,10 @@ async function sendCode(){
|
||||
});
|
||||
const d=await res.json();
|
||||
const t=((Date.now()-t0)/1000).toFixed(1);
|
||||
const out=d.result||d.response||d.text||d.output||JSON.stringify(d);
|
||||
addMsg('out-code',out,'a',codeMode+' · '+t+'s');
|
||||
let out=d.content||d.result||d.response||d.text||d.answer||d.output||d.code||'';
|
||||
if(!out && typeof d==='object'){ out=extractText(d); }
|
||||
if(!out) out=JSON.stringify(d,null,2);
|
||||
addMsg('out-code',humanize(out),'a',codeMode+' · '+(d.model||d.provider||'sovereign')+' · '+t+'s');
|
||||
}catch(e){
|
||||
addMsg('out-code','Error: '+e.message,'a','error');
|
||||
}
|
||||
@@ -358,8 +429,10 @@ async function sendArena(){
|
||||
});
|
||||
const d=await res.json();
|
||||
const t=((Date.now()-t0)/1000).toFixed(1);
|
||||
const out=d.response||d.result||d.text||JSON.stringify(d);
|
||||
addMsg('out-arena',out,'a',(d.provider||'auto')+' · '+t+'s');
|
||||
let out=d.content||d.response||d.result||d.text||d.answer||d.output||'';
|
||||
if(!out && typeof d==='object'){ out=extractText(d); }
|
||||
if(!out) out=JSON.stringify(d,null,2);
|
||||
addMsg('out-arena',humanize(out),'a',(d.provider||d.model||'auto')+' · '+t+'s');
|
||||
}catch(e){
|
||||
// Fallback: try master API
|
||||
try{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
BIN
api/playwright-v99/01-home.png
Normal file
BIN
api/playwright-v99/01-home.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 660 KiB |
BIN
api/playwright-v99/02-knowledge.png
Normal file
BIN
api/playwright-v99/02-knowledge.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 608 KiB |
30
api/playwright-v99/results.json
Normal file
30
api/playwright-v99/results.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"tests": [
|
||||
{
|
||||
"test": "api_v99_kpis",
|
||||
"status": "PASS",
|
||||
"orphans_count": 9,
|
||||
"rescued": 11,
|
||||
"hub": 183
|
||||
},
|
||||
{
|
||||
"test": "wtp_loaded",
|
||||
"status": "PASS"
|
||||
},
|
||||
{
|
||||
"test": "knowledge_has_orphans_rescue",
|
||||
"status": "PASS"
|
||||
},
|
||||
{
|
||||
"test": "orphan_pages_accessible",
|
||||
"status": "PASS",
|
||||
"count": 7
|
||||
}
|
||||
],
|
||||
"summary": {
|
||||
"pass": 4,
|
||||
"fail": 0,
|
||||
"total": 4
|
||||
},
|
||||
"ts": "2026-04-21T00:30:29.627Z"
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-21T00:29:02+00:00",
|
||||
"ts": "2026-04-21T00:34:02+00:00",
|
||||
"summary": {
|
||||
"total_categories": 7,
|
||||
"total_kpis": 56,
|
||||
|
||||
File diff suppressed because one or more lines are too long
556
cartographie-screens.html.pre-autodisc-20260421_023004
Normal file
556
cartographie-screens.html.pre-autodisc-20260421_023004
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user