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,310
Folders
408
Scanned Size
3.84 GB
PHP Files
891
Editable Text Files
12,571
File viewer
guarded to /htdocs
/simon/old/linksv2.php
<?php declare(strict_types=1); date_default_timezone_set('America/Chicago'); require_once __DIR__ . '/../_guards/role_guard.php'; require_once __DIR__ . '/../guardian/tracker.php'; guardian_require_role(['admin']); guardian_track_event('admin_page_view', [ 'page' => '/simon/master_eco.php', 'title' => 'SIMON Master Eco', 'area' => 'admin', 'classification' => 'protected_admin', ]); <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>SIMON LINKS — Master Integration Console</title> <meta name="robots" content="noindex,nofollow,noarchive"> <style> :root{ --bg:#06111b; --bg2:#081826; --panel:rgba(10,22,35,.78); --panel2:rgba(15,30,48,.92); --line:rgba(120,220,255,.14); --text:#dff8ff; --muted:#95b8c9; --cyan:#61e6ff; --blue:#5aa9ff; --green:#46d39a; --yellow:#ffc857; --red:#ff7272; --purple:#a98cff; --shadow:0 20px 60px rgba(0,0,0,.35); --radius:18px; } *{box-sizing:border-box} html,body{ margin:0;padding:0;color:var(--text); font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif; background: radial-gradient(circle at top right, rgba(97,230,255,.12), transparent 30%), radial-gradient(circle at bottom left, rgba(169,140,255,.10), transparent 35%), linear-gradient(180deg, #04101a 0%, #071522 100%); } a{color:var(--cyan);text-decoration:none} a:hover{text-decoration:underline} .wrap{max-width:1580px;margin:0 auto;padding:24px} .hero{ display:flex;justify-content:space-between;gap:18px;align-items:center; padding:24px;border:1px solid var(--line);border-radius:24px; background:linear-gradient(180deg,var(--panel),var(--panel2)); box-shadow:var(--shadow); } .hero h1{margin:0;font-size:32px;letter-spacing:.4px} .hero p{margin:8px 0 0;color:var(--muted)} .orb{ width:84px;height:84px;border-radius:50%; background: radial-gradient(circle at 35% 35%, #dfffff 0%, var(--cyan) 24%, rgba(97,230,255,.15) 55%, rgba(97,230,255,.02) 70%, transparent 72%); box-shadow:0 0 40px rgba(97,230,255,.45), inset 0 0 25px rgba(255,255,255,.18); flex:0 0 auto; } .top-actions{display:flex;gap:10px;flex-wrap:wrap;margin:18px 0} .top-actions a,.top-actions button,.btn{ appearance:none;border:none;cursor:pointer;padding:11px 15px;border-radius:12px; background:linear-gradient(135deg, rgba(97,230,255,.18), rgba(90,169,255,.18)); color:var(--text);border:1px solid rgba(120,220,255,.24);font-weight:700 } .btn-danger{ background:linear-gradient(135deg, rgba(255,114,114,.18), rgba(255,114,114,.08)); border-color:rgba(255,114,114,.28) } .nav{display:flex;flex-wrap:wrap;gap:10px;margin:18px 0 24px} .nav a{ padding:10px 14px;border-radius:999px;border:1px solid var(--line); background:rgba(255,255,255,.03);color:var(--text) } .nav a.active{background:rgba(97,230,255,.12);border-color:rgba(97,230,255,.35)} .alert{ margin:0 0 18px;padding:14px 16px;border-radius:14px;border:1px solid var(--line); background:var(--panel2) } .alert-success{border-color:rgba(70,211,154,.35);color:#dcfff1} .alert-error{border-color:rgba(255,114,114,.35);color:#ffe0e0} .alert-warn{border-color:rgba(255,200,87,.35);color:#fff3cf} .grid{display:grid;grid-template-columns:repeat(12,1fr);gap:18px} .card{ background:linear-gradient(180deg,var(--panel),var(--panel2)); border:1px solid var(--line);border-radius:var(--radius); box-shadow:var(--shadow);padding:18px } .span-12{grid-column:span 12} .span-8{grid-column:span 8} .span-7{grid-column:span 7} .span-6{grid-column:span 6} .span-5{grid-column:span 5} .span-4{grid-column:span 4} .span-3{grid-column:span 3} @media (max-width:1200px){ .span-8,.span-7,.span-6,.span-5,.span-4,.span-3{grid-column:span 12} } .kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:14px} @media (max-width:1000px){.kpis{grid-template-columns:repeat(2,1fr)}} .kpi{padding:16px;border-radius:16px;background:rgba(255,255,255,.03);border:1px solid var(--line)} .kpi .num{font-size:28px;font-weight:800;margin-top:6px} .kpi .label{color:var(--muted);font-size:13px;text-transform:uppercase;letter-spacing:.12em} table{width:100%;border-collapse:collapse} th,td{padding:12px 10px;border-bottom:1px solid var(--line);vertical-align:top;text-align:left} th{color:#bfefff;font-size:12px;text-transform:uppercase;letter-spacing:.12em} input,select,textarea{ width:100%;padding:11px 12px;border-radius:12px;border:1px solid rgba(140,220,255,.18); background:rgba(0,0,0,.18);color:var(--text);outline:none } textarea{min-height:110px;resize:vertical} label{display:block;font-size:12px;color:#bfefff;margin:0 0 8px;text-transform:uppercase;letter-spacing:.12em} .form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px} @media (max-width:900px){.form-grid{grid-template-columns:1fr}} .actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px} .badge{ display:inline-flex;align-items:center;padding:6px 10px;border-radius:999px; font-size:12px;font-weight:700;border:1px solid transparent } .badge-ok{background:rgba(70,211,154,.12);color:#baffdf;border-color:rgba(70,211,154,.22)} .badge-warn{background:rgba(255,200,87,.12);color:#ffe7a8;border-color:rgba(255,200,87,.22)} .badge-bad{background:rgba(255,114,114,.12);color:#ffd1d1;border-color:rgba(255,114,114,.22)} .badge-mute{background:rgba(255,255,255,.06);color:#d4e7ef;border-color:rgba(255,255,255,.10)} .codebox{ white-space:pre-wrap;word-break:break-word; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; background:rgba(0,0,0,.22);padding:14px;border-radius:14px;border:1px solid var(--line) } .small{font-size:12px;color:var(--muted)} .section-title{margin:0 0 14px;font-size:18px} .tag{ display:inline-block;padding:5px 9px;border-radius:999px; background:rgba(169,140,255,.12);border:1px solid rgba(169,140,255,.22);margin:2px 6px 2px 0; font-size:12px;color:#e4d8ff } .pillrow{display:flex;flex-wrap:wrap;gap:10px} .item{ padding:12px 14px;border-radius:14px;border:1px solid var(--line); background:rgba(255,255,255,.03) } .checkline{display:flex;gap:16px;align-items:center;flex-wrap:wrap;padding-top:8px} .checkline label{ display:flex;gap:8px;align-items:center;margin:0; text-transform:none;letter-spacing:normal;font-size:14px;color:var(--text) } .checkline input{width:auto} .right-note{font-size:12px;color:var(--muted);margin-top:8px} </style> </head> <body> <div class="wrap"> <div class="hero"> <div> <h1>SIMON LINKS</h1> <p>Master Integration Console for provider registry, credentials references, health states, schema, route readiness, WEB360 bridge, and SIMON 5W1H tracking.</p> </div> <div class="orb" aria-hidden="true"></div> </div> <div class="top-actions"> <a href="/simon/links.php?tab=registry">Open Registry</a> <a href="/simon/links.php?tab=health">Open Health</a> <a href="/simon/links.php?tab=logs">Open Logs</a> <a href="/simon/api/integration_test.php" target="_blank">Run Test API</a> <a href="/simon/api/integration_health_worker.php?run=1" target="_blank">Run Health Worker</a> <a href="/simon/simon_5w1h.php" target="_blank">Open 5W1H</a> </div> <div class="nav"> <?php foreach ($menu as $navItem): ?> <a class="<?= $activeTab === $navItem['tab'] ? 'active' : '' ?>" href="<?= h($navItem['href']) ?>"><?= h($navItem['label']) ?></a> <?php endforeach; ?> </div> <?php if ($message !== ''): ?> <div class="alert alert-success"><?= h($message) ?></div> <?php endif; ?> <?php if ($error !== ''): ?> <div class="alert alert-error"><?= h($error) ?></div> <?php endif; ?> <div class="grid"> <div class="card span-12"> <div class="kpis"> <div class="kpi"><div class="label">Providers</div><div class="num"><?= (int)$total ?></div></div> <div class="kpi"><div class="label">Active</div><div class="num"><?= (int)$activeCount ?></div></div> <div class="kpi"><div class="label">Warnings</div><div class="num"><?= (int)$warningCount ?></div></div> <div class="kpi"><div class="label">Issues</div><div class="num"><?= (int)$downCount ?></div></div> <div class="kpi"><div class="label">Avg Uptime</div><div class="num"><?= h((string)$avgUptime) ?>%</div></div> </div> </div> </div> <?php if ($activeTab === 'home' || $activeTab === 'registry'): ?> <div class="grid" style="margin-top:18px"> <div class="card span-8"> <h2 class="section-title">Registry</h2> <form method="get" class="form-grid" style="margin-bottom:16px"> <input type="hidden" name="tab" value="registry"> <div> <label>Search</label> <input name="q" value="<?= h($q) ?>" placeholder="search providers, tags, routes, refs"> </div> <div> <label>Category</label> <select name="category"> <option value="">All</option> <?php foreach ($categories as $category): ?> <option value="<?= h($category) ?>" <?= $filterCategory === $category ? 'selected' : '' ?>><?= h($category) ?></option> <?php endforeach; ?> </select> </div> <div> <label>Owner</label> <select name="owner_system"> <option value="">All</option> <?php foreach ($owners as $owner): ?> <option value="<?= h($owner) ?>" <?= $filterOwner === $owner ? 'selected' : '' ?>><?= h($owner) ?></option> <?php endforeach; ?> </select> </div> <div> <label>Status</label> <select name="status"> <option value="">All</option> <?php foreach ($statuses as $st): ?> <option value="<?= h($st) ?>" <?= $filterStatus === $st ? 'selected' : '' ?>><?= h($st) ?></option> <?php endforeach; ?> </select> </div> <div> <label>Type</label> <select name="provider_type"> <option value="">All</option> <?php foreach ($providerTypes as $ptype): ?> <option value="<?= h($ptype) ?>" <?= $filterType === $ptype ? 'selected' : '' ?>><?= h($ptype) ?></option> <?php endforeach; ?> </select> </div> <div style="display:flex;align-items:end"> <button type="submit">Filter</button> </div> </form> <table> <thead> <tr> <th>Name</th> <th>Status</th> <th>Type</th> <th>Owner</th> <th>Runtime</th> <th>Missing</th> <th>Actions</th> </tr> </thead> <tbody> <?php foreach ($filtered as $row): $ps = provider_panel_status($row, $providerStatus); ?> <tr> <td> <strong><?= h(value_str($row,'name')) ?></strong><br> <span class="small"><?= h(value_str($row,'slug')) ?></span> </td> <td><?= '<span class="badge badge-' . h($ps['severity']) . '">' . h($ps['label']) . '</span>' ?></td> <td><?= h(value_str($row,'provider_type')) ?></td> <td><?= h(value_str($row,'owner_system')) ?></td> <td><?= h($ps['runtime']) ?></td> <td class="small"><?= h(implode(', ', $ps['missing'])) ?></td> <td> <div class="pillrow"> <a href="?tab=registry&edit=<?= h(value_str($row,'id')) ?>">Edit</a> <a href="/simon/api/integration_test.php?slug=<?= h(value_str($row,'slug')) ?>" target="_blank">Test</a> <a href="/simon/api/integration_router.php?slug=<?= h(value_str($row,'slug')) ?>" target="_blank">Route</a> </div> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> <div class="card span-4"> <h2 class="section-title">Provider Config</h2> <div class="item" style="margin-bottom:14px"> <div><strong>Status:</strong> <span class="badge badge-<?= h($panelStatus['severity']) ?>"><?= h($panelStatus['label']) ?></span></div> <div class="right-note">Runtime: <?= h($panelStatus['runtime']) ?></div> <?php if (!empty($panelStatus['missing'])): ?> <div class="right-note">Missing: <?= h(implode(', ', $panelStatus['missing'])) ?></div> <?php endif; ?> </div> <form method="post"> <input type="hidden" name="action" value="save_connection"> <input type="hidden" name="id" value="<?= h(value_str($edit,'id')) ?>"> <div class="form-grid"> <div><label>Name</label><input name="name" value="<?= h(value_str($edit,'name')) ?>"></div> <div><label>Slug</label><input name="slug" value="<?= h(value_str($edit,'slug')) ?>"></div> <div><label>Provider Type</label><input name="provider_type" value="<?= h(value_str($edit,'provider_type')) ?>"></div> <div><label>Category</label><input name="category" value="<?= h(value_str($edit,'category')) ?>"></div> <div><label>Owner System</label><input name="owner_system" value="<?= h(value_str($edit,'owner_system')) ?>"></div> <div><label>Status</label><input name="status" value="<?= h(value_str($edit,'status')) ?>"></div> <div><label>Service State</label><input name="service_state" value="<?= h(value_str($edit,'service_state')) ?>"></div> <div><label>Environment</label><input name="environment" value="<?= h(value_str($edit,'environment')) ?>"></div> <div><label>Account Label</label><input name="account_label" value="<?= h(value_str($edit,'account_label')) ?>"></div> <div><label>Account Handle</label><input name="account_handle" value="<?= h(value_str($edit,'account_handle')) ?>"></div> <div><label>Platform URL</label><input name="platform_url" value="<?= h(value_str($edit,'platform_url')) ?>"></div> <div><label>Login URL</label><input name="login_url" value="<?= h(value_str($edit,'login_url')) ?>"></div> <div><label>API Base URL</label><input name="api_base_url" value="<?= h(value_str($edit,'api_base_url')) ?>"></div> <div><label>API Version</label><input name="api_version" value="<?= h(value_str($edit,'api_version')) ?>"></div> <div><label>Webhook URL</label><input name="webhook_url" value="<?= h(value_str($edit,'webhook_url')) ?>"></div> <div><label>Callback URL</label><input name="callback_url" value="<?= h(value_str($edit,'callback_url')) ?>"></div> <div><label>Healthcheck URL</label><input name="healthcheck_url" value="<?= h(value_str($edit,'healthcheck_url')) ?>"></div> <div><label>Auth Type</label><input name="auth_type" value="<?= h(value_str($edit,'auth_type')) ?>"></div> <div><label>Secret Ref</label><input name="secret_ref" value="<?= h(value_str($edit,'secret_ref')) ?>"></div> <div><label>Client ID Ref</label><input name="client_id_ref" value="<?= h(value_str($edit,'client_id_ref')) ?>"></div> <div><label>Client Secret Ref</label><input name="client_secret_ref" value="<?= h(value_str($edit,'client_secret_ref')) ?>"></div> <div><label>Access Token Ref</label><input name="access_token_ref" value="<?= h(value_str($edit,'access_token_ref')) ?>"></div> <div><label>Refresh Token Ref</label><input name="refresh_token_ref" value="<?= h(value_str($edit,'refresh_token_ref')) ?>"></div> <div><label>App ID</label><input name="app_id" value="<?= h(value_str($edit,'app_id')) ?>"></div> <div><label>Tenant ID</label><input name="tenant_id" value="<?= h(value_str($edit,'tenant_id')) ?>"></div> <div><label>Workspace ID</label><input name="workspace_id" value="<?= h(value_str($edit,'workspace_id')) ?>"></div> <div><label>FTP Host</label><input name="ftp_host" value="<?= h(value_str($edit,'ftp_host')) ?>"></div> <div><label>FTP Port</label><input name="ftp_port" value="<?= h(value_str($edit,'ftp_port')) ?>"></div> <div><label>FTP Protocol</label><input name="ftp_protocol" value="<?= h(value_str($edit,'ftp_protocol')) ?>"></div> <div><label>FTP Username</label><input name="ftp_username" value="<?= h(value_str($edit,'ftp_username')) ?>"></div> <div><label>FTP Password Ref</label><input name="ftp_password_ref" value="<?= h(value_str($edit,'ftp_password_ref')) ?>"></div> <div><label>FTP Root Path</label><input name="ftp_root_path" value="<?= h(value_str($edit,'ftp_root_path')) ?>"></div> <div><label>FTP Timeout</label><input name="ftp_timeout" value="<?= h(value_str($edit,'ftp_timeout')) ?>"></div> <div class="checkline"> <label><input type="checkbox" name="ftp_passive_mode" value="1" <?= value_bool($edit,'ftp_passive_mode', false) ? 'checked' : '' ?>> Passive</label> <label><input type="checkbox" name="ftp_ssl" value="1" <?= value_bool($edit,'ftp_ssl', false) ? 'checked' : '' ?>> SSL</label> </div> <div><label>DB Engine</label><input name="db_engine" value="<?= h(value_str($edit,'db_engine')) ?>"></div> <div><label>DB Host</label><input name="db_host" value="<?= h(value_str($edit,'db_host')) ?>"></div> <div><label>DB Port</label><input name="db_port" value="<?= h(value_str($edit,'db_port')) ?>"></div> <div><label>DB Name</label><input name="db_name" value="<?= h(value_str($edit,'db_name')) ?>"></div> <div><label>DB Username</label><input name="db_username" value="<?= h(value_str($edit,'db_username')) ?>"></div> <div><label>DB Password Ref</label><input name="db_password_ref" value="<?= h(value_str($edit,'db_password_ref')) ?>"></div> <div><label>DB Charset</label><input name="db_charset" value="<?= h(value_str($edit,'db_charset')) ?>"></div> <div><label>DB SSL Mode</label><input name="db_ssl_mode" value="<?= h(value_str($edit,'db_ssl_mode')) ?>"></div> <div><label>Email Provider</label><input name="email_provider" value="<?= h(value_str($edit,'email_provider')) ?>"></div> <div><label>SMTP Host</label><input name="smtp_host" value="<?= h(value_str($edit,'smtp_host')) ?>"></div> <div><label>SMTP Port</label><input name="smtp_port" value="<?= h(value_str($edit,'smtp_port')) ?>"></div> <div><label>SMTP Username</label><input name="smtp_username" value="<?= h(value_str($edit,'smtp_username')) ?>"></div> <div><label>SMTP Password Ref</label><input name="smtp_password_ref" value="<?= h(value_str($edit,'smtp_password_ref')) ?>"></div> <div><label>IMAP Host</label><input name="imap_host" value="<?= h(value_str($edit,'imap_host')) ?>"></div> <div><label>IMAP Port</label><input name="imap_port" value="<?= h(value_str($edit,'imap_port')) ?>"></div> <div><label>POP Host</label><input name="pop_host" value="<?= h(value_str($edit,'pop_host')) ?>"></div> <div><label>POP Port</label><input name="pop_port" value="<?= h(value_str($edit,'pop_port')) ?>"></div> <div><label>From Email</label><input name="from_email" value="<?= h(value_str($edit,'from_email')) ?>"></div> <div><label>Reply-To Email</label><input name="reply_to_email" value="<?= h(value_str($edit,'reply_to_email')) ?>"></div> <div><label>Required Fields (comma list)</label><input name="required_fields" value="<?= h(implode(',', $edit['required_fields'] ?? [])) ?>"></div> <div><label>Optional Fields (comma list)</label><input name="optional_fields" value="<?= h(implode(',', $edit['optional_fields'] ?? [])) ?>"></div> <div><label>Module Routes (comma list)</label><input name="module_routes" value="<?= h(implode(',', $edit['module_routes'] ?? [])) ?>"></div> <div><label>Tags (comma list)</label><input name="tags" value="<?= h(implode(',', $edit['tags'] ?? [])) ?>"></div> <div><label>Field Map (JSON)</label><textarea name="field_map"><?= h(json_encode($edit['field_map'] ?? [], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) ?></textarea></div> <div><label>Event Map (JSON)</label><textarea name="event_map"><?= h(json_encode($edit['event_map'] ?? [], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) ?></textarea></div> <div><label>Custom Fields (JSON)</label><textarea name="custom_fields"><?= h(json_encode($edit['custom_fields'] ?? [], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) ?></textarea></div> <div style="grid-column:1/-1"> <label>Notes</label> <textarea name="notes"><?= h(value_str($edit,'notes')) ?></textarea> </div> </div> <div class="actions"> <button type="submit">Save Provider</button> <a class="btn" href="/simon/links.php?tab=registry">New Blank</a> </div> </form> <?php if (value_str($edit,'id') !== ''): ?> <form method="post" style="margin-top:12px" onsubmit="return confirm('Delete this provider?');"> <input type="hidden" name="action" value="delete_connection"> <input type="hidden" name="id" value="<?= h(value_str($edit,'id')) ?>"> <button class="btn-danger" type="submit">Delete Provider</button> </form> <?php endif; ?> </div> <div class="card span-4"> <h2 class="section-title">AI Assist</h2> <?php if (empty($aiNotes)): ?> <div class="item">No AI findings right now.</div> <?php else: ?> <?php foreach ($aiNotes as $note): ?> <div class="item" style="margin-bottom:10px"><?= $note ?></div> <?php endforeach; ?> <?php endif; ?> <hr style="border:none;border-top:1px solid var(--line);margin:18px 0"> <h2 class="section-title">Quick Shortcuts</h2> <div class="pillrow"> <a href="/web360/" target="_blank">WEB360</a> <a href="/simon/" target="_blank">SIMON Intelligence</a> <a href="/simon/simon_5w1h.php" target="_blank">5W1H</a> <a href="/simon/api/voice_lab.php" target="_blank">Voice Lab</a> <a href="/simon/api/message_test.php" target="_blank">Message Test</a> <a href="/simon/api/log_viewer.php" target="_blank">Log Viewer</a> </div> <hr style="border:none;border-top:1px solid var(--line);margin:18px 0"> <h2 class="section-title">Config Properties Snapshot</h2> <div class="codebox"><?= h(json_encode($edit, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) ?></div> </div> </div> <?php endif; ?> <?php if ($activeTab === 'health'): ?> <div class="grid" style="margin-top:18px"> <div class="card span-7"> <h2 class="section-title">Provider Health</h2> <table> <thead> <tr> <th>Provider</th> <th>Panel</th> <th>Runtime</th> <th>Config Status</th> <th>Last Error</th> </tr> </thead> <tbody> <?php foreach ($connections as $row): $panel = provider_panel_status($row, $providerStatus); $slug = value_str($row,'slug'); $sr = $providerStatus[$slug] ?? []; ?> <tr> <td><?= h(value_str($row,'name')) ?></td> <td><span class="badge badge-<?= h($panel['severity']) ?>"><?= h($panel['label']) ?></span></td> <td><?= h($panel['runtime']) ?></td> <td><?= h(value_str($sr,'config_status', value_str($row,'status'))) ?></td> <td class="small"><?= h(value_str($sr,'last_error_message')) ?></td> </tr> <?php endforeach; ?> </tbody> </table> </div> <div class="card span-5"> <h2 class="section-title">Health Shortcuts</h2> <div class="pillrow" style="margin-bottom:14px"> <a href="/simon/api/integration_health_worker.php?run=1" target="_blank">Run Health Worker</a> <a href="/simon/api/integration_test.php" target="_blank">Integration Test</a> <a href="/simon/api/log_viewer.php" target="_blank">View Logs</a> </div> <div class="codebox"><?= h(json_encode($providerStatus, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) ?></div> </div> </div> <?php endif; ?> <?php if ($activeTab === 'templates'): ?> <div class="grid" style="margin-top:18px"> <div class="card span-8"> <h2 class="section-title">Provider Templates</h2> <table> <thead> <tr> <th>Name</th> <th>Type</th> <th>Owner</th> <th>Routes</th> <th>Required</th> </tr> </thead> <tbody> <?php foreach ($providerTemplates as $tpl): ?> <tr> <td><?= h(value_str($tpl,'name')) ?></td> <td><?= h(value_str($tpl,'provider_type')) ?></td> <td><?= h(value_str($tpl,'owner_system')) ?></td> <td class="small"><?= h(implode(', ', $tpl['module_routes'] ?? [])) ?></td> <td class="small"><?= h(implode(', ', $tpl['required_fields'] ?? [])) ?></td> </tr> <?php endforeach; ?> </tbody> </table> </div> <div class="card span-4"> <h2 class="section-title">Seed Schema Field</h2> <form method="post"> <input type="hidden" name="action" value="add_schema_field"> <div class="form-grid"> <div><label>Field Key</label><input name="field_key"></div> <div><label>Label</label><input name="field_label"></div> <div><label>Type</label><input name="field_type" value="text"></div> <div><label>Scope</label><input name="field_scope" value="global"></div> </div> <div class="checkline"> <label><input type="checkbox" name="field_required" value="1"> Required</label> <label><input type="checkbox" name="field_secret" value="1"> Secret</label> </div> <div class="actions"> <button type="submit">Add Schema Field</button> </div> </form> </div> </div> <?php endif; ?> <?php if ($activeTab === 'schema'): ?> <div class="grid" style="margin-top:18px"> <div class="card span-12"> <h2 class="section-title">Schema</h2> <div class="codebox"><?= h(json_encode($fieldsData, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) ?></div> </div> </div> <?php endif; ?> <?php if ($activeTab === 'test'): ?> <div class="grid" style="margin-top:18px"> <div class="card span-6"> <h2 class="section-title">Manual Test</h2> <div class="pillrow"> <a href="/simon/api/integration_test.php" target="_blank">General Test</a> <?php foreach ($connections as $row): ?> <a href="/simon/api/integration_test.php?slug=<?= h(value_str($row,'slug')) ?>" target="_blank"><?= h(value_str($row,'name')) ?></a> <?php endforeach; ?> </div> </div> <div class="card span-6"> <h2 class="section-title">How to Test</h2> <div class="item">1. Open Registry and select a provider.</div> <div class="item">2. Fill missing required fields.</div> <div class="item">3. Save Provider.</div> <div class="item">4. Click Test or Route.</div> <div class="item">5. Run Health Worker to refresh runtime state.</div> </div> </div> <?php endif; ?> <?php if ($activeTab === 'router'): ?> <div class="grid" style="margin-top:18px"> <div class="card span-12"> <h2 class="section-title">Router Shortcuts</h2> <div class="pillrow"> <a href="/simon/api/integration_router.php" target="_blank">Base Router</a> <?php foreach ($connections as $row): ?> <a href="/simon/api/integration_router.php?slug=<?= h(value_str($row,'slug')) ?>" target="_blank"><?= h(value_str($row,'slug')) ?></a> <?php endforeach; ?> </div> </div> </div> <?php endif; ?> <?php if ($activeTab === 'worker'): ?> <div class="grid" style="margin-top:18px"> <div class="card span-12"> <h2 class="section-title">Health Worker</h2> <div class="pillrow"> <a href="/simon/api/integration_health_worker.php?run=1" target="_blank">Run Once</a> <a href="/simon/api/integration_health_worker.php" target="_blank">Open Worker</a> </div> </div> </div> <?php endif; ?> <?php if ($activeTab === 'webhook'): ?> <div class="grid" style="margin-top:18px"> <div class="card span-12"> <h2 class="section-title">Webhook Receiver</h2> <div class="pillrow"> <a href="/simon/api/webhook_receiver.php" target="_blank">Open Webhook Receiver</a> <a href="/simon/api/media_upload_test.php" target="_blank">Media Upload Test</a> </div> </div> </div> <?php endif; ?> <?php if ($activeTab === 'labs'): ?> <div class="grid" style="margin-top:18px"> <div class="card span-6"> <h2 class="section-title">Labs</h2> <div class="pillrow"> <a href="/simon/api/voice_lab.php" target="_blank">Voice Lab</a> <a href="/simon/api/message_test.php" target="_blank">Message Test</a> <a href="/simon/simon_5w1h.php" target="_blank">5W1H Engine</a> </div> </div> <div class="card span-6"> <h2 class="section-title">5W1H Note</h2> <div class="item">Your project term should be treated as <strong>5W1H</strong>. Any old RW1H label should be renamed in later cleanup passes.</div> </div> </div> <?php endif; ?> <?php if ($activeTab === 'logs'): ?> <div class="grid" style="margin-top:18px"> <div class="card span-6"> <h2 class="section-title">Activity Log</h2> <div class="codebox"><?= h(implode("\n", $activityLines)) ?></div> </div> <div class="card span-6"> <h2 class="section-title">Error Log</h2> <div class="codebox"><?= h(implode("\n", $errorLines)) ?></div> </div> </div> <?php endif; ?> </div> </body> </html>
Save file
Quick jump
open a path
Open