108 lines
4.3 KiB
HTML
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>
|