File size: 5,181 Bytes
b8a03fa | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | <!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta
http-equiv="Content-Security-Policy"
content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; worker-src 'self' blob:; img-src 'self' data:; font-src 'self' data:"
/>
<title>BOB Desktop IDE</title>
</head>
<body>
<div class="app-shell">
<header class="titlebar">
<div class="brand">
<span class="brand-mark">BOB</span>
<span class="brand-title">Desktop IDE</span>
</div>
<div class="root-pill" title="Workspace root">
<i data-lucide="folder-root"></i>
<span id="rootPath">Loading workspace</span>
</div>
<div id="status" class="status" data-kind="idle">Booting</div>
</header>
<main class="workbench">
<aside class="sidebar">
<div class="panel-heading">
<span>Explorer</span>
<button id="refreshButton" class="icon-button" type="button" title="Refresh explorer">
<i data-lucide="refresh-cw"></i>
</button>
</div>
<div id="fileTree" class="file-tree"></div>
</aside>
<section class="editor-column">
<div class="editor-toolbar">
<div class="file-chip">
<i data-lucide="file-code"></i>
<span id="fileName">README.md</span>
<small id="fileMeta">markdown</small>
</div>
<button id="saveButton" class="tool-button compact" type="button" title="Save file">
<i data-lucide="save"></i>
<span>Save</span>
</button>
</div>
<div id="editorHost" class="editor-host"></div>
<section class="terminal-panel">
<div class="terminal-toolbar">
<div id="quickCommands" class="quick-commands"></div>
<label class="command-entry">
<i data-lucide="terminal"></i>
<input id="commandInput" type="text" value="npm test" spellcheck="false" />
</label>
<button id="runButton" class="tool-button compact" type="button" title="Run sandbox command">
<i data-lucide="play"></i>
<span>Run</span>
</button>
</div>
<pre id="terminal" class="terminal-output" aria-live="polite"></pre>
</section>
</section>
<aside class="right-rail">
<section class="chat-panel">
<div class="panel-heading">
<span>BOB</span>
<label class="tools-toggle" title="Allow the active model to call allowlisted Sovereign tools">
<input id="toolsEnabled" type="checkbox" checked />
<span>Tools</span>
</label>
</div>
<div id="chatLog" class="chat-log"></div>
<div class="chat-composer">
<textarea id="chatInput" rows="3" spellcheck="true"></textarea>
<button id="chatButton" class="icon-button send" type="button" title="Send to BOB">
<i data-lucide="send"></i>
</button>
</div>
</section>
<section class="model-panel">
<div class="panel-heading">
<span>Models</span>
<i data-lucide="key-round"></i>
</div>
<div class="model-form">
<label>
<span>Provider</span>
<select id="providerSelect"></select>
</label>
<label>
<span>Model</span>
<input id="modelInput" type="text" spellcheck="false" />
</label>
<label>
<span>Base URL</span>
<input id="baseUrlInput" type="text" spellcheck="false" />
</label>
<label>
<span>API key</span>
<input id="apiKeyInput" type="password" spellcheck="false" autocomplete="off" />
</label>
<div class="model-actions">
<button id="saveProviderButton" class="tool-button compact" type="button" title="Save provider settings">
<i data-lucide="save"></i>
<span>Save</span>
</button>
<button id="clearKeyButton" class="icon-button" type="button" title="Clear saved API key">
<i data-lucide="key-square"></i>
</button>
<span id="providerState" class="provider-state">Local</span>
</div>
</div>
</section>
<section class="trace-panel">
<div class="panel-heading">
<span>Sovereign Tools</span>
<i data-lucide="activity"></i>
</div>
<div id="toolList" class="tool-list"></div>
<div id="trace" class="trace-log"></div>
</section>
</aside>
</main>
</div>
<script type="module" src="./renderer.ts"></script>
</body>
</html>
|