VISION CORE
V2.3.4 HARDENED REAL-TIME • BLACK/PURPLE • SSE • LIVE PIPELINE

DEPLOY SEGURO • PASS GOLD • GITHUB PR REAL • DIFF • CI • VAULT • AUTO-ROLLBACK

Sistema operacional para desenvolvimento com IA.

IAs criam software rápido. O VISION CORE fecha o loop: diagnostica, executa, valida, protege e mostra tudo em logs vivos.

MissãoDiagnósticoDiffPASS GOLDPRStable Vault

MISSION CONTROL

Operador técnico multi-projeto, multi-stack, com aprendizado contínuo.




SAAS ONBOARDING • SOCIAL LOGIN / OAUTH SIGNUP POPUP • PLANS

Cadastro SaaS automático, simples e popular.

Autonomous Software Repair System. Isso não é chat, copiloto ou automação simples. É um sistema que detecta → entende → corrige → valida → protege → aprende.

O cadastro agora abre em popup preto pelo botão Sign in no header. Google, GitHub e SSO criam usuário automaticamente com plano FREE por padrão, preparado para OAuth real depois.

FREE5 missões/mêssem auto-merge
PROmissões ilimitadasGitHub auto PR + rollback
ENTERPRISEmulti-projeto + workersdashboard completo

OPERADOR

Social Login / OAuth Signup Popup


MISSION TIMELINE

Fluxo visual: missão recebida → Hermes → snapshot → diff → validação → GitHub PR.


DIFF PREVIEW

Mostra o patch antes de criar branch, commit ou Pull Request.

Aguardando diff...

PASS GOLD SCORE

Promoção só é liberada acima do corte GOLD.


GitHub Integration Real

Cria branch, aplica commit e abre Pull Request real via GitHub REST API. Bloqueado sem PASS GOLD.

Verificando GitHub...

V10 ENTERPRISE FOUNDATION

Multi-projetogestão por stack e estado GOLD
Métricas reaisruntime, delivery e GitHub
Hermes votandoconsenso antes do PR
Auto-merge condicionadosó com checks + GOLD
Workers distribuídosfilas por execução/rollback
Billing SaaSplanos prontos para Stripe


AI API VAULT - PROVEDORES PAGOS - ROTEAMENTO INTELIGENTE

Menu para adicionar APIs de IAs pagas

Conecte provedores comerciais e defina prioridade/fallback. As chaves ficam preparadas para uso via variaveis de ambiente ou vault local em desenvolvimento.

VER LANDING STARTUP
Nenhuma API salva nesta sessao.

TOOLS MARKETPLACE

Conectores preparados para GitHub, Cloudflare, Railway, Docker, Langfuse e billing.


LIVE EXECUTION STREAM

Aguardando eventos SSE / polling do missionRunner v1.1...

AGENT METRICS • CUSTO POR AGENTE • PIPELINE

MÉTRICAS DOS AGENTES

Ligado ao backend em /api/metrics/agents. Quando o backend estiver offline, a tela mantém fallback local marcado como UI local.

● LIVE

OPENSQUAD RESERVE • AGENTES QUE TRABALHAM FORA DO MENU PRINCIPAL

AGENTES EXTRAS EM EXECUÇÃO

Catálogo lido do backend em /api/agents/catalog, usando os nomes e funções reais do projeto.

Ver OpenSquad
LIVE ▂▄▆█
), ''); console.info('VISION CORE API_BASE_URL:', API); const logsBox=document.getElementById('logsBox'), logsPanel=document.getElementById('logsPanel'); function showLog(scope,msg,cls=''){logsPanel.classList.add('active');logsBox.classList.remove('empty');logsBox.innerHTML+=`
[${new Date().toLocaleTimeString()}] ${scope}: ${msg}
`;logsBox.scrollTop=logsBox.scrollHeight} function setRuntimeState(s){runtimeMonitor.className=s;runtimeText.textContent=s.toUpperCase()} async function api(path,opts={}){const res=await fetch(API+path,opts);return await res.json()} async function loadTimeline(){const d=await api('/api/missions/timeline'); timelineBox.innerHTML=d.timeline.map(x=>`
${x.step}${x.status}${x.detail}
`).join('')} async function loadScore(){const d=await api('/api/pass-gold/score'); scoreBox.innerHTML=`
${d.final} / GOLD
Status: ${d.status}
Promoção: ${d.promotion_allowed?'LIBERADA':'BLOQUEADA'}
`} async function loadMetrics(){const d=await api('/api/metrics/summary'); const r=d.runtime; metricsBox.innerHTML=['cpu','memory','disk','network'].map(k=>`
${k.toUpperCase()}
${r[k]}%
`).join('')} async function loadVotes(){const d=await api('/api/hermes/vote'); votesBox.innerHTML=d.votes.map(v=>`
${v.agent}${v.vote} ${v.confidence}%
`).join('')+`

${d.consensus}

`} async function loadWorkers(){const d=await api('/api/workers/status'); workersBox.innerHTML=d.workers.map(w=>`
${w.id} ${w.queue||''}${w.status}
`).join(''); if(window.queueBox){queueBox.innerHTML=`
Jobs na fila${d.queued||0}
Processados${d.processed||0}
`}} async function loadProjects(){const d=await api('/api/projects'); if(window.projectSelector){projectSelector.innerHTML=d.projects.map(p=>``).join('')}} async function enqueueMission(){const mission=(missionText.value.trim()||'demo mission worker queue'); const project=(projectSelector&&projectSelector.value)||'vision-core-master'; const res=await fetch(API+'/api/workers/enqueue',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({project_id:project,type:'MISSION',payload:mission})}); const data=await res.json(); showLog('WORKER','job enfileirado: '+data.job_id,'cyan'); await loadWorkers();} async function loadTools(){const d=await api('/api/tools/marketplace'); toolsBox.innerHTML=d.tools.map(t=>`
${t.name}${t.status}
`).join('')} async function loadPlans(){const d=await api('/api/billing/plans'); if(!d.plans)return; plansBox.innerHTML=d.plans.map((p,i)=>`
${p.name}${p.missions}${p.features.join(' • ')}
`).join(''); bindPlans();} async function checkGithub(){const d=await api('/api/github/status'); githubStatus.innerHTML=`Configured: ${d.configured}
Repo: ${d.owner}/${d.repo}
Policy: ${d.policy}
Token: ${d.token}`; showLog('GITHUB','status verificado')} let selectedPlan='free'; function $(id){return document.getElementById(id)} const authBackdrop=$('authBackdrop'), signupEmail=$('signupEmail'), signupBtn=$('signupBtn'), closeAuthBtn=$('closeAuthBtn'), openAuthBtn=$('openAuthBtn'), openAuthBtn2=$('openAuthBtn2'); function openAuth(){if(!authBackdrop)return;authBackdrop.classList.add('show');authBackdrop.setAttribute('aria-hidden','false');setTimeout(()=>signupEmail&&signupEmail.focus(),80)} function closeAuth(){if(!authBackdrop)return;authBackdrop.classList.remove('show');authBackdrop.setAttribute('aria-hidden','true')} if(openAuthBtn)openAuthBtn.onclick=openAuth;if(openAuthBtn2)openAuthBtn2.onclick=openAuth;if(closeAuthBtn)closeAuthBtn.onclick=closeAuth;if(authBackdrop)authBackdrop.addEventListener('click',e=>{if(e.target===authBackdrop)closeAuth()}); window.addEventListener('keydown',e=>{if(e.key==='Escape')closeAuth()}); function bindPlans(){document.querySelectorAll('.plan').forEach(p=>p.onclick=()=>{document.querySelectorAll('.plan').forEach(x=>x.classList.remove('active'));p.classList.add('active');selectedPlan=p.dataset.plan;signupResult.innerHTML='Plano selecionado: '+selectedPlan.toUpperCase()+'';});} bindPlans(); if(signupBtn)signupBtn.onclick=async()=>{const email=signupEmail.value.trim(); if(!email){signupResult.innerHTML='Digite um email para continuar.';return;} showLog('SAAS','criando conta automática para '+email,'cyan'); const res=await fetch(API+'/api/auth/signup',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({email,plan:selectedPlan,provider:'email'})}); const data=await res.json(); if(!res.ok||!data.ok){signupResult.innerHTML=''+(data.error||'Falha no cadastro')+''; return;} signupResult.innerHTML='Conta criada: '+data.user.email+'
Plano: '+data.user.plan+'
Token demo: '+data.token; showLog('SAAS','conta criada no plano '+data.user.plan,'green'); closeAuth();}; document.querySelectorAll('.oauth').forEach(btn=>btn.onclick=async()=>{const provider=btn.dataset.provider; const email=(signupEmail.value.trim()||('operator+'+provider+'@visioncore.local')); const res=await fetch(API+'/api/auth/signup',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({email,plan:selectedPlan,provider})}); const data=await res.json(); signupResult.innerHTML=data.ok?('Login '+provider+' conectado
'+data.user.email+' • '+data.user.plan):(''+data.error+''); if(data.ok){showLog('SAAS','login social '+provider+' criou usuário FREE automático','green'); closeAuth();}}); function maskKey(k){if(!k)return 'empty';return k.length<=8?'....':k.slice(0,4)+'......'+k.slice(-4)} document.querySelectorAll('.provider').forEach(btn=>btn.onclick=()=>{document.querySelectorAll('.provider').forEach(x=>x.classList.remove('active'));btn.classList.add('active'); if(window.aiProviderSelect) aiProviderSelect.value=btn.dataset.provider;}); if(window.aiProviderSelect){aiProviderSelect.onchange=()=>{document.querySelectorAll('.provider').forEach(x=>x.classList.toggle('active',x.dataset.provider===aiProviderSelect.value));};} if(window.saveAiProviderBtn){saveAiProviderBtn.onclick=async()=>{const payload={provider:aiProviderSelect.value,api_key:aiApiKey.value.trim(),model:aiModel.value.trim(),priority:aiPriority.value}; if(!payload.api_key){aiProviderStatus.innerHTML='Cole uma API key para salvar.';return;} try{const res=await fetch(API+'/api/ai/providers/save',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)}); const data=await res.json(); aiProviderStatus.innerHTML=data.ok?('Provider salvo: '+data.provider+' - '+data.model+' - key '+data.masked_key):(''+(data.error||'falha')+''); showLog('AI API','provider '+payload.provider+' salvo como '+payload.priority,'green');}catch(e){aiProviderStatus.innerHTML='Modo estatico: '+payload.provider+' configurado localmente - key '+maskKey(payload.api_key)+''; showLog('AI API','provider local salvo em UI demo','yellow');}}} if(window.testAiProviderBtn){testAiProviderBtn.onclick=()=>{const p=aiProviderSelect.value; aiProviderStatus.innerHTML='Teste mock OK: '+p+' pronto para roteamento inteligente.'; showLog('AI API','teste mock OK para '+p,'cyan')}} githubStatusBtn.onclick=checkGithub; policyBtn.onclick=async()=>{const d=await api('/api/github/automerge-policy'); githubResult.innerHTML='Auto-merge: '+d.default+'
Required: '+d.required.join(', ')}; githubPrBtn.onclick=async()=>{setRuntimeState('analyzing');showLog('GITHUB','criando PR com PASS GOLD...','cyan');const stamp=new Date().toISOString();const res=await fetch(API+'/api/github/create-pr',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({pass_gold:true,title:'VISION CORE V2.3.4 MARKET READY patch',message:'chore(vision-core): validate V2.3.4 static hardened',changes:[{path:'VISION_CORE_V9_5_1_PROOF.md',content:'# VISION CORE V2.3.4\n\nPASS GOLD confirmado em '+stamp+'\n\nFront V2.3.4 HARDENED REAL-TIME.\n'}]})});const data=await res.json();if(!res.ok||!data.ok){githubResult.innerHTML=`${data.message||data.error||'Falha ao criar PR'}`;showLog('GITHUB',data.message||'Falha ao criar PR','red');setRuntimeState('stable');return}githubResult.innerHTML=`PR criado: ${data.pr_url}
Vault: ${data.vault_manifest}`;showLog('GITHUB','PR criado com sucesso','green');setRuntimeState('stable')}; diffBtn.onclick=async()=>{const d=await api('/api/diff/preview',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({path:'README.md',before:'VISION CORE V9.4',after:'VISION CORE V2.3.4 MARKET READY\nV2.3.4 HARDENED REAL-TIME'})});diffViewer.textContent=d.patch;showLog('DIFF','preview gerado')}; executeBtn.onclick=async()=>{ const mission=(missionText.value.trim()||"diagnosticar runtime do projeto"); const project=(projectSelector&&projectSelector.value)||"technetgame"; const mode=(window.runMode&&runMode.value)||"dry-run"; showLog("MISSION","iniciando "+mode+" em "+project,"cyan"); setRuntimeState("analyzing"); try{ const res=await fetch(API+"/api/missions/run-live",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({project_id:project,error:mission,dry_run:mode==="dry-run",mode})}); const data=await res.json(); if(!res.ok||!data.ok){showLog("MISSION",data.error||"falha ao executar missão","red");setRuntimeState("stable");return;} const mid=data.id||data.mission_id||(data.result&&data.result.id); showLog("MISSION","missão concluída: "+(mid||"sem id"),"green"); const steps=data.timeline||((data.result&&data.result.timeline)||[]); steps.forEach(x=>showLog(x.status||"STEP",(x.step||"")+" "+(x.detail||""),x.status==="fail"?"red":x.status==="running"?"yellow":"green")); if(mid) await loadMissionPoll(mid); await loadTimeline(); await loadScore(); }catch(e){showLog("MISSION","erro de conexão: "+e.message,"red");} setRuntimeState("stable"); }; async function loadMissionPoll(mid){try{const d=await api("/api/missions/"+mid+"/poll?since=0");(d.steps||[]).forEach(x=>showLog("LIVE",x.step+" • "+(x.detail||""),x.status==="fail"?"red":x.status==="running"?"yellow":"green"));}catch{}} enqueueBtn.onclick=enqueueMission;workerRefreshBtn.onclick=loadWorkers; downloadLogsBtn.onclick=()=>{window.location.href=API+'/api/logs/download'}; loadTimeline().catch(()=>showLog('TIMELINE','backend offline ou CORS','yellow')); loadScore().catch(()=>showLog('SCORE','backend offline ou CORS','yellow')); loadMetrics().catch(()=>showLog('METRICS','backend offline ou CORS','yellow')); loadVotes().catch(()=>showLog('HERMES','backend offline ou CORS','yellow')); loadProjects().catch(()=>showLog('PROJECTS','backend offline ou CORS','yellow')); loadWorkers().catch(()=>showLog('WORKERS','backend offline ou CORS','yellow')); loadTools().catch(()=>showLog('TOOLS','backend offline ou CORS','yellow')); loadPlans().catch(()=>showLog('SAAS','plans offline ou CORS','yellow')); checkGithub().catch(()=>showLog('GITHUB','backend offline ou CORS','yellow')); // ── MISSION CONTROL ORB — V2.0 ───────────────────────────────────────── (function initMissionControlOrb(){ const TOOLTIPS = { openclaw: 'OpenClaw: interpreta, classifica e roteia a missão.', hermes: 'Hermes: diagnóstico e root cause. Exige scanResult válido.', metrics: 'Harness Metrics: observa performance do pipeline em tempo real.', memory: 'Memory: aprende só com PASS GOLD confirmado.', benchmark: 'Benchmark: valida qualidade dos agentes ao longo do tempo.', opensquad: 'OpenSquad: escala agentes reserva quando necessário.', aegis: 'Aegis: protege — sem Aegis OK nada continua.', }; const NODE_COLORS = { openclaw:'#a855f7', hermes:'#a855f7', metrics:'#22d3ee', memory:'#22d3ee', benchmark:'#facc15', opensquad:'#22c55e', aegis:'#22d3ee', }; const tooltip = document.getElementById('mcTooltip'); const coreEl = document.getElementById('mcCore'); const coreStatus = document.getElementById('mcCoreStatus'); const coreSub = document.getElementById('mcCoreSub'); // Hover nos nós document.querySelectorAll('.mc-node').forEach(node => { const key = node.dataset.key; const icon = node.querySelector('.mc-node-icon'); const color = NODE_COLORS[key] || '#a855f7'; node.addEventListener('mouseenter', e => { tooltip.textContent = TOOLTIPS[key] || key; tooltip.style.color = color; tooltip.style.borderColor = color + '60'; const r = node.getBoundingClientRect(); const wrap = node.closest('.mc-orb-wrap').getBoundingClientRect(); let left = r.left - wrap.left + 15; let top = r.top - wrap.top - 36; if (left + 180 > wrap.width) left = wrap.width - 186; if (top < 0) top = r.bottom - wrap.top + 4; tooltip.style.left = left + 'px'; tooltip.style.top = top + 'px'; tooltip.classList.add('visible'); }); node.addEventListener('mouseleave', () => tooltip.classList.remove('visible')); }); // Atualizar orb com estado da missão function updateOrb(state) { coreEl.className = 'mc-core ' + (state || ''); const states = { running:'RUNNING', blocked:'BLOCKED', success:'PASS GOLD', '':'READY' }; const subs = { running:'EXECUTANDO', blocked:'BLOQUEADO', success:'VALIDADO', '':'VISION CORE' }; coreStatus.textContent = states[state] || 'READY'; coreSub.textContent = subs[state] || 'VISION CORE'; } // Observer: sincronizar orb com estado do runtime const obs = new MutationObserver(() => { const rm = document.getElementById('runtimeMonitor'); if (!rm) return; if (rm.classList.contains('analyzing')) updateOrb('running'); else updateOrb(''); }); const rm = document.getElementById('runtimeMonitor'); if (rm) obs.observe(rm, { attributes: true }); // Tabs document.querySelectorAll('.mc-tab').forEach(tab => { tab.addEventListener('click', () => { document.querySelectorAll('.mc-tab').forEach(t => t.classList.remove('active')); document.querySelectorAll('.mc-tab-pane').forEach(p => p.classList.remove('active')); tab.classList.add('active'); const pane = document.getElementById('mc-tab-' + tab.dataset.tab); if (pane) pane.classList.add('active'); }); }); // Métricas ao vivo — atualizar barras com harness metrics se disponível async function updateMcMetrics() { try { const r = await fetch(API + '/api/runtime/harness-stats'); if (!r.ok) return; const d = await r.json(); if (!d.ok) return; const grid = document.getElementById('mcMetricsGrid'); const cost = document.getElementById('mcTotalCost'); // Atualizar com dados reais se disponível if (d.avg_tokens) { const bar = grid.querySelector('.mc-metric-bar'); if (bar) bar.style.width = Math.min(100, d.pass_gold_rate || 82) + '%'; } if (d.total) cost.textContent = d.total + ' runs'; } catch { /* backend offline — manter demo */ } } // Pulsar nó benchmark quando PASS GOLD chegar function pulseNode(key) { const node = document.querySelector(`.mc-node[data-key="${key}"]`); if (!node) return; node.querySelector('.mc-node-icon').style.boxShadow = '0 0 28px ' + (NODE_COLORS[key]||'#a855f7'); setTimeout(() => node.querySelector('.mc-node-icon').style.boxShadow = '', 1200); } // Monitorar logs para animar o orb const logsBox = document.getElementById('logsBox'); if (logsBox) { const logObs = new MutationObserver(() => { const text = logsBox.textContent.toLowerCase(); if (text.includes('pass gold') || text.includes('pass_gold')) { updateOrb('success'); pulseNode('benchmark'); setTimeout(() => updateOrb(''), 3000); } else if (text.includes('aegis') && text.includes('bloqueou')) { updateOrb('blocked'); pulseNode('aegis'); setTimeout(() => updateOrb(''), 2500); } else if (text.includes('hermes') || text.includes('rca')) { pulseNode('hermes'); } else if (text.includes('scanner') || text.includes('scan')) { pulseNode('openclaw'); } }); logObs.observe(logsBox, { childList: true, subtree: true }); } setInterval(updateMcMetrics, 8000); updateMcMetrics(); })(); // fim initMissionControlOrb