226 lines
12 KiB
HTML
226 lines
12 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>TraderAI</title>
|
|
<link rel="icon" href="/static/art/LBC_Logo.ico" sizes="any">
|
|
<link rel="stylesheet" href="/static/styles.css">
|
|
</head>
|
|
<body>
|
|
<main class="shell">
|
|
<nav class="chat-rail collapsed" id="chat-rail" aria-label="Chats, plans, and inbox">
|
|
<div class="chat-rail-top">
|
|
<button class="icon-button" id="chat-sidebar-toggle" type="button" title="Chats" aria-expanded="false">
|
|
<i data-lucide="panel-left" aria-hidden="true"></i>
|
|
<span>Menu</span>
|
|
</button>
|
|
<button class="icon-button" id="new-chat" type="button" title="New chat">
|
|
<i data-lucide="square-pen" aria-hidden="true"></i>
|
|
<span>New chat</span>
|
|
</button>
|
|
</div>
|
|
<div class="chat-rail-content">
|
|
<section class="chat-nav-section">
|
|
<div class="rail-heading">Chats</div>
|
|
<div class="chat-list" id="chat-list"></div>
|
|
</section>
|
|
<section class="chat-nav-section">
|
|
<div class="rail-heading-row">
|
|
<div class="rail-heading">Plans</div>
|
|
<button class="rail-icon-button" id="plans-toggle" type="button" title="Plans" aria-expanded="false" aria-controls="plans-panel">
|
|
<i data-lucide="list-checks" aria-hidden="true"></i>
|
|
</button>
|
|
</div>
|
|
<div class="plans-rail-list" id="plans-rail-list"></div>
|
|
</section>
|
|
<section class="chat-nav-section">
|
|
<div class="rail-heading">Inbox</div>
|
|
<div class="inbox-list" id="inbox-list"></div>
|
|
</section>
|
|
</div>
|
|
</nav>
|
|
<section class="workspace">
|
|
<header class="topbar">
|
|
<div class="brand-block">
|
|
<div class="logo-wrap" aria-hidden="true">
|
|
<img src="/static/art/LBC_Logo.png" alt="">
|
|
</div>
|
|
<div class="brand-copy">
|
|
<p class="eyebrow">Lambda Banking Conglomerate</p>
|
|
<h1>TraderAI</h1>
|
|
<p>Institutional marketplace intelligence for UEX operations</p>
|
|
</div>
|
|
<span class="brand-short" aria-hidden="true">LBC</span>
|
|
</div>
|
|
<div class="status" id="status">Ready</div>
|
|
</header>
|
|
<div class="warning" id="warning" hidden></div>
|
|
<div class="messages" id="messages"></div>
|
|
<div class="composer-wrap">
|
|
<form class="composer" id="chat-form">
|
|
<textarea id="message-input" rows="2" placeholder="Search listings, draft a reply, prepare an offer..."></textarea>
|
|
<button type="submit">Send</button>
|
|
</form>
|
|
</div>
|
|
</section>
|
|
<aside class="actions">
|
|
<section class="side-section">
|
|
<h2>Pending Approval</h2>
|
|
<div id="pending-actions" class="pending-empty">No pending actions</div>
|
|
</section>
|
|
<section class="side-section sidebar-tools">
|
|
<div class="sidebar-tool-buttons" role="tablist" aria-label="Sidebar panels">
|
|
<button class="sidebar-tool-button" id="settings-toggle" type="button" aria-expanded="false" aria-controls="settings-panel" title="Settings">
|
|
<i data-lucide="settings" aria-hidden="true"></i>
|
|
<span>Settings</span>
|
|
</button>
|
|
<button class="sidebar-tool-button" id="memory-toggle" type="button" aria-expanded="false" aria-controls="memory-panel" title="Memory">
|
|
<i data-lucide="brain" aria-hidden="true"></i>
|
|
<span>Memory</span>
|
|
</button>
|
|
<button class="sidebar-tool-button" id="ollama-toggle" type="button" aria-expanded="false" aria-controls="ollama-panel" title="Ollama">
|
|
<img class="sidebar-tool-image" src="/static/art/ollama-icon.svg" alt="" onerror="this.remove();">
|
|
<i data-lucide="bot" aria-hidden="true"></i>
|
|
<span>Ollama</span>
|
|
</button>
|
|
</div>
|
|
<div class="sidebar-panel" id="settings-panel" hidden>
|
|
<div class="section-title-row">
|
|
<h2>Config</h2>
|
|
<button class="secondary small-button" id="config-refresh" type="button">Refresh</button>
|
|
</div>
|
|
<form class="config-form" id="config-form">
|
|
<label>UEX API URL<input id="config-uex-base-url" name="uex_base_url" type="text"></label>
|
|
<label>UEX Secret Key<input id="config-uex-secret-key" name="uex_secret_key" type="password" autocomplete="off"></label>
|
|
<label>UEX Bearer Token<input id="config-uex-bearer-token" name="uex_bearer_token" type="password" autocomplete="off"></label>
|
|
<label>UEX Username<input id="config-traderai-user-name" name="traderai_user_name" type="text"></label>
|
|
<label>Memory DB Path<input id="config-traderai-memory-path" name="traderai_memory_path" type="text"></label>
|
|
<label>Notification Poll Seconds<input id="config-uex-notification-poll-seconds" name="uex_notification_poll_seconds" type="number" min="15" step="15"></label>
|
|
<label class="config-check"><input id="config-require-write-approval" name="require_write_approval" type="checkbox"> Require write approval</label>
|
|
<div class="config-paths" id="config-paths"></div>
|
|
<button type="submit">Save Config</button>
|
|
<div class="config-status" id="config-status"></div>
|
|
</form>
|
|
<div class="update-box">
|
|
<div class="section-title-row">
|
|
<h2>Updates</h2>
|
|
<button class="secondary small-button" id="update-check" type="button">Check</button>
|
|
</div>
|
|
<div class="update-status" id="update-status"></div>
|
|
<div class="update-actions">
|
|
<button class="secondary small-button" id="update-open-releases" type="button">Releases</button>
|
|
<button class="small-button" id="update-install" type="button">Update</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sidebar-panel" id="memory-panel" hidden>
|
|
<div class="section-title-row">
|
|
<h2>Memory</h2>
|
|
<button class="secondary small-button" id="memory-refresh" type="button">Refresh</button>
|
|
</div>
|
|
<div class="memory-controls">
|
|
<label><input type="checkbox" id="clear-memories" checked> Memories</label>
|
|
<label><input type="checkbox" id="clear-conversations" checked> Chat</label>
|
|
<label><input type="checkbox" id="clear-outbox" checked> Notices</label>
|
|
<label><input type="checkbox" id="clear-profile"> Profile</label>
|
|
<label><input type="checkbox" id="clear-jobs"> Jobs</label>
|
|
</div>
|
|
<button class="danger-button" id="memory-clear" type="button">Clear Selected</button>
|
|
<div id="memory-inspector" class="memory-inspector"></div>
|
|
</div>
|
|
<div class="sidebar-panel" id="ollama-panel" hidden>
|
|
<div class="section-title-row">
|
|
<h2>Ollama</h2>
|
|
<button class="secondary small-button" id="ollama-refresh" type="button">Refresh</button>
|
|
</div>
|
|
<form class="config-form" id="ollama-config-form">
|
|
<label>Ollama URL<input id="ollama-base-url" name="ollama_base_url" type="text"></label>
|
|
<label>Model<input id="ollama-model" name="ollama_model" type="text"></label>
|
|
<label>Context Tokens<input id="ollama-num-ctx" name="ollama_num_ctx" type="number" min="1024" step="1024"></label>
|
|
<button type="submit">Save Ollama Config</button>
|
|
</form>
|
|
<div class="ollama-status" id="ollama-status"></div>
|
|
<div class="ollama-actions">
|
|
<button class="secondary small-button" id="ollama-download" type="button">Download</button>
|
|
<button class="secondary small-button" id="ollama-install" type="button">Auto Install</button>
|
|
<button class="secondary small-button" id="ollama-launch" type="button">Launch</button>
|
|
<button class="small-button" id="ollama-pull" type="button">Install Model</button>
|
|
</div>
|
|
<div class="config-status" id="ollama-message"></div>
|
|
</div>
|
|
</section>
|
|
</aside>
|
|
</main>
|
|
<div class="floating-panel" id="negotiation-panel" hidden>
|
|
<div class="floating-panel-header">
|
|
<div>
|
|
<p class="eyebrow">UEX negotiation</p>
|
|
<h2 id="negotiation-title">Negotiation</h2>
|
|
</div>
|
|
<button class="icon-button light" id="negotiation-close" type="button" title="Close">
|
|
<i data-lucide="x" aria-hidden="true"></i>
|
|
</button>
|
|
</div>
|
|
<div class="negotiation-messages" id="negotiation-messages"></div>
|
|
<form class="negotiation-composer" id="negotiation-form">
|
|
<textarea id="negotiation-input" rows="2" placeholder="Reply to the other party..."></textarea>
|
|
<button type="submit">Send</button>
|
|
</form>
|
|
<div class="config-status" id="negotiation-status"></div>
|
|
</div>
|
|
<div class="floating-panel plans-floating-panel" id="plans-panel" hidden>
|
|
<div class="floating-panel-header">
|
|
<div>
|
|
<p class="eyebrow">Continual work</p>
|
|
<h2>Plans</h2>
|
|
</div>
|
|
<div class="floating-panel-actions">
|
|
<button class="icon-button light" id="plans-refresh" type="button" title="Refresh plans">
|
|
<i data-lucide="refresh-cw" aria-hidden="true"></i>
|
|
</button>
|
|
<button class="icon-button light" id="plans-close" type="button" title="Close">
|
|
<i data-lucide="x" aria-hidden="true"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="plans-panel-body">
|
|
<form class="config-form" id="plan-form">
|
|
<label>Title<input id="plan-title" type="text" placeholder="Wikelo Idris parts"></label>
|
|
<label>Objective<input id="plan-objective" type="text" placeholder="Find and draft deals for the parts I list"></label>
|
|
<label>Kind
|
|
<select id="plan-kind">
|
|
<option value="buying">Buying</option>
|
|
<option value="custom">Custom</option>
|
|
</select>
|
|
</label>
|
|
<label>Items<textarea id="plan-items" rows="4" placeholder="One item per line, optionally: name | quantity | max unit price"></textarea></label>
|
|
<label>Instructions<textarea id="plan-instructions" rows="3" placeholder="Extra guidance for custom or buying plans"></textarea></label>
|
|
<label>Cron Cadence<input id="plan-cadence" type="text" placeholder="0 */6 * * *"></label>
|
|
<label>Message Tone<input id="plan-tone" type="text" placeholder="polite and concise"></label>
|
|
<button type="submit">Create Plan</button>
|
|
<div class="config-status" id="plans-status"></div>
|
|
</form>
|
|
<div class="plans-dashboard" id="plans-dashboard"></div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-backdrop" id="update-modal" hidden>
|
|
<section class="update-modal-card">
|
|
<div class="section-title-row">
|
|
<h2>Update Available</h2>
|
|
<button class="icon-button light" id="update-modal-close" type="button" title="Close">
|
|
<i data-lucide="x" aria-hidden="true"></i>
|
|
</button>
|
|
</div>
|
|
<p id="update-modal-copy"></p>
|
|
<div class="update-actions">
|
|
<button class="secondary small-button" id="update-modal-releases" type="button">Releases</button>
|
|
<button class="small-button" id="update-modal-install" type="button">Update</button>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
<script src="https://unpkg.com/lucide@0.562.0/dist/umd/lucide.min.js"></script>
|
|
<script src="/static/app.js"></script>
|
|
</body>
|
|
</html>
|