import { useState, useEffect } from "react"; import { agentRunnerManager, AgentRunnerConfig, AgentRunnerStatus, } from "../../services/agents/agentRunner"; import { DEFAULT_ANTHROPIC_API_URL } from "@shared/constants"; import { t } from "../../services/core/i18n"; interface AgentRunnerSettingsProps { isOpen: boolean; onClose: () => void; } function AgentRunnerSettings({ isOpen, onClose }: AgentRunnerSettingsProps) { const [config, setConfig] = useState( agentRunnerManager.getConfig(), ); const [status, setStatus] = useState({ running: false }); const [loading, setLoading] = useState(false); const [message, setMessage] = useState(""); useEffect(() => { if (isOpen) { loadConfig(); checkStatus(); } }, [isOpen]); const loadConfig = async () => { await agentRunnerManager.loadConfig(); setConfig(agentRunnerManager.getConfig()); }; const checkStatus = async () => { const s = await agentRunnerManager.checkStatus(); setStatus(s); }; const handleSave = async () => { agentRunnerManager.setConfig(config); await agentRunnerManager.saveConfig(); setMessage(t("Claw.AgentRunner.configSaved")); setTimeout(() => setMessage(""), 2000); }; const handleStartStop = async () => { setLoading(true); setMessage(""); try { if (status.running) { const result = await agentRunnerManager.stop(); if (result.success) { setMessage(t("Claw.AgentRunner.stopped")); } else { setMessage(t("Claw.AgentRunner.error", result.error || "")); } } else { const result = await agentRunnerManager.start(); if (result.success) { setMessage(t("Claw.AgentRunner.started")); } else { setMessage(t("Claw.AgentRunner.error", result.error || "")); } } } catch (error) { setMessage(t("Claw.AgentRunner.error", String(error))); } await checkStatus(); setLoading(false); }; if (!isOpen) return null; return (
e.stopPropagation()} >

Agent Runner

{status.running ? t("Claw.AgentRunner.running") : t("Claw.AgentRunner.stoppedStatus")}
{status.pid &&
PID: {status.pid}
}
{status.running && (
{t("Claw.AgentRunner.backendAddress")}: {status.backendUrl}
{t("Claw.AgentRunner.proxyAddress")}: {status.proxyUrl}
)}

{t("Claw.AgentRunner.config")}

setConfig({ ...config, binPath: e.target.value }) } placeholder="qiming-agent-core" />
setConfig({ ...config, backendPort: parseInt(e.target.value), }) } placeholder="60001" />
setConfig({ ...config, proxyPort: parseInt(e.target.value) }) } placeholder="60002" />
setConfig({ ...config, apiKey: e.target.value })} placeholder="sk-ant-..." />
setConfig({ ...config, apiBaseUrl: e.target.value }) } placeholder={DEFAULT_ANTHROPIC_API_URL} autoComplete="off" spellCheck={false} />
{message &&
{message}
}
); } export default AgentRunnerSettings;