Files
sovereign_browser/www/agents/config.html
T

108 lines
4.3 KiB
HTML

<!DOCTYPE html>
<html class="light">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Agent</title>
<link rel="stylesheet" href="sovereign://agents/config.css">
</head>
<body>
<h1>Agent</h1>
<p class="note">
Configure the LLM provider for the embedded agent. Providers are
shared across all apps (sovereign_browser, client, didactyl) via the
Nostr <code>d:user-settings</code> event. The model, system prompt,
and max iterations are per-app. Type a semicolon then a message in
the URL bar to talk to the agent.
</p>
<h2>Providers (shared)</h2>
<div class="field">
<div><div class="setting-name">Active provider</div></div>
<div><select id="agent.provider" onchange="onProviderChange()"></select></div>
</div>
<div class="field">
<div><div class="setting-name">Provider name</div></div>
<div><input type="text" id="provider_name" size="30">
<button class="save-btn" onclick="saveProviderName()">Rename</button></div>
</div>
<div class="field">
<div><div class="setting-name">Base URL</div></div>
<div><input type="text" id="agent.llm_base_url" size="50">
<button class="save-btn" onclick="saveAndRefresh('agent.llm_base_url')">Save</button></div>
</div>
<div class="field">
<div><div class="setting-name">API Key</div></div>
<div><input type="text" id="agent.llm_api_key" size="50">
<label style="margin-left:4px;font-size:12px">
<input type="checkbox" id="api-key-hide"
onchange="toggleKeyHide()">Hide</label>
<button class="save-btn" onclick="saveAndRefresh('agent.llm_api_key')">Save</button></div>
</div>
<div class="field">
<div><div class="setting-name">Manage providers</div></div>
<div><input type="text" id="new_provider_name" size="20"
placeholder="new provider name">
<button class="save-btn" onclick="addProvider()">Add</button>
<button class="btn btn-del" onclick="removeProvider()">Remove Active</button></div>
</div>
<h2>Agent Config (per-app)</h2>
<div class="field">
<div><div class="setting-name">Model</div></div>
<div><select id="agent.llm_model" onchange="onModelChange()"></select>
<input type="text" id="agent.llm_model_text" size="30"
style="display:none;margin-left:4px"
oninput="onModelTextInput()">
<button id="refresh-models-btn" class="save-btn"
onclick="refreshModels()">Refresh Models</button></div>
</div>
<div class="field">
<div><div class="setting-name">Max iterations</div></div>
<div><input type="number" id="agent.max_iterations" min="1" max="10000">
<button class="save-btn" onclick="save('agent.max_iterations')">Save</button></div>
</div>
<h2>Sovereign Browser Skill</h2>
<p class="note">
The system prompt is treated as the default skill for sovereign_browser.
Edit it here, then click "Save as Skill" to publish it to Nostr as a
kind 31123 event (shareable with client, didactyl, and other apps).
</p>
<div class="field">
<div><div class="setting-name">Name</div></div>
<div><input type="text" id="agent.skill_name" size="50">
<button class="save-btn" onclick="save('agent.skill_name')">Save</button></div>
</div>
<div class="field">
<div><div class="setting-name">Description</div></div>
<div><input type="text" id="agent.skill_description" size="70">
<button class="save-btn" onclick="save('agent.skill_description')">Save</button></div>
</div>
<div class="field">
<div><div class="setting-name">Template (system prompt)</div></div>
<div><textarea id="agent.skill_template" rows="8" cols="70"></textarea>
<button class="save-btn" onclick="save('agent.skill_template')">Save</button></div>
</div>
<div class="field">
<div><div class="setting-name">Requires tools (comma-separated)</div></div>
<div><input type="text" id="agent.skill_requires_tools" size="50">
<button class="save-btn" onclick="save('agent.skill_requires_tools')">Save</button>
<button class="save-btn" onclick="saveAsSkill()">Save as Skill</button></div>
</div>
<p><a href="sovereign://agents/chat" target="_blank">Open Agent Chat</a></p>
<div id="status" class="status"></div>
<script src="sovereign://agents/config.js"></script>
</body>
</html>