SIMON Master Console Rebuild
True command center for SIMON + WEB360
This rebuild gives you a cleaner production spine: interactive tree, live viewer, guarded editor, dynamic graphics, architecture map, and note storage. It is designed to sit beside your existing
console.php
and become the stronger replacement path.
Dashboard
Tree
Viewer
System Map
File Registry
Notes
Files
15,026
Folders
377
Scanned Size
3.79 GB
PHP Files
791
Editable Text Files
12,310
File viewer
guarded to /htdocs
/downloads/si1.php
<?php declare(strict_types=1); date_default_timezone_set('UTC'); /* SIMON LIVE CORE - Single-file PHP multi-provider broker - Real Duck live search - Live-ready Google / SearXNG / GitHub / Hugging Face / OpenAI connectors - Honest scoring: weak confidence if only one source returns - 5W1H + Meta + Truth + Health + Time + Event - Images shown when available */ function h($v): string { return htmlspecialchars((string)$v, ENT_QUOTES, 'UTF-8'); } function envv(string $key, string $default = ''): string { $v = getenv($key); return $v === false ? $default : $v; } function now_iso(): string { return gmdate('c'); } $SETTINGS = [ 'system' => [ 'name' => 'SIMON', 'version' => '2.2', 'environment' => envv('APP_ENV', 'development'), 'debug' => envv('APP_DEBUG', 'true') === 'true', 'timeout' => 12, 'connect_timeout' => 4, 'max_results_per_provider' => 5, ], 'providers' => [ 'local' => [ 'enabled' => true, 'live' => true, 'label' => 'Local Registry', 'type' => 'knowledge', 'trust' => 0.95, ], 'duck' => [ 'enabled' => true, 'live' => true, 'label' => 'DuckDuckGo', 'type' => 'search', 'trust' => 0.82, 'base_url' => 'https://api.duckduckgo.com/', ], 'google' => [ 'enabled' => envv('GOOGLE_API_KEY') !== '' && envv('GOOGLE_CSE_ID') !== '', 'live' => envv('GOOGLE_API_KEY') !== '' && envv('GOOGLE_CSE_ID') !== '', 'label' => 'Google API', 'type' => 'search', 'trust' => 0.91, 'base_url' => 'https://www.googleapis.com/customsearch/v1', 'api_key' => envv('GOOGLE_API_KEY'), 'cx' => envv('GOOGLE_CSE_ID'), ], 'searxng' => [ 'enabled' => true, 'live' => true, 'label' => 'SearXNG', 'type' => 'meta_search', 'trust' => 0.84, 'base_url' => 'https://searx.be', ], 'github' => [ 'enabled' => envv('GITHUB_TOKEN') !== '', 'live' => envv('GITHUB_TOKEN') !== '', 'label' => 'GitHub', 'type' => 'code', 'trust' => 0.90, 'base_url' => 'https://api.github.com/search/repositories', 'token' => envv('GITHUB_TOKEN'), ], 'huggingface' => [ 'enabled' => envv('HUGGINGFACE_TOKEN') !== '', 'live' => envv('HUGGINGFACE_TOKEN') !== '', 'label' => 'Hugging Face', 'type' => 'model', 'trust' => 0.88, 'base_url' => 'https://huggingface.co/api/models', 'token' => envv('HUGGINGFACE_TOKEN'), ], 'openai' => [ 'enabled' => envv('OPENAI_API_KEY') !== '', 'live' => envv('OPENAI_API_KEY') !== '', 'label' => 'OpenAI', 'type' => 'enrichment', 'trust' => 0.93, 'base_url' => 'https://api.openai.com/v1/responses', 'api_key' => envv('OPENAI_API_KEY'), 'model' => envv('OPENAI_MODEL', 'gpt-5'), ], ], ]; function provider_config(string $slug): ?array { global $SETTINGS; return $SETTINGS['providers'][$slug] ?? null; } function provider_registry(): array { global $SETTINGS; return $SETTINGS['providers']; } function http_json(string $url, array $headers = [], int $timeout = 12): array { $defaultHeaders = [ 'Accept: application/json', 'User-Agent: SIMON/2.2' ]; $headers = array_merge($defaultHeaders, $headers); if (function_exists('curl_init')) { $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_CONNECTTIMEOUT => 4, CURLOPT_TIMEOUT => $timeout, CURLOPT_HTTPHEADER => $headers, ]); $body = curl_exec($ch); $code = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE); $err = curl_error($ch); curl_close($ch); if ($body === false || $body === null || $body === '') { return ['ok' => false, 'status' => $code, 'error' => $err ?: 'empty_response', 'data' => null]; } $json = json_decode($body, true); return ['ok' => is_array($json), 'status' => $code, 'error' => is_array($json) ? null : 'invalid_json', 'data' => $json]; } $context = stream_context_create([ 'http' => [ 'method' => 'GET', 'timeout' => $timeout, 'header' => implode("\r\n", $headers), ] ]); $body = @file_get_contents($url, false, $context); if ($body === false) { return ['ok' => false, 'status' => 0, 'error' => 'request_failed', 'data' => null]; } $json = json_decode($body, true); return ['ok' => is_array($json), 'status' => 200, 'error' => is_array($json) ? null : 'invalid_json', 'data' => $json]; } function local_seed(string $query): array { $q = strtolower(trim($query)); $map = [ 'hello' => [[ 'title' => 'Hello', 'summary' => 'Hello is a salutation or greeting in the English language. It is first attested in writing from 1826.', 'url' => 'https://en.wikipedia.org/wiki/Hello', 'provider' => 'local', 'category' => 'knowledge', 'source_domain' => 'wikipedia.org', 'metadata' => [ 'title' => 'Hello - Wikipedia', 'h1' => 'Hello', 'canonical' => 'https://en.wikipedia.org/wiki/Hello', 'first_paragraph' => 'Hello is a salutation or greeting in the English language.', 'image' => 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Hello_icon.svg/320px-Hello_icon.svg.png', 'published_at' => null, ], ]], 'bill' => [[ 'title' => 'Bill', 'summary' => 'Bill is a common masculine given name and can also refer to an invoice, statement of charges, or proposed law.', 'url' => 'https://en.wikipedia.org/wiki/Bill', 'provider' => 'local', 'category' => 'knowledge', 'source_domain' => 'wikipedia.org', 'metadata' => [ 'title' => 'Bill - Wikipedia', 'h1' => 'Bill', 'canonical' => 'https://en.wikipedia.org/wiki/Bill', 'first_paragraph' => 'Bill is a common masculine given name and also refers to several other concepts.', 'image' => null, 'published_at' => null, ], ]], 'php' => [[ 'title' => 'PHP', 'summary' => 'PHP is a general-purpose scripting language geared toward web development.', 'url' => 'https://www.php.net/', 'provider' => 'local', 'category' => 'language', 'source_domain' => 'php.net', 'metadata' => [ 'title' => 'PHP', 'h1' => 'PHP', 'canonical' => 'https://www.php.net/', 'first_paragraph' => 'PHP is a popular general-purpose scripting language.', 'image' => null, 'published_at' => null, ], ]], ]; foreach ($map as $key => $items) { if (str_contains($q, $key)) return $items; } return [[ 'title' => ucfirst(trim($query) ?: 'Unknown'), 'summary' => 'No exact internal match was found. This local fallback exists to keep the broker stable when external providers return nothing.', 'url' => '#local', 'provider' => 'local', 'category' => 'fallback', 'source_domain' => 'local', 'metadata' => [ 'title' => ucfirst(trim($query) ?: 'Unknown') . ' - Local', 'h1' => ucfirst(trim($query) ?: 'Unknown'), 'canonical' => '#local', 'first_paragraph' => 'Local fallback result.', 'image' => null, 'published_at' => null, ], ]]; } function search_local(string $query): array { return local_seed($query); } function search_duck(string $query): array { $cfg = provider_config('duck'); $url = $cfg['base_url'] . '?q=' . rawurlencode($query) . '&format=json&no_redirect=1&no_html=1&skip_disambig=0'; $resp = http_json($url, [], 8); if (!$resp['ok'] || !is_array($resp['data'])) return []; $data = $resp['data']; $results = []; if (!empty($data['Heading']) || !empty($data['AbstractText'])) { $results[] = [ 'title' => $data['Heading'] ?: ucfirst($query), 'summary' => $data['AbstractText'] ?: 'DuckDuckGo returned a heading without an abstract.', 'url' => $data['AbstractURL'] ?? ('https://duckduckgo.com/?q=' . rawurlencode($query)), 'provider' => 'duck', 'category' => 'instant_answer', 'source_domain' => parse_url((string)($data['AbstractURL'] ?? 'https://duckduckgo.com'), PHP_URL_HOST) ?: 'duckduckgo.com', 'metadata' => [ 'title' => $data['Heading'] ?: ucfirst($query), 'h1' => $data['Heading'] ?: ucfirst($query), 'canonical' => $data['AbstractURL'] ?? ('https://duckduckgo.com/?q=' . rawurlencode($query)), 'first_paragraph' => $data['AbstractText'] ?? '', 'image' => !empty($data['Image']) ? $data['Image'] : null, 'published_at' => null, ], ]; } $topics = $data['RelatedTopics'] ?? []; foreach ($topics as $topic) { if (count($results) >= 4) break; if (isset($topic['Topics']) && is_array($topic['Topics'])) { foreach ($topic['Topics'] as $sub) { if (count($results) >= 4) break; if (!empty($sub['Text'])) { $parts = explode(' - ', (string)$sub['Text'], 2); $results[] = [ 'title' => $parts[0] ?? 'Related Result', 'summary' => $sub['Text'], 'url' => $sub['FirstURL'] ?? ('https://duckduckgo.com/?q=' . rawurlencode($query)), 'provider' => 'duck', 'category' => 'related_topic', 'source_domain' => parse_url((string)($sub['FirstURL'] ?? 'https://duckduckgo.com'), PHP_URL_HOST) ?: 'duckduckgo.com', 'metadata' => [ 'title' => $parts[0] ?? 'Related Result', 'h1' => $parts[0] ?? 'Related Result', 'canonical' => $sub['FirstURL'] ?? ('https://duckduckgo.com/?q=' . rawurlencode($query)), 'first_paragraph' => $sub['Text'], 'image' => !empty($sub['Icon']['URL']) ? 'https://duckduckgo.com' . $sub['Icon']['URL'] : null, 'published_at' => null, ], ]; } } } elseif (!empty($topic['Text'])) { $parts = explode(' - ', (string)$topic['Text'], 2); $results[] = [ 'title' => $parts[0] ?? 'Related Result', 'summary' => $topic['Text'], 'url' => $topic['FirstURL'] ?? ('https://duckduckgo.com/?q=' . rawurlencode($query)), 'provider' => 'duck', 'category' => 'related_topic', 'source_domain' => parse_url((string)($topic['FirstURL'] ?? 'https://duckduckgo.com'), PHP_URL_HOST) ?: 'duckduckgo.com', 'metadata' => [ 'title' => $parts[0] ?? 'Related Result', 'h1' => $parts[0] ?? 'Related Result', 'canonical' => $topic['FirstURL'] ?? ('https://duckduckgo.com/?q=' . rawurlencode($query)), 'first_paragraph' => $topic['Text'], 'image' => !empty($topic['Icon']['URL']) ? 'https://duckduckgo.com' . $topic['Icon']['URL'] : null, 'published_at' => null, ], ]; } } return $results; } function search_google(string $query): array { $cfg = provider_config('google'); if (!$cfg || !$cfg['live']) return []; $url = $cfg['base_url'] . '?key=' . rawurlencode($cfg['api_key']) . '&cx=' . rawurlencode($cfg['cx']) . '&q=' . rawurlencode($query) . '&num=5'; $resp = http_json($url, [], 8); if (!$resp['ok'] || empty($resp['data']['items'])) return []; $results = []; foreach ($resp['data']['items'] as $item) { $results[] = [ 'title' => $item['title'] ?? ucfirst($query), 'summary' => $item['snippet'] ?? '', 'url' => $item['link'] ?? '#', 'provider' => 'google', 'category' => 'search_result', 'source_domain' => parse_url((string)($item['link'] ?? ''), PHP_URL_HOST) ?: 'google.com', 'metadata' => [ 'title' => $item['title'] ?? ucfirst($query), 'h1' => $item['title'] ?? ucfirst($query), 'canonical' => $item['link'] ?? '#', 'first_paragraph' => $item['snippet'] ?? '', 'image' => $item['pagemap']['cse_image'][0]['src'] ?? null, 'published_at' => null, ], ]; } return $results; } function search_searxng(string $query): array { $cfg = provider_config('searxng'); if (!$cfg || !$cfg['live']) return []; $base = rtrim((string)$cfg['base_url'], '/'); $url = $base . (str_contains($base, '/search') ? '' : '/search') . '?q=' . rawurlencode($query) . '&format=json'; $resp = http_json($url, [], 8); if (!$resp['ok'] || empty($resp['data']['results'])) return []; $results = []; foreach (array_slice($resp['data']['results'], 0, 5) as $item) { $results[] = [ 'title' => $item['title'] ?? ucfirst($query), 'summary' => $item['content'] ?? '', 'url' => $item['url'] ?? '#', 'provider' => 'searxng', 'category' => 'search_result', 'source_domain' => parse_url((string)($item['url'] ?? ''), PHP_URL_HOST) ?: 'unknown', 'metadata' => [ 'title' => $item['title'] ?? ucfirst($query), 'h1' => $item['title'] ?? ucfirst($query), 'canonical' => $item['url'] ?? '#', 'first_paragraph' => $item['content'] ?? '', 'image' => $item['thumbnail'] ?? null, 'published_at' => $item['publishedDate'] ?? null, ], ]; } return $results; } function search_github(string $query): array { $cfg = provider_config('github'); if (!$cfg || !$cfg['live']) return []; $url = $cfg['base_url'] . '?q=' . rawurlencode($query) . '&per_page=5'; $headers = [ 'Authorization: Bearer ' . $cfg['token'], 'X-GitHub-Api-Version: 2022-11-28', 'Accept: application/vnd.github+json', ]; $resp = http_json($url, $headers, 8); if (!$resp['ok'] || empty($resp['data']['items'])) return []; $results = []; foreach ($resp['data']['items'] as $item) { $results[] = [ 'title' => $item['full_name'] ?? ucfirst($query), 'summary' => $item['description'] ?? 'GitHub repository result.', 'url' => $item['html_url'] ?? '#', 'provider' => 'github', 'category' => 'repository', 'source_domain' => 'github.com', 'metadata' => [ 'title' => $item['full_name'] ?? ucfirst($query), 'h1' => $item['name'] ?? ($item['full_name'] ?? ucfirst($query)), 'canonical' => $item['html_url'] ?? '#', 'first_paragraph' => $item['description'] ?? '', 'image' => $item['owner']['avatar_url'] ?? null, 'published_at' => $item['updated_at'] ?? null, ], ]; } return $results; } function search_huggingface(string $query): array { $cfg = provider_config('huggingface'); if (!$cfg || !$cfg['live']) return []; $url = $cfg['base_url'] . '?search=' . rawurlencode($query) . '&limit=5&full=true'; $headers = ['Authorization: Bearer ' . $cfg['token']]; $resp = http_json($url, $headers, 8); if (!$resp['ok'] || !is_array($resp['data'])) return []; $results = []; foreach (array_slice($resp['data'], 0, 5) as $item) { $modelId = $item['id'] ?? $item['modelId'] ?? ucfirst($query); $results[] = [ 'title' => $modelId, 'summary' => 'Pipeline: ' . ($item['pipeline_tag'] ?? 'unknown') . ' • Downloads: ' . ($item['downloads'] ?? 0), 'url' => 'https://huggingface.co/' . rawurlencode($modelId), 'provider' => 'huggingface', 'category' => 'model', 'source_domain' => 'huggingface.co', 'metadata' => [ 'title' => $modelId, 'h1' => $modelId, 'canonical' => 'https://huggingface.co/' . rawurlencode($modelId), 'first_paragraph' => $item['description'] ?? '', 'image' => null, 'published_at' => $item['lastModified'] ?? null, ], ]; } return $results; } function search_openai(string $query): array { return []; } function infer_subject(array $result, string $query): array { $text = strtolower(($result['title'] ?? '') . ' ' . ($result['summary'] ?? '') . ' ' . ($result['metadata']['first_paragraph'] ?? '')); $who = 'Entity / Subject'; if (preg_match('/greeting|salutation|hello|farewell/', $text)) $who = 'Greeting / Language Term'; elseif (preg_match('/president|politician|lawyer|born|person/', $text)) $who = 'Person'; elseif (preg_match('/programming language|scripting language|language/', $text)) $who = 'Programming Language'; elseif (preg_match('/repository|repo|package|library|github/', $text)) $who = 'Software / Repository'; elseif (preg_match('/model|inference|embedding|transformer/', $text)) $who = 'AI Model / ML Artifact'; $where = 'Unknown'; if (preg_match('/english language/', $text)) $where = 'English language'; elseif (!empty($result['source_domain'])) $where = $result['source_domain']; $when = 'Not time-specific'; if (!empty($result['metadata']['published_at'])) $when = (string)$result['metadata']['published_at']; elseif (preg_match('/\b(18\d{2}|19\d{2}|20\d{2})\b/', $text, $m)) $when = $m[1]; return [ 'who' => $who, 'what' => $result['title'] ?? trim($query), 'when' => $when, 'where' => $where, 'why' => 'Derived from query intent, provider summary, and metadata', 'how' => 'provider lookup, normalization, subject classification, and SIMON scoring', ]; } function compute_truth(array $result, int $sourceCount): array { $score = 0.34; $makeTrue = []; $makeFalse = []; if (!empty($result['url']) && !str_starts_with((string)$result['url'], '#')) { $score += 0.14; $makeTrue[] = 'Result includes a navigable source URL'; } else { $score -= 0.08; $makeFalse[] = 'Result has no external navigable source URL'; } if (!empty($result['summary']) && strlen((string)$result['summary']) > 60) { $score += 0.14; $makeTrue[] = 'Summary is descriptive enough for extraction'; } else { $score -= 0.07; $makeFalse[] = 'Summary is weak or too short'; } if (!empty($result['metadata']['title'])) { $score += 0.07; $makeTrue[] = 'Metadata title is available'; } if (!empty($result['metadata']['image'])) { $score += 0.04; $makeTrue[] = 'Image metadata is available'; } $domain = strtolower((string)($result['source_domain'] ?? '')); if (str_contains($domain, 'wikipedia') || str_contains($domain, 'php.net') || str_contains($domain, 'github.com') || str_contains($domain, 'huggingface.co')) { $score += 0.08; $makeTrue[] = 'Source domain is recognized'; } if ($domain === 'local') { $score += 0.03; $makeTrue[] = 'Local registry fallback exists'; } if ($sourceCount <= 1) { $score -= 0.22; $makeFalse[] = 'Only one provider returned a result'; } elseif ($sourceCount === 2) { $score -= 0.08; $makeFalse[] = 'Provider coverage is still thin'; } else { $score += 0.08; $makeTrue[] = 'Multiple providers contributed results'; } $score = max(0.05, min(0.99, $score)); $state = $score >= 0.80 ? 'true' : ($score >= 0.62 ? 'probable' : 'review'); return [ 'state' => $state, 'score' => round($score, 2), 'makeTrue' => $makeTrue, 'makeFalse' => $makeFalse, ]; } function compute_health(array $result, array $truth, int $sourceCount): array { $confidence = round(max(0.20, min(0.99, $truth['score'] + 0.05)), 2); $ambiguity = 0.24; if (($result['category'] ?? '') === 'related_topic') $ambiguity = 0.36; if (($result['source_domain'] ?? '') === 'local') $ambiguity = max($ambiguity, 0.30); if ($sourceCount <= 1) $ambiguity = max($ambiguity, 0.42); $completeness = round(min(0.98, max(0.10, $sourceCount / 6)), 2); if (!empty($result['metadata']['image'])) $completeness = min(0.98, round($completeness + 0.08, 2)); if (!empty($result['metadata']['first_paragraph'])) $completeness = min(0.98, round($completeness + 0.06, 2)); $risk = round(max(0.05, min(0.95, 1 - (($confidence * 0.60) + ($completeness * 0.40)))), 2); $score = round(max(0.05, min(0.99, (($confidence * 0.45) + ($completeness * 0.35) + ((1 - $ambiguity) * 0.20)) - ($risk * 0.10))), 2); return [ 'confidence' => $confidence, 'completeness' => $completeness, 'ambiguity' => round($ambiguity, 2), 'risk' => $risk, 'score' => $score, ]; } function build_event(string $query, array $selected, int $resultCount, int $providerCount, float $latencyMs): array { return [ 'id' => substr(md5($query . '|' . now_iso()), 0, 16), 'what' => $query, 'when' => now_iso(), 'latencyMs' => (int) round($latencyMs), 'results' => $resultCount, 'providerHits' => $providerCount, 'health' => $selected['health_model'], 'truth' => [ 'consensus' => $providerCount <= 1 ? max(0.20, round($selected['truth_model']['score'] - 0.20, 2)) : $selected['truth_model']['score'], 'truthScore' => $selected['truth_model']['score'], ], 'meta' => [ 'provider' => $selected['provider'], 'providerLabel' => $selected['provider_label'], 'sourceDomain' => $selected['source_domain'] ?? null, 'image' => $selected['metadata']['image'] ?? null, ], 'subject' => $selected['subject'], ]; } function execute_search(string $query, string $providerChoice): array { $start = microtime(true); $providers = $providerChoice === 'auto' ? array_keys(provider_registry()) : [$providerChoice]; $rawResults = []; $providerHits = []; foreach ($providers as $provider) { $cfg = provider_config($provider); if (!$cfg || empty($cfg['enabled'])) continue; $fn = 'search_' . $provider; if (!function_exists($fn)) continue; $items = $fn($query); if (!empty($items)) $providerHits[$provider] = true; foreach ($items as $item) { $item['provider_label'] = $cfg['label']; $rawResults[] = $item; } } if (!$rawResults) { $rawResults = search_local($query); $providerHits['local'] = true; foreach ($rawResults as &$r) { $r['provider_label'] = provider_config('local')['label']; } } $sourceCount = count($providerHits); $results = []; foreach ($rawResults as $r) { $subject = infer_subject($r, $query); $truth = compute_truth($r, $sourceCount); $health = compute_health($r, $truth, $sourceCount); $trust = (float)(provider_config($r['provider'])['trust'] ?? 0.70); $relevance = round(min(0.99, max(0.10, ($health['score'] * 0.55) + ($truth['score'] * 0.25) + ($trust * 0.20))), 2); $statusUI = $relevance >= 0.80 ? 'connected' : ($relevance >= 0.62 ? 'pending' : 'review'); $r['subject'] = $subject; $r['truth_model'] = $truth; $r['health_model'] = $health; $r['relevance_score'] = $relevance; $r['status_ui'] = $statusUI; $results[] = $r; } usort($results, fn($a, $b) => $b['relevance_score'] <=> $a['relevance_score']); $latencyMs = (microtime(true) - $start) * 1000.0; return [$results, $latencyMs, $sourceCount]; } function status_class(string $status): string { return match ($status) { 'connected' => 'status-connected', 'pending' => 'status-pending', default => 'status-review', }; } $question = isset($_POST['question']) ? trim((string)$_POST['question']) : (isset($_GET['q']) ? trim((string)$_GET['q']) : 'bill'); $providerChoice = isset($_POST['provider']) ? trim((string)$_POST['provider']) : 'auto'; $selectedId = isset($_POST['selected_id']) ? trim((string)$_POST['selected_id']) : 'res_1'; [$results, $latencyMs, $providerHitCount] = execute_search($question, $providerChoice); $resultCount = count($results); $selectedIndex = max(0, min(max(0, $resultCount - 1), ((int)str_replace('res_', '', $selectedId)) - 1)); $selected = $results[$selectedIndex] ?? ($results[0] ?? null); $connectedCount = count(array_filter($results, fn($r) => $r['status_ui'] === 'connected')); $pendingCount = count(array_filter($results, fn($r) => $r['status_ui'] === 'pending')); $reviewCount = count(array_filter($results, fn($r) => $r['status_ui'] === 'review')); $event = $selected ? build_event($question, $selected, $resultCount, $providerHitCount, $latencyMs) : null; ?><!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>SIMON Live Core</title> <style> :root{ --bg:#07101f;--bg2:#030711;--panel:rgba(10,17,32,.94);--panel2:rgba(14,22,40,.95);--text:#eef7ff;--muted:#95a6c9; --cyan:#28e9ff;--green:#1ef2a6;--yellow:#ffcb47;--red:#ff5f74;--border:rgba(115,149,214,.18); --shadow:0 0 0 1px rgba(40,233,255,.08),0 14px 30px rgba(0,0,0,.38),0 0 24px rgba(40,233,255,.06);--radius:18px } *{box-sizing:border-box} html,body{min-height:100%} body{margin:0;color:var(--text);font-family:Inter,system-ui,sans-serif;background:radial-gradient(circle at top left,rgba(0,180,255,.10),transparent 26%),radial-gradient(circle at top right,rgba(0,255,180,.08),transparent 20%),linear-gradient(180deg,#02060d 0%,#040a15 32%,#07101f 100%)} .shell{display:grid;grid-template-columns:280px minmax(0,1fr) 420px;gap:18px;min-height:100vh;padding:18px} .panel{background:linear-gradient(180deg,rgba(13,21,40,.96),rgba(8,14,28,.96));border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden} .panel-inner{padding:18px}.sidebar,.details{position:sticky;top:18px;align-self:start;max-height:calc(100vh - 36px);overflow:auto} .brand{display:flex;gap:14px;align-items:center;padding:22px 18px 14px}.brand-mark{width:52px;height:52px;border-radius:16px;border:1px solid rgba(40,233,255,.35);display:grid;place-items:center;background:radial-gradient(circle at 50% 50%,rgba(40,233,255,.22),rgba(40,233,255,.05));box-shadow:0 0 20px rgba(40,233,255,.16);font-size:24px} .brand h1{margin:0;font-size:18px;line-height:1.1}.brand p{margin:6px 0 0;color:var(--muted);font-size:12px} .section-title{color:var(--muted);font-size:12px;letter-spacing:.12em;text-transform:uppercase;margin:0 0 12px} .input,.btn,.select{width:100%;border-radius:14px;border:1px solid var(--border);padding:14px 16px;background:rgba(8,15,30,.96);color:var(--text);outline:none} .btn{cursor:pointer;font-weight:700;background:linear-gradient(90deg,rgba(24,203,255,.95),rgba(31,244,170,.92));color:#051019} .filters{display:grid;gap:10px}.filter-item,.chip,.stat-card,.mini,.tab,.box,.source-btn{border:1px solid var(--border);background:rgba(255,255,255,.02);border-radius:14px} .filter-item,.source-btn{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;color:var(--text);text-decoration:none}.filter-item small,.source-btn small{color:var(--muted)} .content{display:grid;gap:16px;align-content:start} .topbar{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap}.topbar-left,.topbar-right{display:flex;gap:12px;align-items:center;flex-wrap:wrap} .stat-card{min-width:140px;padding:14px 16px;background:linear-gradient(180deg,rgba(14,26,50,.95),rgba(9,16,29,.95))}.stat-card .label{color:var(--muted);font-size:12px;text-transform:uppercase}.stat-card .value{margin-top:8px;font-size:28px;font-weight:800}.v-green{color:var(--green)}.v-yellow{color:var(--yellow)}.v-red{color:var(--red)}.v-cyan{color:var(--cyan)} .health-ring{width:92px;height:92px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--cyan) 0deg,var(--cyan) calc(3.6deg * var(--pct,0)),rgba(255,255,255,.06) 0deg);padding:8px}.health-ring-inner{width:100%;height:100%;border-radius:50%;display:grid;place-items:center;background:#091321;font-weight:700;font-size:18px} .search-row{display:grid;grid-template-columns:minmax(0,1fr) 180px 140px;gap:12px} .tabsbar{display:flex;gap:10px;flex-wrap:wrap}.chip{padding:10px 14px}.chip.active{color:var(--cyan);border-color:rgba(40,233,255,.35);box-shadow:inset 0 0 0 1px rgba(40,233,255,.18),0 0 12px rgba(40,233,255,.08)} .results-wrap{display:grid;gap:14px} .masonry{column-count:3;column-gap:16px} .card{display:inline-block;width:100%;margin:0 0 16px;border-radius:22px;border:1px solid rgba(73,126,220,.18);background:linear-gradient(180deg,rgba(11,20,38,.98),rgba(8,14,28,.98));box-shadow:var(--shadow);overflow:hidden;break-inside:avoid}.card.primary{border-color:rgba(40,233,255,.42)} .card-media{width:100%;height:180px;background:#0c1528;background-size:cover;background-position:center}.card-body{padding:16px;display:grid;gap:12px} .head{display:flex;justify-content:space-between;gap:12px;align-items:start}.title-wrap{display:flex;gap:12px;align-items:center}.icon{width:46px;height:46px;border-radius:14px;display:grid;place-items:center;font-size:18px;font-weight:800;color:#021018;background:linear-gradient(180deg,rgba(40,233,255,.92),rgba(31,244,170,.92))} .name{font-size:20px;font-weight:800;line-height:1.1}.sub{color:var(--muted);font-size:13px;line-height:1.5}.pill,.tag{border-radius:999px;padding:7px 11px;font-size:12px;border:1px solid var(--border);background:rgba(255,255,255,.03)}.status-connected{color:var(--green);border-color:rgba(30,242,166,.24);background:rgba(30,242,166,.08)}.status-pending{color:var(--yellow);border-color:rgba(255,203,71,.24);background:rgba(255,203,71,.08)}.status-review{color:var(--red);border-color:rgba(255,95,116,.24);background:rgba(255,95,116,.08)} .tags,.actions-row{display:flex;flex-wrap:wrap;gap:8px}.list{display:grid;gap:6px;color:var(--muted);font-size:13px}.list strong{color:var(--text)} .metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.metric{padding:12px 10px;text-align:center;border:1px solid var(--border);border-radius:12px;background:rgba(255,255,255,.02)}.metric .m-label{color:var(--muted);font-size:11px;text-transform:uppercase}.metric .m-value{margin-top:6px;font-size:17px;font-weight:800} .linkbtn{background:transparent;color:var(--cyan);border:1px solid rgba(40,233,255,.25);padding:10px 14px;border-radius:12px;text-decoration:none} .details-head{display:flex;justify-content:space-between;gap:10px;align-items:start;margin-bottom:16px}.details-title{font-size:26px;font-weight:800;margin:0}.tabs{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0 18px}.tab{padding:10px 12px;color:var(--muted)}.tab.active{color:var(--cyan);border-color:rgba(40,233,255,.32)} .block{background:rgba(255,255,255,.02);border:1px solid var(--border);border-radius:18px;padding:16px;margin-bottom:14px}.block h3{margin:0 0 12px;font-size:14px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.kv{display:grid;gap:10px}.row{display:grid;grid-template-columns:120px minmax(0,1fr);gap:10px;color:var(--muted);font-size:14px}.row .v{color:var(--text);word-break:break-word} .bar{width:100%;height:10px;border-radius:999px;background:rgba(255,255,255,.06);overflow:hidden;margin-top:10px}.bar>span{display:block;height:100%;background:linear-gradient(90deg,rgba(40,233,255,.96),rgba(31,244,170,.92))} .subcards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.mini{padding:14px}.mini .mini-label{color:var(--muted);font-size:11px;text-transform:uppercase}.mini .mini-value{margin-top:8px;font-size:18px;font-weight:700} .score-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.box{padding:14px}.box h4{margin:0 0 6px;font-size:12px;color:var(--muted);text-transform:uppercase}.box ul{margin:0;padding-left:18px}.box li{margin:4px 0;font-size:13px} .code{background:#050a14;border:1px solid var(--border);border-radius:16px;padding:14px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;line-height:1.5;color:#d8e7ff;overflow:auto;max-height:320px;white-space:pre-wrap} .preview{width:100%;border-radius:16px;border:1px solid var(--border);display:block;max-height:260px;object-fit:cover;background:#0d1628} .empty{padding:48px 28px;text-align:center;color:var(--muted);border:1px dashed rgba(115,149,214,.26);border-radius:24px;background:rgba(255,255,255,.015)} @media (max-width:1480px){.shell{grid-template-columns:250px minmax(0,1fr)}.details{grid-column:1/-1;position:static;max-height:none}.masonry{column-count:2}} @media (max-width:980px){.shell{grid-template-columns:1fr}.sidebar,.details{position:static;max-height:none}.search-row,.metrics,.subcards,.score-grid{grid-template-columns:1fr}.masonry{column-count:1}} </style> </head> <body> <div class="shell"> <aside class="panel sidebar"> <div class="brand"><div class="brand-mark">🔗</div><div><h1>SIMON<br>Live Core</h1><p>Source picker • Grid explorer • Inspector</p></div></div> <div class="panel-inner"> <p class="section-title">Query</p> <input class="input" value="<?php echo h($question); ?>" readonly> <div style="height:14px"></div> <div class="filters"> <div class="filter-item"><span>All Results</span><small><?php echo h((string)$resultCount); ?></small></div> <div class="filter-item"><span>Provider Hits</span><small><?php echo h((string)$providerHitCount); ?></small></div> <div class="filter-item"><span>Connected</span><small><?php echo h((string)$connectedCount); ?></small></div> <div class="filter-item"><span>Pending</span><small><?php echo h((string)$pendingCount); ?></small></div> <div class="filter-item"><span>Review</span><small><?php echo h((string)$reviewCount); ?></small></div> </div> <div style="height:18px"></div> <p class="section-title">Sources</p> <div class="filters"> <?php foreach (provider_registry() as $slug => $cfg): ?> <form method="post" style="margin:0;"> <input type="hidden" name="question" value="<?php echo h($question); ?>"> <input type="hidden" name="provider" value="<?php echo h($slug); ?>"> <button class="source-btn" type="submit" style="width:100%;cursor:pointer;<?php echo $providerChoice === $slug ? 'box-shadow:inset 0 0 0 1px rgba(40,233,255,.25);border-color:rgba(40,233,255,.35);' : ''; ?>"> <span><?php echo h($cfg['label']); ?></span> <small><?php echo !empty($cfg['live']) ? 'live' : 'off'; ?></small> </button> </form> <?php endforeach; ?> <form method="post" style="margin:0;"> <input type="hidden" name="question" value="<?php echo h($question); ?>"> <input type="hidden" name="provider" value="auto"> <button class="source-btn" type="submit" style="width:100%;cursor:pointer;<?php echo $providerChoice === 'auto' ? 'box-shadow:inset 0 0 0 1px rgba(40,233,255,.25);border-color:rgba(40,233,255,.35);' : ''; ?>"> <span>Auto / All</span><small>mix</small> </button> </form> </div> </div> </aside> <main class="content"> <section class="topbar"> <div class="topbar-left"> <div class="stat-card"><div class="label">Total Results</div><div class="value v-cyan"><?php echo h((string)$resultCount); ?></div></div> <div class="stat-card"><div class="label">Provider Hits</div><div class="value v-green"><?php echo h((string)$providerHitCount); ?></div></div> <div class="stat-card"><div class="label">Latency</div><div class="value v-yellow"><?php echo h((string)(int)round($latencyMs)); ?>ms</div></div> <div class="stat-card"><div class="label">Top Truth</div><div class="value v-red"><?php echo h((string)(int)round(($selected['truth_model']['score'] ?? 0) * 100)); ?>%</div></div> </div> <div class="topbar-right"> <div class="health-ring" style="--pct: <?php echo h((string)(($selected['health_model']['score'] ?? 0) * 100)); ?>"><div class="health-ring-inner"><?php echo h((string)(int)round(($selected['health_model']['score'] ?? 0) * 100)); ?>%</div></div> </div> </section> <section class="panel"><div class="panel-inner"> <form method="post"> <div class="search-row"> <input class="input" type="text" name="question" value="<?php echo h($question); ?>" placeholder="Search..."> <select class="select" name="provider"> <option value="auto" <?php echo $providerChoice === 'auto' ? 'selected' : ''; ?>>Auto</option> <?php foreach (provider_registry() as $slug => $cfg): ?> <option value="<?php echo h($slug); ?>" <?php echo $providerChoice === $slug ? 'selected' : ''; ?>><?php echo h($cfg['label']); ?></option> <?php endforeach; ?> </select> <button class="btn" type="submit">Run</button> </div> </form> </div></section> <section class="panel" id="results"><div class="panel-inner results-wrap"> <div class="tabsbar"> <div class="chip active">All</div> <div class="chip">Web</div> <div class="chip">Images</div> <div class="chip">Code</div> <div class="chip">Models</div> <div class="chip">Knowledge</div> <div class="chip">Truth</div> <div class="chip">Health</div> </div> <?php if (!$results): ?> <div class="empty">No results available for this query yet.</div> <?php else: ?> <div class="masonry"> <?php foreach ($results as $idx => $r): ?> <article class="card <?php echo $idx === 0 ? 'primary' : ''; ?>"> <?php if (!empty($r['metadata']['image'])): ?> <div class="card-media" style="background-image:url('<?php echo h($r['metadata']['image']); ?>')"></div> <?php endif; ?> <div class="card-body"> <div class="head"> <div class="title-wrap"> <div class="icon"><?php echo h(strtoupper(substr($r['title'], 0, 1))); ?></div> <div> <div class="name"><?php echo h($r['title']); ?></div> <div class="sub"><?php echo h($r['summary']); ?></div> </div> </div> <div class="pill <?php echo h(status_class($r['status_ui'])); ?>"><?php echo h(ucfirst($r['status_ui'])); ?></div> </div> <div class="tags"> <div class="tag"><?php echo h($r['provider_label']); ?></div> <div class="tag"><?php echo h(ucfirst(str_replace('_', ' ', $r['category'] ?? 'result'))); ?></div> <div class="tag"><?php echo $idx === 0 ? 'Primary' : 'Supporting'; ?></div> </div> <div class="list"> <div><strong>Who:</strong> <?php echo h($r['subject']['who']); ?></div> <div><strong>What:</strong> <?php echo h($r['subject']['what']); ?></div> <div><strong>Where:</strong> <?php echo h($r['subject']['where']); ?></div> <div><strong>When:</strong> <?php echo h($r['subject']['when']); ?></div> <div><strong>Why:</strong> <?php echo h($r['subject']['why']); ?></div> <div><strong>How:</strong> <?php echo h($r['subject']['how']); ?></div> <div><strong>Relevance:</strong> <?php echo h((string)$r['relevance_score']); ?></div> </div> <div class="metrics"> <div class="metric"><div class="m-label">Truth</div><div class="m-value"><?php echo h((string)(int)round($r['truth_model']['score'] * 100)); ?>%</div></div> <div class="metric"><div class="m-label">Health</div><div class="m-value"><?php echo h((string)(int)round($r['health_model']['score'] * 100)); ?>%</div></div> <div class="metric"><div class="m-label">Risk</div><div class="m-value"><?php echo h((string)(int)round($r['health_model']['risk'] * 100)); ?>%</div></div> <div class="metric"><div class="m-label">Hits</div><div class="m-value"><?php echo h((string)$providerHitCount); ?></div></div> </div> <div class="actions-row"> <form method="post"> <input type="hidden" name="question" value="<?php echo h($question); ?>"> <input type="hidden" name="provider" value="<?php echo h($providerChoice); ?>"> <input type="hidden" name="selected_id" value="res_<?php echo h((string)($idx + 1)); ?>"> <button class="linkbtn" type="submit">Open</button> </form> <?php if (!empty($r['url'])): ?><a class="linkbtn" href="<?php echo h($r['url']); ?>" target="_blank" rel="noopener noreferrer">Visit</a><?php endif; ?> </div> </div> </article> <?php endforeach; ?> </div> <?php endif; ?> </div></section> </main> <aside class="panel details"> <div class="panel-inner"> <?php if ($selected && $event): ?> <div class="details-head"> <div><p class="section-title" style="margin-bottom:8px;">Selected Result</p><h2 class="details-title"><?php echo h($selected['title']); ?></h2></div> <div class="pill <?php echo h(status_class($selected['status_ui'])); ?>"><?php echo h(ucfirst($selected['status_ui'])); ?></div> </div> <div class="tabs"> <div class="tab active">Overview</div><div class="tab">5W1H</div><div class="tab">Truth</div><div class="tab">Health</div><div class="tab">Meta</div><div class="tab">Event</div> </div> <?php if (!empty($selected['metadata']['image'])): ?> <div class="block"><h3>Image</h3><img class="preview" src="<?php echo h($selected['metadata']['image']); ?>" alt="<?php echo h($selected['title']); ?>"></div> <?php endif; ?> <div class="block"> <h3>Provider Summary</h3> <div class="kv"> <div class="row"><div class="k">Provider</div><div class="v"><?php echo h($selected['provider_label']); ?></div></div> <div class="row"><div class="k">Category</div><div class="v"><?php echo h(ucfirst(str_replace('_', ' ', $selected['category'] ?? 'result'))); ?></div></div> <div class="row"><div class="k">Query</div><div class="v"><?php echo h($question); ?></div></div> <div class="row"><div class="k">Source</div><div class="v"><?php echo h($selected['source_domain'] ?? 'unknown'); ?></div></div> <div class="row"><div class="k">Summary</div><div class="v"><?php echo h($selected['summary']); ?></div></div> </div> </div> <div class="block"> <h3>Status & Health</h3> <div class="subcards"> <div class="mini"><div class="mini-label">Truth</div><div class="mini-value"><?php echo h(ucfirst($selected['truth_model']['state'])); ?></div></div> <div class="mini"><div class="mini-label">Provider Hits</div><div class="mini-value"><?php echo h((string)$providerHitCount); ?></div></div> <div class="mini"><div class="mini-label">Confidence</div><div class="mini-value"><?php echo h((string)(int)round($selected['health_model']['confidence'] * 100)); ?>%</div></div> <div class="mini"><div class="mini-label">Score</div><div class="mini-value"><?php echo h((string)$selected['health_model']['score']); ?></div></div> </div> <div class="bar"><span style="width: <?php echo h((string)($selected['health_model']['score'] * 100)); ?>%"></span></div> </div> <div class="block"> <h3>5W1H Breakdown</h3> <div class="kv"> <div class="row"><div class="k">Who</div><div class="v"><?php echo h($selected['subject']['who']); ?></div></div> <div class="row"><div class="k">What</div><div class="v"><?php echo h($selected['subject']['what']); ?></div></div> <div class="row"><div class="k">When</div><div class="v"><?php echo h($selected['subject']['when']); ?></div></div> <div class="row"><div class="k">Where</div><div class="v"><?php echo h($selected['subject']['where']); ?></div></div> <div class="row"><div class="k">Why</div><div class="v"><?php echo h($selected['subject']['why']); ?></div></div> <div class="row"><div class="k">How</div><div class="v"><?php echo h($selected['subject']['how']); ?></div></div> </div> </div> <div class="block"> <h3>Truth & Validation</h3> <div class="score-grid"> <div class="box"><h4>Make True</h4><ul><?php foreach ($selected['truth_model']['makeTrue'] as $line): ?><li><?php echo h($line); ?></li><?php endforeach; ?></ul></div> <div class="box"><h4>Make False</h4><ul><?php if ($selected['truth_model']['makeFalse']): foreach ($selected['truth_model']['makeFalse'] as $line): ?><li><?php echo h($line); ?></li><?php endforeach; else: ?><li>No immediate falsifiers recorded</li><?php endif; ?></ul></div> </div> </div> <div class="block"> <h3>Meta</h3> <div class="kv"> <div class="row"><div class="k">Page Title</div><div class="v"><?php echo h($selected['metadata']['title'] ?? 'Not available'); ?></div></div> <div class="row"><div class="k">H1</div><div class="v"><?php echo h($selected['metadata']['h1'] ?? 'Not available'); ?></div></div> <div class="row"><div class="k">Canonical</div><div class="v"><?php echo h($selected['metadata']['canonical'] ?? 'Not available'); ?></div></div> <div class="row"><div class="k">First Paragraph</div><div class="v"><?php echo h($selected['metadata']['first_paragraph'] ?? 'Not available'); ?></div></div> <div class="row"><div class="k">Image</div><div class="v"><?php echo h($selected['metadata']['image'] ?? 'Not available'); ?></div></div> </div> </div> <div class="block"> <h3>Structured Event</h3> <div class="code"><?php echo h(json_encode($event, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)); ?></div> </div> <?php endif; ?> </div> </aside> </div> </body> </html>
Save file
Quick jump
open a path
Open