v0.5.0: NomadArch - Binary-Free Mode Release
Some checks failed
Release Binaries / release (push) Has been cancelled
Some checks failed
Release Binaries / release (push) Has been cancelled
Features: - Binary-Free Mode: No OpenCode binary required - NomadArch Native mode with free Zen models - Native session management - Provider routing (Zen, Qwen, Z.AI) - Fixed MCP connection with explicit connectAll() - Updated installers and launchers for all platforms - UI binary selector with Native option Free Models Available: - GPT-5 Nano (400K context) - Grok Code Fast 1 (256K context) - GLM-4.7 (205K context) - Doubao Seed Code (256K context) - Big Pickle (200K context)
This commit is contained in:
100
packages/ui/src/components/debug-overlay.tsx
Normal file
100
packages/ui/src/components/debug-overlay.tsx
Normal file
@@ -0,0 +1,100 @@
|
||||
import { createSignal, onMount, onCleanup, Show } from "solid-js"
|
||||
|
||||
// Simple debug log storage (no reactive overhead)
|
||||
export function addDebugLog(message: string, level: "info" | "warn" | "error" = "info") {
|
||||
// Disabled - no-op for performance
|
||||
}
|
||||
|
||||
// HARD STOP function - forces page reload
|
||||
function hardStop() {
|
||||
console.warn("HARD STOP triggered - reloading page")
|
||||
window.location.reload()
|
||||
}
|
||||
|
||||
// Force reset function import placeholder
|
||||
let forceResetFn: (() => void) | null = null
|
||||
|
||||
export function setForceResetFn(fn: () => void) {
|
||||
forceResetFn = fn
|
||||
}
|
||||
|
||||
export function DebugOverlay() {
|
||||
const [visible, setVisible] = createSignal(false)
|
||||
|
||||
// Toggle with Ctrl+Shift+D
|
||||
onMount(() => {
|
||||
const handleKeyDown = (e: KeyboardEvent) => {
|
||||
if (e.ctrlKey && e.shiftKey && e.key === "D") {
|
||||
setVisible((v) => !v)
|
||||
}
|
||||
}
|
||||
window.addEventListener("keydown", handleKeyDown)
|
||||
onCleanup(() => window.removeEventListener("keydown", handleKeyDown))
|
||||
})
|
||||
|
||||
return (
|
||||
<Show when={visible()}>
|
||||
<div
|
||||
style={{
|
||||
position: "fixed",
|
||||
top: "10px",
|
||||
right: "10px",
|
||||
"z-index": "99999",
|
||||
background: "rgba(0,0,0,0.9)",
|
||||
color: "#fff",
|
||||
padding: "12px",
|
||||
"border-radius": "8px",
|
||||
"font-family": "monospace",
|
||||
"font-size": "11px",
|
||||
"min-width": "200px",
|
||||
border: "1px solid #333",
|
||||
"pointer-events": "auto",
|
||||
}}
|
||||
>
|
||||
<div style={{ "margin-bottom": "8px", "font-weight": "bold" }}>
|
||||
DEBUG PANEL (Ctrl+Shift+D to toggle)
|
||||
</div>
|
||||
|
||||
<div style={{ display: "flex", gap: "8px" }}>
|
||||
<button
|
||||
onClick={() => {
|
||||
if (forceResetFn) forceResetFn()
|
||||
}}
|
||||
style={{
|
||||
background: "#f59e0b",
|
||||
color: "#000",
|
||||
border: "none",
|
||||
padding: "6px 12px",
|
||||
"border-radius": "4px",
|
||||
cursor: "pointer",
|
||||
"font-weight": "bold",
|
||||
"font-size": "10px",
|
||||
}}
|
||||
>
|
||||
RESET UI
|
||||
</button>
|
||||
|
||||
<button
|
||||
onClick={hardStop}
|
||||
style={{
|
||||
background: "#ef4444",
|
||||
color: "#fff",
|
||||
border: "none",
|
||||
padding: "6px 12px",
|
||||
"border-radius": "4px",
|
||||
cursor: "pointer",
|
||||
"font-weight": "bold",
|
||||
"font-size": "10px",
|
||||
}}
|
||||
>
|
||||
HARD RELOAD
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div style={{ "margin-top": "8px", "font-size": "9px", color: "#888" }}>
|
||||
If stuck: Click HARD RELOAD or press F5
|
||||
</div>
|
||||
</div>
|
||||
</Show>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user