mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-06 23:12:22 +02:00
static/js/settings.js was 5,721 lines behind a four-name public surface. static/js/settings/ already existed with dom, registry, search, sidebar, navigation and lifecycle, so this continues that package rather than inventing a layout. Moved verbatim, 407 lines: settings/speech.js initTtsSettings, initSttSettings settings/writingStyle.js initDocumentWritingStyle settings/imageModels.js initImageSettings settings/agent.js initAgentSettings settings/api.js postSettings, lifted from _postSettings These five were chosen because their only dependencies outside themselves were el/byId, _postSettings and sortModelIds. Panels with wider reach stay put: initEmailAccountsSettings, for instance, pulls a 64-declaration closure covering most of the file, and splitting that is a design change rather than a move. settings.js keeps its public surface exactly: open, close, refreshAiModelEndpoints and the default export, verified in a browser. Three test updates the move required: - tests/helpers/test_settings_shell_coordinator.mjs allowlists the real modules the coordinator may import, and rejected the new ones. That guard working is the reason to trust the rest of this diff. - two source-introspection tests read settings.js for behaviour that now lives in a panel module. They read the whole settings surface now, so the next extraction does not break them again.
59 lines
2.6 KiB
JavaScript
59 lines
2.6 KiB
JavaScript
// Agent settings panel.
|
|
// Extracted verbatim from static/js/settings.js. Behaviour is unchanged: the
|
|
// functions moved, their bodies did not. settings.js imports them and calls
|
|
// them from the same places, so load order and init sequence are untouched.
|
|
|
|
import { byId as el } from './dom.js';
|
|
import { postSettings as _postSettings } from './api.js';
|
|
|
|
export async function initAgentSettings() {
|
|
var toolsInput = el('set-agentMaxTools');
|
|
var roundsInput = el('set-agentMaxRounds');
|
|
var supInput = el('set-agentSupervisorLadder');
|
|
var msg = el('set-agentMsg');
|
|
if (!toolsInput) return;
|
|
|
|
try {
|
|
var res = await fetch('/api/auth/settings', { credentials: 'same-origin' });
|
|
var settings = await res.json();
|
|
if (settings.agent_max_tool_calls) toolsInput.value = settings.agent_max_tool_calls;
|
|
if (roundsInput && settings.agent_max_rounds) roundsInput.value = settings.agent_max_rounds;
|
|
if (supInput) supInput.checked = !!settings.agent_supervisor_ladder;
|
|
} catch (e) {}
|
|
|
|
// Clamp + coerce a raw input to an int in [lo, hi]; falls back to `dflt`
|
|
// when blank/non-numeric. Mirrors the server-side validation.
|
|
function clampInt(raw, lo, hi, dflt) {
|
|
var n = parseInt(raw, 10);
|
|
if (isNaN(n)) return dflt;
|
|
return Math.max(lo, Math.min(n, hi));
|
|
}
|
|
|
|
async function save() {
|
|
var tools = clampInt(toolsInput.value, 0, 1000, 0);
|
|
var rounds = roundsInput ? clampInt(roundsInput.value, 1, 200, 20) : null;
|
|
toolsInput.value = tools; // reflect the clamped value
|
|
if (roundsInput) roundsInput.value = rounds;
|
|
var payload = { agent_max_tool_calls: tools };
|
|
if (rounds != null) payload.agent_max_rounds = rounds;
|
|
if (supInput) payload.agent_supervisor_ladder = !!supInput.checked;
|
|
try {
|
|
await _postSettings(payload);
|
|
msg.textContent = (tools > 0 ? 'Limit: ' + tools + ' tool calls' : 'Unlimited tool calls') +
|
|
(rounds != null ? ' · ' + rounds + ' steps/message' : '') +
|
|
(supInput && supInput.checked ? ' · supervisor on' : '');
|
|
msg.style.color = 'var(--fg)';
|
|
} catch (e) { msg.textContent = 'Failed to save'; msg.style.color = 'var(--red)'; }
|
|
}
|
|
|
|
toolsInput.addEventListener('change', save);
|
|
if (roundsInput) roundsInput.addEventListener('change', save);
|
|
if (supInput) supInput.addEventListener('change', save);
|
|
var cur = parseInt(toolsInput.value, 10) || 0;
|
|
var curR = roundsInput ? (parseInt(roundsInput.value, 10) || 20) : null;
|
|
msg.textContent = (cur > 0 ? 'Limit: ' + cur + ' tool calls' : 'Unlimited tool calls') +
|
|
(curR != null ? ' · ' + curR + ' steps/message' : '') +
|
|
(supInput && supInput.checked ? ' · supervisor on' : '');
|
|
|
|
}
|