Download app-release-1.0.html from Snapkitty/bob-ide: direct link, hf CLI and curl.
- Browser
- Download file 21.9 kB
-
https://huggingface.co/Snapkitty/bob-ide/resolve/main/app-release-1.0.html
- Command line
-
hf download hf://Snapkitty/bob-ide/app-release-1.0.html
-
curl -L -o app-release-1.0.html https://huggingface.co/Snapkitty/bob-ide/resolve/main/app-release-1.0.html
21.9 kB
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
| <title>BOB IDE RELEASE 1.0 — Sovereign Development Environment</title> | |
| <style> | |
| * { margin: 0; padding: 0; box-sizing: border-box; } | |
| html, body { height: 100%; width: 100%; background: #040810; overflow: hidden; } | |
| body { | |
| font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; | |
| color: #d9fff8; | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| /* TITLEBAR */ | |
| .titlebar { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| padding: 8px 12px; | |
| background: #0a0f1a; | |
| border-bottom: 1px solid #2d5a52; | |
| height: 34px; | |
| } | |
| .titlebar-title { font-weight: 600; font-size: 13px; color: #00d4cc; } | |
| .titlebar-buttons { display: flex; gap: 4px; } | |
| .titlebar-btn { | |
| padding: 4px 8px; | |
| background: #1a1f2e; | |
| border: 1px solid #3e3e42; | |
| color: #d4d4d4; | |
| cursor: pointer; | |
| border-radius: 2px; | |
| font-size: 11px; | |
| } | |
| .titlebar-btn:hover { background: #2d3e4e; } | |
| /* MAIN LAYOUT */ | |
| .main-container { | |
| display: flex; | |
| flex: 1; | |
| overflow: hidden; | |
| gap: 1px; | |
| background: #1a1f2e; | |
| } | |
| /* EDITOR PANEL */ | |
| .editor-panel { | |
| display: flex; | |
| flex-direction: column; | |
| flex: 1; | |
| border-right: 1px solid #3e3e42; | |
| } | |
| .editor-tabs { | |
| display: flex; | |
| background: #0a0f1a; | |
| border-bottom: 1px solid #3e3e42; | |
| padding: 4px; | |
| gap: 2px; | |
| } | |
| .editor-tab { | |
| padding: 6px 12px; | |
| background: transparent; | |
| border: none; | |
| color: #969696; | |
| cursor: pointer; | |
| font-size: 12px; | |
| border-bottom: 2px solid transparent; | |
| } | |
| .editor-tab.active { | |
| color: #d4d4d4; | |
| border-bottom-color: #00d4cc; | |
| } | |
| .editor-content { | |
| flex: 1; | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| textarea.code-editor { | |
| flex: 1; | |
| background: #1e1e1e; | |
| color: #d4d4d4; | |
| border: none; | |
| outline: none; | |
| padding: 12px; | |
| font-family: inherit; | |
| font-size: 13px; | |
| line-height: 1.6; | |
| resize: none; | |
| tab-size: 2; | |
| } | |
| .editor-statusbar { | |
| display: flex; | |
| justify-content: space-between; | |
| padding: 4px 12px; | |
| background: #007acc; | |
| border-top: 1px solid #3e3e42; | |
| font-size: 11px; | |
| color: #fff; | |
| } | |
| /* RIGHT PANEL */ | |
| .right-panel { | |
| display: flex; | |
| flex-direction: column; | |
| width: 40%; | |
| border-left: 1px solid #3e3e42; | |
| background: #0a0f1a; | |
| } | |
| .panel-tabs { | |
| display: flex; | |
| background: #0a0f1a; | |
| border-bottom: 1px solid #3e3e42; | |
| padding: 4px; | |
| gap: 2px; | |
| } | |
| .panel-tab { | |
| padding: 6px 12px; | |
| background: transparent; | |
| border: none; | |
| color: #969696; | |
| cursor: pointer; | |
| font-size: 11px; | |
| } | |
| .panel-tab.active { | |
| color: #d4d4d4; | |
| background: #1a1f2e; | |
| border-radius: 2px; | |
| } | |
| .panel-content { | |
| flex: 1; | |
| overflow-y: auto; | |
| padding: 12px; | |
| display: none; | |
| } | |
| .panel-content.active { display: block; } | |
| /* TERMINAL */ | |
| .terminal-output { | |
| flex: 1; | |
| overflow-y: auto; | |
| background: #1e1e1e; | |
| padding: 8px; | |
| font-size: 12px; | |
| line-height: 1.4; | |
| border: 1px solid #3e3e42; | |
| margin-bottom: 8px; | |
| } | |
| .terminal-line { | |
| margin-bottom: 4px; | |
| white-space: pre-wrap; | |
| word-wrap: break-word; | |
| } | |
| .terminal-line.input { color: #00d4cc; font-weight: bold; } | |
| .terminal-line.output { color: #d4d4d4; } | |
| .terminal-line.error { color: #ff5470; } | |
| .terminal-line.success { color: #00ff88; } | |
| .terminal-input-row { | |
| display: flex; | |
| gap: 6px; | |
| padding: 8px; | |
| background: #1a1f2e; | |
| border: 1px solid #3e3e42; | |
| border-radius: 2px; | |
| } | |
| .terminal-prompt { color: #00ff88; font-weight: 800; } | |
| .terminal-input { | |
| flex: 1; | |
| background: transparent; | |
| border: none; | |
| outline: none; | |
| color: #effffb; | |
| font-family: inherit; | |
| font-size: 12px; | |
| caret-color: #00d4cc; | |
| } | |
| /* XML COMPILER */ | |
| .xml-section { | |
| margin-bottom: 12px; | |
| padding: 8px; | |
| background: #1a1f2e; | |
| border: 1px solid #3e3e42; | |
| border-radius: 2px; | |
| } | |
| .xml-label { font-size: 10px; color: #00d4cc; font-weight: 600; margin-bottom: 4px; } | |
| .xml-textarea { | |
| width: 100%; | |
| padding: 6px; | |
| background: #1e1e1e; | |
| color: #d4d4d4; | |
| border: 1px solid #3e3e42; | |
| font-family: inherit; | |
| font-size: 10px; | |
| resize: none; | |
| margin-bottom: 4px; | |
| } | |
| .xml-button { | |
| width: 100%; | |
| padding: 6px; | |
| background: #00d4cc; | |
| color: #000; | |
| border: none; | |
| border-radius: 2px; | |
| cursor: pointer; | |
| font-weight: 600; | |
| font-size: 11px; | |
| font-family: inherit; | |
| } | |
| .xml-button:hover { background: #00f5e8; } | |
| .xml-button:disabled { background: #3e3e42; color: #a0a0a0; cursor: not-allowed; } | |
| .xml-output { | |
| background: #1e1e1e; | |
| padding: 6px; | |
| border: 1px solid #3e3e42; | |
| font-size: 9px; | |
| color: #d4d4d4; | |
| max-height: 100px; | |
| overflow-y: auto; | |
| border-radius: 2px; | |
| font-family: inherit; | |
| white-space: pre-wrap; | |
| word-break: break-all; | |
| } | |
| /* OMEGA SHELL */ | |
| .omega-shell { | |
| --omega-cyan: #64ffe3; | |
| --omega-green: #58ff92; | |
| position: fixed; | |
| inset: auto 0 0 0; | |
| height: min(35vh, 380px); | |
| display: flex; | |
| flex-direction: column; | |
| background: linear-gradient(180deg, rgba(2, 9, 9, .88), rgba(4, 18, 17, .96)); | |
| border-top: 1px solid rgba(70, 255, 214, .22); | |
| backdrop-filter: blur(12px); | |
| z-index: 10000; | |
| } | |
| .omega-bar { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| padding: 0 12px; | |
| height: 34px; | |
| border-bottom: 1px solid rgba(70, 255, 214, .22); | |
| } | |
| .omega-mark { | |
| color: var(--omega-cyan); | |
| font-weight: 900; | |
| letter-spacing: .08em; | |
| text-shadow: 0 0 16px rgba(100,255,227,.65); | |
| } | |
| .omega-state { | |
| color: var(--omega-green); | |
| font-size: 10px; | |
| letter-spacing: .12em; | |
| } | |
| .omega-spacer { flex: 1; } | |
| .omega-chip { | |
| border: 1px solid rgba(70, 255, 214, .22); | |
| border-radius: 999px; | |
| padding: 2px 8px; | |
| color: #71958f; | |
| font-size: 9px; | |
| } | |
| .omega-output { | |
| flex: 1; | |
| overflow-y: auto; | |
| padding: 8px 12px; | |
| font-size: 11px; | |
| line-height: 1.4; | |
| } | |
| .omega-line { | |
| margin-bottom: 2px; | |
| white-space: pre-wrap; | |
| } | |
| .omega-line[data-kind="system"] { color: var(--omega-cyan); } | |
| .omega-line[data-kind="ok"] { color: var(--omega-green); } | |
| .omega-line[data-kind="error"] { color: #ff5470; } | |
| .omega-input-row { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| padding: 6px 12px; | |
| background: rgba(0,0,0,.2); | |
| border-top: 1px solid rgba(70, 255, 214, .22); | |
| } | |
| .omega-prompt { color: var(--omega-green); font-weight: 800; } | |
| .omega-input { | |
| flex: 1; | |
| border: 0; | |
| outline: 0; | |
| background: transparent; | |
| color: #effffb; | |
| font-family: inherit; | |
| font-size: 11px; | |
| caret-color: var(--omega-cyan); | |
| } | |
| .omega-run { | |
| border: 1px solid rgba(100,255,227,.3); | |
| border-radius: 4px; | |
| padding: 4px 9px; | |
| color: var(--omega-cyan); | |
| background: rgba(27,104,94,.14); | |
| cursor: pointer; | |
| font-weight: 600; | |
| font-size: 10px; | |
| } | |
| .omega-run:hover { | |
| background: rgba(27,104,94,.3); | |
| box-shadow: 0 0 12px rgba(100,255,227,.12); | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <!-- TITLEBAR --> | |
| <div class="titlebar"> | |
| <div class="titlebar-title">🤖 BOB IDE RELEASE 1.0 — Sovereign Development Environment</div> | |
| <div class="titlebar-buttons"> | |
| <button class="titlebar-btn" onclick="saveFile()">💾 Save</button> | |
| <button class="titlebar-btn" onclick="runCode()">▶ Run</button> | |
| </div> | |
| </div> | |
| <!-- MAIN CONTAINER --> | |
| <div class="main-container"> | |
| <!-- EDITOR --> | |
| <div class="editor-panel"> | |
| <div class="editor-tabs"> | |
| <button class="editor-tab active" onclick="switchTab('editor', 'code')">📝 main.ts</button> | |
| <button class="editor-tab" onclick="switchTab('editor', 'schema')">📋 types.ts</button> | |
| </div> | |
| <div class="editor-content"> | |
| <textarea id="code-editor" class="code-editor" placeholder="// Write your code here...">// BOB IDE RELEASE 1.0 | |
| // Powered by IBM Granite vLLM + Sovereign XML Compiler | |
| interface BobArtifact { | |
| hash: string; | |
| type: string; | |
| content: Uint8Array; | |
| wormAnchor?: string; | |
| } | |
| function createArtifact(content: string): BobArtifact { | |
| return { | |
| hash: "blake3:" + Math.random().toString(36), | |
| type: "SourceCode", | |
| content: new TextEncoder().encode(content), | |
| wormAnchor: "genesis" | |
| }; | |
| } | |
| // Main execution | |
| const artifact = createArtifact("Hello from BOB IDE!"); | |
| console.log(artifact); | |
| </textarea> | |
| <div class="editor-statusbar"> | |
| <span id="editor-lang">typescript</span> | |
| <span id="editor-stats">0 lines · 0 chars</span> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- RIGHT PANEL --> | |
| <div class="right-panel"> | |
| <div class="panel-tabs"> | |
| <button class="panel-tab active" onclick="switchPanel('terminal')">⟩ Terminal</button> | |
| <button class="panel-tab" onclick="switchPanel('xml')">🔮 XML Compiler</button> | |
| <button class="panel-tab" onclick="switchPanel('git')">🔒 Git</button> | |
| </div> | |
| <!-- TERMINAL --> | |
| <div id="terminal-panel" class="panel-content active"> | |
| <div class="terminal-output" id="terminal-output"> | |
| <div class="terminal-line output">[BOB IDE] Terminal ready</div> | |
| <div class="terminal-line output">[WORM] Chain initialized</div> | |
| <div class="terminal-line output">[Granite] Model engine loaded</div> | |
| </div> | |
| <div class="terminal-input-row"> | |
| <span class="terminal-prompt">$</span> | |
| <input id="terminal-input" class="terminal-input" placeholder="bash, git, npm, python..." /> | |
| <button class="omega-run" onclick="executeTerminal()">RUN</button> | |
| </div> | |
| </div> | |
| <!-- XML COMPILER --> | |
| <div id="xml-panel" class="panel-content"> | |
| <div class="xml-section"> | |
| <div class="xml-label">Step 1: Natural Language</div> | |
| <textarea id="xml-input" class="xml-textarea" placeholder="You are a zero-sorry Lean 4 verifier..." style="height: 60px;"></textarea> | |
| <button class="xml-button" onclick="compileXML()">Compile to XML</button> | |
| </div> | |
| <div class="xml-section" id="xml-result" style="display: none;"> | |
| <div class="xml-label">✅ Compiled XML</div> | |
| <div class="xml-output" id="xml-output"></div> | |
| </div> | |
| <div class="xml-section"> | |
| <div class="xml-label">Step 2: Model Control</div> | |
| <select id="model-select" class="xml-textarea" style="height: auto; padding: 6px;"> | |
| <option value="granite">IBM Granite (vLLM)</option> | |
| <option value="nemotron">Nemotron</option> | |
| <option value="mistral">Mistral</option> | |
| </select> | |
| <textarea id="query-input" class="xml-textarea" placeholder="Ask the model..." style="height: 50px;"></textarea> | |
| <button class="xml-button" onclick="controlModel()">Run Model</button> | |
| </div> | |
| </div> | |
| <!-- GIT --> | |
| <div id="git-panel" class="panel-content"> | |
| <div class="terminal-output" id="git-output" style="height: 100%; border: none;"> | |
| <div class="terminal-line output">[GIT] Ready</div> | |
| </div> | |
| <div class="terminal-input-row"> | |
| <span class="terminal-prompt">git›</span> | |
| <input id="git-input" class="terminal-input" placeholder="status, log, commit..." /> | |
| <button class="omega-run" onclick="executeGit()">RUN</button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- OMEGA SHELL (Bottom) --> | |
| <div class="omega-shell"> | |
| <header class="omega-bar"> | |
| <strong class="omega-mark">Ω OMEGA SHELL</strong> | |
| <span class="omega-state">EVIDENCE OR SILENCE</span> | |
| <span class="omega-spacer"></span> | |
| <span class="omega-chip">GRANITE vLLM</span> | |
| <span class="omega-chip">RELEASE 1.0</span> | |
| </header> | |
| <main class="omega-output" id="omega-output"> | |
| <div class="omega-line" data-kind="system">[Ω] BOB IDE Release 1.0 mounted</div> | |
| <div class="omega-line" data-kind="system">[policy] commands via allowlist: git, grep, curl, bash, npm, python</div> | |
| <div class="omega-line" data-kind="system">[granite] IBM Granite vLLM ready for inference</div> | |
| </main> | |
| <form class="omega-input-row" onsubmit="executeOmega(event)"> | |
| <label class="omega-prompt" for="omega-input">Ω›</label> | |
| <input class="omega-input" id="omega-input" autocomplete="off" placeholder="git status" /> | |
| <button class="omega-run" type="submit">EXECUTE</button> | |
| </form> | |
| </div> | |
| <script> | |
| // ================================================================ | |
| // BOB IDE RELEASE 1.0 — Pure JavaScript, Browser + Terminal Ready | |
| // ================================================================ | |
| const API_BASE = 'http://localhost:3000'; | |
| let currentXML = null; | |
| // ================================================================ | |
| // UI NAVIGATION | |
| // ================================================================ | |
| function switchTab(panel, tab) { | |
| document.querySelectorAll(`.${panel}-tab`).forEach(t => t.classList.remove('active')); | |
| event.target.classList.add('active'); | |
| } | |
| function switchPanel(panel) { | |
| document.querySelectorAll('.panel-content').forEach(p => p.classList.remove('active')); | |
| document.getElementById(`${panel}-panel`).classList.add('active'); | |
| document.querySelectorAll('.panel-tab').forEach(t => t.classList.remove('active')); | |
| event.target.classList.add('active'); | |
| } | |
| // ================================================================ | |
| // EDITOR | |
| // ================================================================ | |
| const editor = document.getElementById('code-editor'); | |
| editor.addEventListener('input', () => { | |
| const lines = editor.value.split('\n').length; | |
| const chars = editor.value.length; | |
| document.getElementById('editor-stats').textContent = `${lines} lines · ${chars} chars`; | |
| }); | |
| function saveFile() { | |
| const code = editor.value; | |
| fetch(`${API_BASE}/api/file/write`, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify({ path: 'main.ts', content: code }) | |
| }).then(r => r.json()).then(d => { | |
| addTerminalLine(d.ok ? '✅ File saved' : '❌ Save failed', d.ok ? 'success' : 'error'); | |
| }); | |
| } | |
| function runCode() { | |
| const code = editor.value; | |
| if (code.includes('function') || code.includes('const')) { | |
| try { | |
| eval(code); | |
| addTerminalLine('✅ Code executed', 'success'); | |
| } catch (e) { | |
| addTerminalLine(`❌ ${e.message}`, 'error'); | |
| } | |
| } | |
| } | |
| // ================================================================ | |
| // TERMINAL | |
| // ================================================================ | |
| function executeTerminal() { | |
| const cmd = document.getElementById('terminal-input').value.trim(); | |
| if (!cmd) return; | |
| addTerminalLine(`$ ${cmd}`, 'input'); | |
| document.getElementById('terminal-input').value = ''; | |
| fetch(`${API_BASE}/api/omega/run`, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify({ command: cmd }) | |
| }).then(r => r.json()).then(d => { | |
| if (d.ok) { | |
| addTerminalLine(d.output || '[no output]', 'output'); | |
| } else { | |
| addTerminalLine(d.error || d.output, 'error'); | |
| } | |
| }).catch(e => addTerminalLine(e.message, 'error')); | |
| } | |
| function addTerminalLine(text, type = 'output') { | |
| const output = document.getElementById('terminal-output'); | |
| const line = document.createElement('div'); | |
| line.className = `terminal-line ${type}`; | |
| line.textContent = text; | |
| output.appendChild(line); | |
| output.scrollTop = output.scrollHeight; | |
| } | |
| // ================================================================ | |
| // OMEGA SHELL (Bottom) | |
| // ================================================================ | |
| function executeOmega(event) { | |
| event.preventDefault(); | |
| const cmd = document.getElementById('omega-input').value.trim(); | |
| if (!cmd) return; | |
| const output = document.getElementById('omega-output'); | |
| const line = document.createElement('div'); | |
| line.className = 'omega-line'; | |
| line.setAttribute('data-kind', 'system'); | |
| line.textContent = `Ω› ${cmd}`; | |
| output.appendChild(line); | |
| document.getElementById('omega-input').value = ''; | |
| fetch(`${API_BASE}/api/omega/run`, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify({ command: cmd }) | |
| }).then(r => r.json()).then(d => { | |
| const resultLine = document.createElement('div'); | |
| resultLine.className = 'omega-line'; | |
| resultLine.setAttribute('data-kind', d.ok ? 'ok' : 'error'); | |
| resultLine.textContent = d.output || d.error; | |
| output.appendChild(resultLine); | |
| output.scrollTop = output.scrollHeight; | |
| }).catch(e => { | |
| const errLine = document.createElement('div'); | |
| errLine.className = 'omega-line'; | |
| errLine.setAttribute('data-kind', 'error'); | |
| errLine.textContent = `[SILENCE] ${e.message}`; | |
| output.appendChild(errLine); | |
| }); | |
| } | |
| // ================================================================ | |
| // XML COMPILER | |
| // ================================================================ | |
| function compileXML() { | |
| const input = document.getElementById('xml-input').value.trim(); | |
| if (!input) return; | |
| fetch(`${API_BASE}/api/xml/compile`, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify({ mode: 'skeleton', naturalLanguage: input }) | |
| }).then(r => r.json()).then(d => { | |
| if (d.ok) { | |
| currentXML = d.xmlOutput; | |
| document.getElementById('xml-output').textContent = d.xmlOutput.slice(0, 300); | |
| document.getElementById('xml-result').style.display = 'block'; | |
| } | |
| }); | |
| } | |
| function controlModel() { | |
| if (!currentXML) return alert('Compile XML first'); | |
| const query = document.getElementById('query-input').value.trim(); | |
| if (!query) return; | |
| fetch(`${API_BASE}/api/xml/control-model`, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify({ | |
| xmlPrompt: currentXML, | |
| model: document.getElementById('model-select').value, | |
| userQuery: query | |
| }) | |
| }).then(r => r.json()).then(d => { | |
| if (d.ok) { | |
| const result = document.createElement('div'); | |
| result.className = 'xml-output'; | |
| result.style.marginTop = '8px'; | |
| result.textContent = d.response; | |
| document.getElementById('xml-panel').appendChild(result); | |
| } | |
| }); | |
| } | |
| // ================================================================ | |
| // GIT | |
| // ================================================================ | |
| function executeGit() { | |
| const cmd = `git ${document.getElementById('git-input').value.trim()}`; | |
| if (cmd === 'git ') return; | |
| const line = document.createElement('div'); | |
| line.className = 'terminal-line input'; | |
| line.textContent = `git› ${cmd}`; | |
| document.getElementById('git-output').appendChild(line); | |
| document.getElementById('git-input').value = ''; | |
| fetch(`${API_BASE}/api/omega/run`, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify({ command: cmd }) | |
| }).then(r => r.json()).then(d => { | |
| const resultLine = document.createElement('div'); | |
| resultLine.className = 'terminal-line output'; | |
| resultLine.textContent = d.output || d.error; | |
| document.getElementById('git-output').appendChild(resultLine); | |
| document.getElementById('git-output').scrollTop = document.getElementById('git-output').scrollHeight; | |
| }); | |
| } | |
| // ================================================================ | |
| // INIT | |
| // ================================================================ | |
| document.getElementById('terminal-input').addEventListener('keydown', e => { | |
| if (e.key === 'Enter') executeTerminal(); | |
| }); | |
| console.log('🤖 BOB IDE RELEASE 1.0 loaded'); | |
| </script> | |
| </body> | |
| </html> | |